Ĺadny brzuch
Załóżmy, że w Image1 mam obrazek w formacie BMP.
Teraz moje pytanie brzmi:
Jak pobrać z obrazka Image1 liczbę koloru np. czerwonego? (wszystko jedno czy policzy pixel po pixelu, czy poda w procentach, czy inaczej, ważne by wynikiem była jakaś liczba w Label1.Caption)
Można tak zrobić?
ano mozna, np tak:
var i, j, licznik: integer; begin licznik := 0; if not image1.Picture.Bitmap.Empty then //czy obraz to bmp for i := 0 to image1.Picture.Bitmap.Width - 1 do for j := 0 to image1.Picture.Bitmap.Height - 1 do //sprawdz, czy pixel jest czerwony if image1.Picture.Bitmap.Canvas.Pixels[i, j] = clRed then licznik := licznik + 1; label1.Caption := inttostr(licznik); //wyswietl ilosc pixeli end;
tylko to troche dlugo bedzie chodzilo dla duzych bitmap, dlatego zalecam zliczanie w TThread
to czy bedzie w watku czy nie zmieni predkosci tego, polecam zastosowanie ScanLine :) szybkie jak cholera..
reszta tak jak u kolegi..
dziękuję wam bardzo, bardzo mi pomogliście. Wszystko działa
btw. co oznacza "Canvas" tak dokładniej?
btw. co oznacza "Canvas" tak dokładniej?
Canvas reprezentuje graficznie kontrolki wizualne. W większosci wypadkow mozna na nim rysowac, zmieniajac wyglad kontrolek (ale na niektorych canvas'ach nie da sie rysowac - np TJPEGImage.Canvas). Przydaje sie to glownie przy tworzeniu kontrolek.
canvas po polsku oznacza płótno (takie malarskie) i to chyba dość dobrze opisuje jego zastosowanie :)
Jeśli masz jakiąś zmienną typu TColor i chcesz z niej wyciągnąć wartość koloru czerwonego to używasz funkcji GetRValue której jedynym parametrem jest zmienna typu TColor, dla koloru zielonego i niebieskiego jest to odpowiednio GetGValue i GetBValue, wszystkie te funkcje zwracają wynik typu byte, jeśli chcesz uzyskać kolor RGB z wprowadzonych wartości rgb używasz funkcji RGB wprowadzając po do niej po kolei wartość koloru czerwonego, zielonego i niebieskiego (wszystko typu byte), uzyskany wynik jest wtedy typu TColor
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Teraz moje pytanie brzmi:
Jak pobrać z obrazka Image1 liczbę koloru np. czerwonego? (wszystko jedno czy policzy pixel po pixelu, czy poda w procentach, czy inaczej, ważne by wynikiem była jakaś liczba w Label1.Caption)
Można tak zrobić?
ano mozna, np tak:
var i, j, licznik: integer; begin licznik := 0; if not image1.Picture.Bitmap.Empty then //czy obraz to bmp for i := 0 to image1.Picture.Bitmap.Width - 1 do for j := 0 to image1.Picture.Bitmap.Height - 1 do //sprawdz, czy pixel jest czerwony if image1.Picture.Bitmap.Canvas.Pixels[i, j] = clRed then licznik := licznik + 1; label1.Caption := inttostr(licznik); //wyswietl ilosc pixeli end;
tylko to troche dlugo bedzie chodzilo dla duzych bitmap, dlatego zalecam zliczanie w TThread
to czy bedzie w watku czy nie zmieni predkosci tego, polecam zastosowanie ScanLine :) szybkie jak cholera..
reszta tak jak u kolegi..
dziękuję wam bardzo, bardzo mi pomogliście. Wszystko działa
btw. co oznacza "Canvas" tak dokładniej?
btw. co oznacza "Canvas" tak dokładniej?
Canvas reprezentuje graficznie kontrolki wizualne. W większosci wypadkow mozna na nim rysowac, zmieniajac wyglad kontrolek (ale na niektorych canvas'ach nie da sie rysowac - np TJPEGImage.Canvas). Przydaje sie to glownie przy tworzeniu kontrolek.
canvas po polsku oznacza płótno (takie malarskie) i to chyba dość dobrze opisuje jego zastosowanie :)
Jeśli masz jakiąś zmienną typu TColor i chcesz z niej wyciągnąć wartość koloru czerwonego to używasz funkcji GetRValue której jedynym parametrem jest zmienna typu TColor, dla koloru zielonego i niebieskiego jest to odpowiednio GetGValue i GetBValue, wszystkie te funkcje zwracają wynik typu byte, jeśli chcesz uzyskać kolor RGB z wprowadzonych wartości rgb używasz funkcji RGB wprowadzając po do niej po kolei wartość koloru czerwonego, zielonego i niebieskiego (wszystko typu byte), uzyskany wynik jest wtedy typu TColor