Forum

bmp rgb pixele..

[+] Twoje konto

Subskrybuj kanał najnowszych wypowiedzi w tym temacie

Wątek zamknięty Forum > Porady > Programowanie > bmp rgb pixele..

Idź do strony:1
Ocena: (Ocen: 0)
Wypowiedzi 1 - 20 z 20
 Gość arek Kopiuj nick (83.30.130.*)
Wypowiedź dodana: 19 marca 2008, 21:48:54
« Opcje

Cześć
Mam problem i nikt "nie umiem" mi pomóc.
Chodzi mi o BMP, a dokładnie przeskanowanie tablicy i zliczenie ilości pixeli o danej wartości RGB. Następnie otrzymane dane przeliczenie na powierzchnie i zapisanie w formi etekstu np. niebieski=70mm2. Jesli mogę prosic o dokładne tłumaczenie, gdyż jest to moj debiut w dziedzinie programowania

 Gość REKLAMA Kopiuj nick (*->*)
Wypowiedź dodana: 19 marca 2008, 21:48:55

AvatarAdministrator Dżyszla Mężczyzna Kopiuj nick (83.2.108.*) |  
Wypowiedź dodana: 19 marca 2008, 22:09:53
« Opcje

A masz dostęp do danej grafiki na poziomie logicznym czy wyłącznie na poziomie plikowym?


mgr inż. Dżyszla

Nie odpisuję na problemy zgłaszane na e-mail lub PW!

Także dzięki firmie Netlook.pl możesz za darmo korzystać z tej strony!

 Gość arek Kopiuj nick (83.30.130.*)
Wypowiedź dodana: 19 marca 2008, 22:42:32
« Opcje

Mam tylko pliki *.bmp i chciałbym cos z nimi podziałać w c# tak jak pisałem, tzn liczyć powierzchnie interesujacych mnie kolorów. Wiem, że moge wykorzystać mi. metode getPixel ale zbytnio nie wiem jak ją ugryźć. W moim przypadku jest to zagadnienie dość ekstremalne gdyż nie mam czasu na podstawy programowania..a szkoda.

AvatarAdministrator Dżyszla Mężczyzna Kopiuj nick (83.2.108.*) |  
Wypowiedź dodana: 20 marca 2008, 00:26:06
« Opcje

Jeżeli masz wyłącznie pliki, których nie ładujesz do żadnego dedykowanej ich obsłudze obiektu to nie skorzystasz z getPixel, a pozostaje jedynie zapoznać się z formatem plików BMP.


mgr inż. Dżyszla

Nie odpisuję na problemy zgłaszane na e-mail lub PW!

Także dzięki firmie Netlook.pl możesz za darmo korzystać z tej strony!

 Zarejestrowany, zwieszony Stasiek-j Mężczyzna Kopiuj nick (0.0.0.*) |  
Wypowiedź dodana: 20 marca 2008, 01:20:25 | Wypowiedź edytowana Ostatnio edytowana: 20 marca 2008, 01:24:27 po raz 1-wszy przez: Stasiek-j
« Opcje

Może to coś pomoże: www.codersource.net/csharp_image_Processing.aspx

Bo rozumiem, ze do obsługi tych bitmap masz używać raczej funkcji dostępnych w środowisku C# niż pisać własne?

*** Dodano o 01:24:16: *** (Autoscalanie)

A to prawdopodobnie bardzo Cię zainteresuje:
http://msdn2.microsoft.com/en-us/library/system.drawing.bitmap.aspx

Ogólnie warto korzystać z oficjalnej dokumentacji. Wadą jest to, że serwer msdn dosyć wolno działa :-/
Ale w każdym razie w powyższym linku masz opisane jak się za to zabrać.


Stasiek

 Gość arek Kopiuj nick (83.30.132.*)
Wypowiedź dodana: 20 marca 2008, 19:25:05
« Opcje

Dzieki za odpowiedz i za zainteresowanie sie moja sprawa.
Wiem już, że c# traktuje BMP jak tablice, wiec nic nie musze tam wysyłać. Jest gdzes w sieci sciąga z procedurami obsługi zdarzaeń? Chodzi mi o cos takiego

private void pictureBox2_MouseMove(object sender, MouseEventArgs e)
{
if (bmp != null)
{
button2.BackColor = bmp.GetPixel(e.X, e.Y);
}
}

To polecenie wpisuje w pole button2 kolor zczytany pod kursorem.. i działa <szok> :-). Mysle, że polecenie zliczajace dany kolor i wpisujace wynik do np. label bedzie wyglądało podobnie. Mam racje?? Gorzej z przeliczaniem na powierzchnie, bo trzeba znac rozmiar pixela

