Главная страница
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.012 c
2-1135153839
nirvana
2005-12-21 11:30
2006.01.08
Защита базы данных


11-1116454469
Vans
2005-05-19 02:14
2006.01.08
Дада про taskbar


1-1133955846
Aleksandr.
2005-12-07 14:44
2006.01.08
Как определить видимость дочернего окна?


1-1133386958
ДНО
2005-12-01 00:42
2006.01.08
задача на оптимальное размещение


4-1131124103
Arazel
2005-11-04 20:08
2006.01.08
Как узнать состояние принтеров