Текущий архив: 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.45 MB
Время: 0.007 c