AvatarAdministrator Dżyszla Mężczyzna Kopiuj nick (83.2.108.*) |  
Wypowiedź dodana: 20 marca 2008, 21:54:36 | Wypowiedź edytowana Ostatnio edytowana: 20 marca 2008, 21:55:36 po raz 1-wszy przez: Dżyszla
« Opcje

"rozmiar" pixela jest definiowany poprzez rozdzielczość (jako liczbę pikseli na cal - dpi (dots per inch); lub na metr - ppm (pixels per meter)). Informacje te zawarte są w nagłówku pliku (moj link z wcześniejszego posta), ale raczej nie są dostępne na wyższym poziomie np po wczytaniu pliku do zmiennej (choć trzeba by się zapoznać ze specyfikacją klasy w danym kompilatorze).

Zam dostęp do poszczególnych kolorów możesz uzyskać poprzez funkcje takie jak GetRed lub podobne (zależne od kompilatora) lub jako właściwość (.Red) lub funkcje klasowe ( .Red() ) a w ostateczności zawsze możesz rozbić liczbę bitowo:

B = Color & 255;
G = (Color >> 8) & 255;
R = (Color >> 16) & 255;

Zapis może być różny od języka i kompilatora - podałem zapis w C/C++

zakładając, że dany kompilator traktuje kolor jako zmienną postaci RRGGBB przeznaczając po 8 bitów na każdy kolor (format 24bitowy).


mgr inż. Dżyszla

Nie odpisuję na problemy zgłaszane na e-mail lub PW!

Także dzięki firmie Netlook.pl możesz za darmo korzystać z tej strony!

 Gość arek Kopiuj nick (83.30.192.*)
Wypowiedź dodana: 24 marca 2008, 18:57:51
« Opcje

witam
mam problem :-( nigdzie nie moge zlalezc przykladowego kodu wyszukiwania koloru na bmp ... poratujecie ??

AvatarAdministrator Dżyszla Mężczyzna Kopiuj nick (83.2.108.*) |  
Wypowiedź dodana: 26 marca 2008, 15:57:18
« Opcje

wyszukiwanie koloru? wystarczy stworzyć dwukrotnie zagnieżdżoną pętlę "przelatującą" wszystkie piksele obrazu. Przecież obraz to nic innego jak dwuwymiarowa tablica kolorów, zaś kolor to złożenie trzech podstawowych kolorów RGB.


mgr inż. Dżyszla

Nie odpisuję na problemy zgłaszane na e-mail lub PW!

Także dzięki firmie Netlook.pl możesz za darmo korzystać z tej strony!

 Gość arek Kopiuj nick (83.28.174.*)
Wypowiedź dodana: 29 marca 2008, 21:38:34
« Opcje

Witam. Mam pytanie troche z innej dziedziny ... mianowicie, jak za pomocą przycisku włączac/wyłączac widoczność np pictureBox albo tabControl? Działam na C#

AvatarAdministrator Dżyszla Mężczyzna Kopiuj nick (83.2.108.*) |  
Wypowiedź dodana: 30 marca 2008, 08:37:16
« Opcje

A nie ma przypadkiem właściwości Visible?


mgr inż. Dżyszla

Nie odpisuję na problemy zgłaszane na e-mail lub PW!

Także dzięki firmie Netlook.pl możesz za darmo korzystać z tej strony!

 Gość arek Kopiuj nick (83.28.186.*)
Wypowiedź dodana: 30 marca 2008, 12:34:40
« Opcje

Jest ale chcialbym moc wlaczac i wylaczac tabControl juz z poziomu programu

 Gość arek Kopiuj nick (83.28.186.*)
Wypowiedź dodana: 30 marca 2008, 13:05:00
« Opcje

Ok juz wiem :-)

private void button3_Click(object sender, EventArgs e)
{
tabControl1.Visible = true;

}

private void button4_Click(object sender, EventArgs e)
{
tabControl1.Visible = false;

}

podziekowania dla Larden z eprog.pl

AvatarAdministrator Dżyszla Mężczyzna Kopiuj nick (83.2.108.*) |  
Wypowiedź dodana: 30 marca 2008, 21:54:21
« Opcje

Wybacz, uznałem to za oczywistość, że właściwości można zmieniać także programowo.


mgr inż. Dżyszla

Nie odpisuję na problemy zgłaszane na e-mail lub PW!

Także dzięki firmie Netlook.pl możesz za darmo korzystać z tej strony!

 Gość arek Kopiuj nick (83.4.252.*)
Wypowiedź dodana: 1 kwietnia 2008, 22:35:46
« Opcje

Spoko :-) moja znajomosc programowania jest zadna. To raczej zycie mniezmusilo do "poznania" c#

 Zarejestrowany, zwieszony arek Kopiuj nick (83.28.177.*) |  
