Текущий архив: 2005.07.11;
Скачать: CL | DM;
ВнизАлгоритм преобразования монохромного изображения Найти похожие ветки
← →
dmk © (2005-03-15 00:52) [40]Так черещз блокнот скопируй и шрифт поменяй.
Все читается =)
← →
Fenik (2005-03-15 17:44) [41]> Штотоносец (14.03.05 23:21) [37]
> Остается теперь оптимизацией заняться =)procedure SetGrayScale(Bitmap: TBitmap; Value: Byte);
var Pixel: pRGBTriple;
X, Y: Integer;
A, A_2, B: Double;
ByteTable: array [Byte] of Byte;
begin
Bitmap.PixelFormat := pf24Bit;
if Value > 1 then begin
A := 255/(Value-1);
A_2 := A/2;
for X := 0 to 255 do begin
B := A * Round(X/A);
if (X - B) > A_2
then ByteTable[X] := Round(A*Round(X/(A+1)))
else ByteTable[X] := Round(X);
end;
end
else
FillChar(ByteTable, SizeOf(ByteTable), 0);
for Y := 0 to Bitmap.Height - 1 do begin
Pixel := Bitmap.ScanLine[Y];
for X := 0 to Bitmap.Width - 1 do begin
with Pixel^ do begin
rgbtBlue := ByteTable[rgbtBlue];
rgbtGreen := ByteTable[rgbtGreen];
rgbtRed := ByteTable[rgbtRed];
end;
Inc(Pixel);
end;
end;
end;
Тестирование - http://fenik.nm.ru/Gray.zip
Но этот алгоритм не умный, так сказать. Так как - [11].
Возьми например какртинку http://fenik.nm.ru/UGADAY.JPG и установи 3 цвета. В итоге лажа. Нужен умный алгоритм, который будет анализировать распределение цветов и в соответствии с этим подбирать опорные точки.
← →
Fenik (2005-03-15 18:53) [42]Упс, опечаточка, вместо строки -
else ByteTable[X] := Round(X)
нужноelse ByteTable[X] := Round(B)
В тесте тоже исправить.
Это я перед отправкой решил подправить, понимаешь.. :))
← →
Fenik (2005-03-15 19:19) [43]> Штотоносец
Кстати, я проверил ситуации (b-a*c)>(a/2) никогда не возникает.
Поэтому всё заполнение таблицы сводится кA := 255/(Value-1);
for X := 0 to 255 do
ByteTable[X] := Round(A * Round(X/A));
Тест я перезакачал. Можешь проверить.
Вот такая оптимизация. :))
← →
Fenik (2005-03-15 19:39) [44]Блин, да это ж почти тоже самое, что и я первый раз писал "грубый вариант". -))
Страницы: 1 2 вся ветка
Текущий архив: 2005.07.11;
Скачать: CL | DM;
Память: 0.53 MB
Время: 0.042 c