关于大位图pf1bt 格式 统计其中白的象素个数 不能使用pixels 属性,
因为其严重的影响了效率。
使用了scanline 属性小的位图可能通过,但是调用了大图会报错
代码如下
rocedure ThreadImageArea.DoVisualSwap;
var
Row: PByteArray;
i, X, Y : Integer;
begin
i:=0;
for Y := 0 to FBitmap.Height -1 do //行数
begin
Row := FBitmap.ScanLine[y];
for X:=0 to FBitmap.Width-1 do
begin
if Row[X]=clwhite then i:=i+1;
end;
end;
with FImgParam do
begin
FileName:=intToStr(i);
end;
end;
因为其严重的影响了效率。
使用了scanline 属性小的位图可能通过,但是调用了大图会报错
代码如下
rocedure ThreadImageArea.DoVisualSwap;
var
Row: PByteArray;
i, X, Y : Integer;
begin
i:=0;
for Y := 0 to FBitmap.Height -1 do //行数
begin
Row := FBitmap.ScanLine[y];
for X:=0 to FBitmap.Width-1 do
begin
if Row[X]=clwhite then i:=i+1;
end;
end;
with FImgParam do
begin
FileName:=intToStr(i);
end;
end;
procedure TForm1.SpeedButton3Click(Sender: TObject);
var
pixblack:cardinal;//黑色象素个数
pixwhite:cardinal;//白色象素个数
x,y,z:integer;//y是行数,x是列数 ////修改
bitmap1:TBitmap;
pixcolo:PByteArray;
begin
bitmap1:=TBitmap.create;
try
bitmap1.loadfromfile(filename1);
pixblack:=0;
pixwhite:=0;
for y:=0 to bitmap1.height-1 do
begin //开始扫描
pixcolo:=bitmap1.ScanLine[y];
for x:=0 to (bitmap1.width div 8)-1 do //修改
for z:=0 to 7 do
if (pixcolo[x] shr z) and 1 =0 then pixblack:=pixblack+1 //修改
else pixwhite:=pixwhite+1;
end; //扫描结束
showmessage(inttostr(pixblack));
showmessage(inttostr(pixwhite));
finally bitmap2.free;
end;end;
最后是怎么改的,我也有同样的问题,传上来,分享一下好吗?