![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как отобразить цветную картинку в градациях серого?
Артем К © (2003-07-23 02:00:00)
Привет всем!!!
Вопрос в теме сообщения.
Заранее СПАСИБО!
ЮЮ (2003-07-23 05:14:00) [1]procedure TForm1.BitBtn1Click(Sender: TObject);
var
col, row: integer;
color: TColor;
intensity: integer;
begin
for row := 0 to Image1.Picture.Bitmap.Height - 1 do
for col := 0 to Image1.Picture.Bitmap.Width - 1 do begin
color := Image1.Picture.Bitmap.Canvas.Pixels[col, row];
intensity :=
(
(color and $00FF0000) shr 16 * 61 +
(color and $0000FF00) shr 8 * 174 +
( color and $000000FF)procedure TForm1.BitBtn1Click(Sender: TObject);
var
col, row: integer;
color: TColor;
intensity: integer;
begin
for row := 0 to Image1.Picture.Bitmap.Height - 1 do
for col := 0 to Image1.Picture.Bitmap.Width - 1 do begin
color := Image1.Picture.Bitmap.Canvas.Pixels[col, row];
intensity :=
(
(color and $00FF0000) shr 16 * 61 +
(color and $0000FF00) shr 8 * 174 +
(color and $000000FF) * 21
) shr 8;
color := intensity shl 16 + intensity shl 8 + intensity;
Image1.Picture.Bitmap.Canvas.Pixels[col, row] := color;
end;
end;
end.
P.S. Для ускорения вместо Canvas.Pixels следует использовать Bitmap.ScanLine
P.P.S. Для ещё большего ускорения использoвать библиотеку Graphics32
Артем К (2003-07-23 04:08:00) [2]
>>ЮЮ
Я конечно извиняюсь за ламерство, но можно ли исходник, а от че-то не понятно.
:)
ЮЮ (2003-07-23 03:40:00) [3]
интенсивность = (R * 61 + G * 174 + B * 21) / 256
( по материалам (коду) Graphics32)
где R,G,B - соответствующие составляющие каждого цвета
Задать R,G,B равными интенсивности