Wypowiedź dodana: 3 kwietnia 2008, 19:15:48
« Opcje

Hey mam do Was jeszcze 2 pytania:
a) rozdzielczosc BMP i wpisac ja do label ?
b) liczbowa wartosc RGB pod mysza ?

AvatarAdministrator Dżyszla Mężczyzna Kopiuj nick (0.0.0.*) |  
Wypowiedź dodana: 3 kwietnia 2008, 22:18:05
« Opcje

a) chodzi Ci o konwersję liczby na tekst? poszukaj czegoś w stylu IntToStr(ing)... choć nie wiem, czy zmienne liczbowe przypadkiem nie mają metody .toString()... (jak wspominałem, nie zna, C# :-) )
b) zdarzenie (ang. event) wywoływane przy przesuwaniu myszy (onMouseMove) - szukaj w tym kierunku.


mgr inż. Dżyszla

Nie odpisuję na problemy zgłaszane na e-mail lub PW!

Także dzięki firmie Netlook.pl możesz za darmo korzystać z tej strony!

 Zarejestrowany, zwieszony arek Kopiuj nick (83.30.130.*) |  
Wypowiedź dodana: 9 kwietnia 2008, 22:27:26 | Wypowiedź edytowana Ostatnio edytowana: 9 kwietnia 2008, 23:55:00 po raz 1-wszy przez: Dżyszla
« Opcje

Hey mam kolejny problem .. chociaz to moze byc banalne.

for (int y = 0; y < obrazekKopia.Height; y++)
{
for (int x = 0; x < obrazekKopia.Width; x++)
{
if ((R + G + B)/3 < 87 )
{
R = 255;
G = 0;
B = 0;
}
else
{
R = G = B = 0;
}
wskWejsciowy += 3; wskWyjsciowy += 3;
}
wskWejsciowy += nOffset; wskWyjsciowy += nOffset;
}

Moderowane przez Dżyszla :

Staraj się używać znacznika [ code ] przy pisaniu kodów

Uzywam tego kodu do zamiany pixeli, ktorych sredmia sumy skladowych koloru jest mniejsza od 87 na czerwony, reszta zostaje czarna. Problem polega na tym, ze chcialbym definiowac zakres srednich np od 20 do 90. Jak moglbym to zmodyfiowac??

AvatarAdministrator Dżyszla Mężczyzna Kopiuj nick (0.0.0.*) |  
Wypowiedź dodana: 9 kwietnia 2008, 23:57:14 | Wypowiedź edytowana Ostatnio edytowana: 9 kwietnia 2008, 23:59:43 po raz 1-wszy przez: Dżyszla
« Opcje

np poprzez wstawienie elementu, który umożliwi podanie wartości? Albo może poprzez wyświetlenie okna dialogowego z zapytaniem?
A może poprzez odczytanie takiej wartości z pliku?
Rozwiązań jest cała masa - sam musisz wiedzieć, czego chcesz :-) Sprowadza się to wszystko do zapisania tej wartosci w zmiennej, którą podstawisz w miejsce obecnej wartości "87".

*** Dodano o 23:59:43: *** (Autoscalanie)

Aha, ja rozumiem, że ten kod jest uproszczeniem? :-)


mgr inż. Dżyszla

Nie odpisuję na problemy zgłaszane na e-mail lub PW!

Także dzięki firmie Netlook.pl możesz za darmo korzystać z tej strony!

 Zarejestrowany, zwieszony arek Kopiuj nick (83.30.132.*) |  
Wypowiedź dodana: 11 kwietnia 2008, 20:52:54
« Opcje

ok to mam wyglada tak np:

if ((R + G + B/ 3 > 20 && (R + G + B) / 3 < 94.5)
{
R = 255;
G = 0;
B = 0;

}

:)

 
Idź do strony:1

[+] Pokaż/odśwież listę czytających i monitorujących ten wątek

Podobne tematy:
Tytuł wątkuDziałWypowiedziWyświetleńOcenaOstatnia wypowiedź

Wątek zamknięty - nie można już do niego dodawać nowych wypowiedzi

Subskrybuj kanał najnowszych wypowiedzi w tym temacie


Chcesz mieć też takie forum na swojej stronie? Napisz!

Strona istnieje od 25.01.2001
Ta strona używa plików Cookie
Helion.pl  
archive To tylko kopia strony wykonana przez robota internetowego! Aby wyświetlić aktualną zawartość przejdź do strony.
Ładowanie...

Optymalizowane dla przeglądarki Firefox
© Copyright 2001-2017 Dawid Najgiebauer. Wszelkie prawa zastrzeżone.
Ostatnia aktualizacja podstrony: 22.09.2014 12:12
Wszystkie czasy dla strefy czasowej: Europe/Warsaw