Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.52 MB
Время: 0.038 c
9-1112199822
$SerG$
2005-03-30 20:23
2005.07.11
[Error] File not found: DelphiX.dcr . Где взять?


14-1118128530
Kerk
2005-06-07 11:15
2005.07.11
Russia Today


3-1116509534
Alexander Panov
2005-05-19 17:32
2005.07.11
Структура хранения данных для клинета форумов.


1-1118542229
wood
2005-06-12 06:10
2005.07.11
Подключение HLP-файлов к системе помощи Delphi 2005


1-1118835220
Uzver32.dll
2005-06-15 15:33
2005.07.11
ROR&ROL




   Наверх