![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Пиксель
Юля © (2003-07-24 14:17:00)
Уважаемые мастера!!! Подскажите каким образом можно узнать на фотке число пикселей, например желтого цвета. Если можно, то с примерчиком, буду очень благодарна.
wiz (2003-07-26 02:39:00) [1]
2 Fenik: Просто разные люди реагируют по-разному на использование их кода. Тут, как говорится, лучше перебдеть, чем недопить...
;)))
Fenik (2003-07-25 21:45:00) [2]
> Я просто улыбаюсь :)))
В смысле, непонятно за что вы извиняетесь :))
Это же замечательно!
Fenik (2003-07-25 18:08:00) [3]
> Юля (25.07.03 06:48)
>Fenik Все здорово, только x постоянно равен 0 :((
Или на изображении нет того цвета который подсчитывается, или битмэп изначально не полноцветный (не 24 бит на пиксель), что при переводе его в полноцветный (Bitmap.PixelFormat := 24Bit) искомый цвет искажается.
У меня функция работает безупречно.
> wiz © (25.07.03 13:46)
> 2 Fenik: Приношу искренние извинения, за использование (и модификацию) вашего кода
Я просто улыбаюсь :)))
wiz (2003-07-25 13:46:00) [4]> ЮляПроцедура работает (сам проверял ;). Может быть все дело в том, что в фотке нет чистого желтого цвета?
Тогда нужно брать не только сам желтый, но и лежащие рядом цвета.
Например так:
function HowManyColoursSmooth(Bitmap: TBitmap; Color: TColor; smoothing:double): Integer;
var R, G, B: Byte;
p: pByteArray;
x, y: Integer;
delta:double;
begin
Result := 0;
R := Lo(Color);
G := Lo(Color shr 8);
B := Lo((Color shr 8) shr 8);
Bitmap.PixelFormat := pf24Bit;
for y := 0 to Bitmap.Height - 1 do begin
p := Bitmap.ScanLine[y];
for x := 0 to Bitmap.Width - 1 do
begin
delta:=sqrt(sqr(B - p[x*3])+sqr(G - p[x*3+1])+sqr(R - p[x*3+2]));
if delta<smoothing then Inc(Result);
( Bmp, clYellow, smooth)
> ЮляПроцедура работает (сам проверял ;). Может быть все дело в том, что в фотке нет чистого желтого цвета?
Тогда нужно брать не только сам желтый, но и лежащие рядом цвета.
Например так:
function HowManyColoursSmooth(Bitmap: TBitmap; Color: TColor; smoothing:double): Integer;
var R, G, B: Byte;
p: pByteArray;
x, y: Integer;
delta:double;
begin
Result := 0;
R := Lo(Color);
G := Lo(Color shr 8);
B := Lo((Color shr 8) shr 8);
Bitmap.PixelFormat := pf24Bit;
for y := 0 to Bitmap.Height - 1 do begin
p := Bitmap.ScanLine[y];
for x := 0 to Bitmap.Width - 1 do
begin
delta:=sqrt(sqr(B - p[x*3])+sqr(G - p[x*3+1])+sqr(R - p[x*3+2]));
if delta<smoothing then Inc(Result);
end;
end;
end;
...
smooth:=30;
x := HowManyColoursSmooth(Bmp, clYellow, smooth);
параметр smooth задает максимальную разницу между цветом pixel"а и целевым цветом
2 Fenik: Приношу искренние извинения, за использование (и модификацию) вашего кода
Юля (2003-07-25 06:48:00) [5]
>FenikВсе здорово, только x постоянно равен 0 :((
Fenik (2003-07-25 00:32:00) [6]
А ты переведи..
iXuSs (2003-07-24 23:34:00) [7]
> Colours
Гм... англичанин?
Fenik (2003-07-24 22:43:00) [8]Очень просто:
function HowManyColours(Bitmap: TBitmap; Color: TColor): Integer;
var R, G, B: Byte;
p: pByteArray;
x, y: Integer;
begin
Result := 0;
R := Lo(Color);
G := Lo(Color shr 8);
B := Lo((Color shr 8) shr 8);
Bitmap.PixelFormat := pf24Bit;
for y := 0 to Bitmap.Height - 1 do begin
p := Bitmap.ScanLine[y];
for x := 0 to Bitmap.Width - 1 do
if (B = p[x*3]) and
(G = p[x*3+1]) and
( R = p[x*3+2])Очень просто:
function HowManyColours(Bitmap: TBitmap; Color: TColor): Integer;
var R, G, B: Byte;
p: pByteArray;
x, y: Integer;
begin
Result := 0;
R := Lo(Color);
G := Lo(Color shr 8);
B := Lo((Color shr 8) shr 8);
Bitmap.PixelFormat := pf24Bit;
for y := 0 to Bitmap.Height - 1 do begin
p := Bitmap.ScanLine[y];
for x := 0 to Bitmap.Width - 1 do
if (B = p[x*3]) and
(G = p[x*3+1]) and
(R = p[x*3+2]) then Inc(Result);
end;
end;
...
x := HowManyColours(Bmp, clYellow);
iXuSs (2003-07-24 22:23:00) [9]
Сайт:
http://www.efg2.com
И это:
http://www.efg2.com/Lab/Graphics/Colors/ShowImage.htm
MBo (2003-07-24 14:28:00) [10]
Нужно их сосчитать.
медленно - canvas.pixels
быстрее - scanline
махом - http://www.delphimaster.ru/articles/pixels/index.html