Delphi图像处理中ScanLine的使用
提示:这里可以添加技术概要
核心源码
一般我们在Delphi中进行图像处理时采用Pixels像素点赋值的方法,Delphi代码如下:
var
x,y:Integer;
cColor:TColor;
begin
for y:=0 to Image1.Height-1 do
for x:=0 to Image1.Width-1 do
cColor:=Image1.Canvas.Pixels[i,j];
end;
但是这种方法有个缺点,处理速度很慢,小图像还可以,对于大点的图像来说就太慢了。
Delphi提供了一种扫描线ScanLine方法是对图像的一行进行扫描,获取本行中各像素的内存地址。众所周知,内存操作肯定会比常规的像素点赋值速度快很多,所以将大大提高图像的处理速度。
Delphi代码如下:
var
P:array[0…100] of PByteArray;//像素数组
y:Integer;
begin
for y:=0 to Bmp.Height-1 do
begin
P[y]:=Bmp.ScanLine[y];//将图片所有像素值存入P
end;
end;
这样就将一个图像的所有像素都存入了P这个数组
在SysUtils单元中可以看出PByteArray实际上是一个Byte类型的数组
所以我们声明的P:array[0…100] of PByteArray;实际上可以看成是一个二维数组
P数组就是一个图像像素的缓冲区ÿ