判断图片中每个点,如果当前点的左边80个点的颜色都一样,则把当前点色改为白色 ( 积分: 50 )

  • 主题发起人 主题发起人 ashow07
  • 开始时间 开始时间
A

ashow07

Unregistered / Unconfirmed
GUEST, unregistred user!
判断图片中每个点,如果当前点的左边80个点的颜色都一样(不包含当前点),则把当前点色改为白色
,老是有问题,我用pixels可以实现,就是速度太慢了,下面用ScanLine的不行,
代码如下:


Bitmap.PixelFormat := pf24bit;
Bitmap.HandleType:=bmDIB;
For j :=0 to h-1 do begin
PixPtr:=Bitmap.ScanLine[j];
for i:= 0 to w-1 do begin
m:=i*3;
if i>80 then
begin
ift:=true;
color2:=RGBToColor(PixPtr[m-240+2],PixPtr[m-240+1],PixPtr[m-240]); //当前像素往左第80个像素值
for n:=1 to 80 do begin //循环判断当前点之前的80个点内容是不是一样
if RGBToColor(PixPtr[m-n*3+2],PixPtr[m-n*3+1],PixPtr[m-n*3])<>color2 then ift:=false;
end;
if ift then //如果都一样则把当前点的颜色改为白色
begin
PixPtr[M]:=255;
PixPtr[M+2]:=255;
PixPtr[M+1]:=255;
end;
end;


end;

end;
 
建议你用“流”(TStream)来解决这个问题,因为全部数据操作都只直接面向内存中的简单数据的,这样比起逐个读取pixels可以大大提高速度。(这是经过实践证明的)
简单来说就是新建一个Stream,将Bitmap中的数据存入该Stream。然后对其中的数据进行处理(可能还要些Bitmap方面的基础知识)。
 
后退
顶部