Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.08;
Скачать: CL | DM;

Вниз

как правильно и быстро просканировать пиксели   Найти похожие ветки 

 
Electric   (2005-12-07 13:32) [0]

задача: есть картинка размером 320х240 точек. есть массив из "0" и "1", нужно просканировать каждую точку картинки и если точка имеет цвет clBlack то в массив в соответствии с позицией просканированной точки нужно записать "1". попробовал сделать так:
var
DecodedText: String;
PixelColor: TColor;
PixX, PixY: Integer;
hLCD: HDC;
begin
PixX:=0;
PixY:=0;
hLCD:=PaintBox1.Canvas.Handle;
repeat
 for PixX:=0 to 320 do
  begin
   PixelColor:=GetPixel(hLCD,PixX,PixY);
   if PixelColor=clBlack then DecodedText:=DecodedText+"1"
                         else DecodedText:=DecodedText+"0";
  end;
   PixY:=PixY+1;
until PixY=240;
Memo1.Lines.Text:=DecodedText;


результат получил, но очень долго всё это происходит. Как можно ускорить процесс?


 
File-Open   (2005-12-07 13:35) [1]

есть картинка размером 320х240

В каком формате?

P.S. А вообще - зачем это?...


 
Rem ©   (2005-12-07 13:53) [2]

Не мудрено, что медленно...

 if PixelColor=clBlack then DecodedText:=DecodedText+"1"
                        else DecodedText:=DecodedText+"0";


Из старых запасников:

procedure TViewForm.ApplyContrast;
var
 Val: byte;
 SrcBMP: TBitmap;
 DestBMP: TBitmap;
 SrcLn: PRGBArray;
 DestLn: PByteArray;
 x: integer;
 y: integer;
begin
 SrcBMP := SrcImage.Picture.Bitmap;
 DestBMP := BWImage.Picture.Bitmap;
 for y := 0 to SrcBMP.Height - 1 do
 begin
   SrcLn := SrcBMP.ScanLine[y];
   DestLn := DestBMP.ScanLine[y];
   {$RANGECHECKS OFF}
   for x := 0 to SrcBMP.Width - 1 do
   begin
     Val := (SrcLn^[x].R + SrcLn^[x].G + SrcLn^[x].B) div 3;
     DestLn^[x] := byte(Val < m_iContrast);
   end;
   {$RANGECHECKS ON}
 end;
end;


 
k2 ©   (2005-12-07 14:26) [3]

а ещё статья здесь есть http://www.delphimaster.ru/articles/pixels/index.html


 
Electric   (2005-12-07 15:36) [4]

Большое спасибо, буду пробовать.



Страницы: 1 вся ветка

Текущий архив: 2006.01.08;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.018 c
2-1135114470
Gena
2005-12-21 00:34
2006.01.08
Прошу помочь очень хочется из Delphi7 запустить мастера печати


2-1134920031
Out84
2005-12-18 18:33
2006.01.08
Поправка работы с ini файлами


1-1133930103
Frozzen
2005-12-07 07:35
2006.01.08
Подскажите как программоно устанавливать шрифт в винду?


1-1133492829
Петр
2005-12-02 06:07
2006.01.08
Как подгрузить dll, написанную в Delphi в проект CBuilder?


2-1134477456
Zaletchik
2005-12-13 15:37
2006.01.08
Большие переменные