procedure TForm1.SpeedButton3Click(Sender: TObject);
var
pixblack:cardinal;//黑色象素个数
pixwhite:cardinal;//白色象素个数
x,y:integer;//y是行数,x是列数
bitmap1:TBitmap;
pixcolo:PByteArray;
BytePP:Integer; //修改
begin
bitmap1:=TBitmap.create;
try
bitmap1.loadfromfile(filename1);
case bitmap.pixelformat of //修改
pf8bit: bytepp:=1; //不是pf8bit可能是pf8Bits,不对的话请查一下pixelformat的帮助
pf16bit: bytepp:=2;
pf24bit: bytepp:=3;
pf32bit: bytepp:=4;
else exit; //如果是其他格式,则有特殊情况
end;
pixblack:=0;
pixwhite:=0;
for y:=0 to bitmap1.height-1 do
begin //开始扫描
pixcolo:=bitmap1.ScanLine[y];
for x:=0 to (bitmap1.width div BytePP)-1 do //修改
if pixcolo[x*BytePP]=0 then pixblack:=pixblack+1 //修改
else pixwhite:=pixwhite+1;
end; //扫描结束
showmessage(inttostr(pixblack));
showmessage(inttostr(pixwhite));
finally bitmap2.free;
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;
如我 用一个
var
row:pByteArray;
i,j:integer;
.......
for i:=0 to bitmap.height-1 do
begin
row:=bitmap.scanline[i];
end;
for j:= 0 to bitmap.width-1 do
begin
row[j]:=max(row[j]-5,0);
end;
........
这样写有没有什么问题
function Jpg2Bmp(Jpg: TJpegImage): TBitmap;
begin
//功能说明: 图片文件转化由Jpg格式转化为Bmp格式
//参数说明: Jpg: Jpg格式的图片内容
//返 回 值: 成功返回一个TBitmap对象
Result := nil;
if JPg = nil then Exit;
try
if Assigned(Jpg) then
begin
Result := TBitmap.Create;
Jpg.DIBNeeded;
Result.Assign(Jpg);
end; //end of if..then
except
on E: Exception do
MessageBox(FMainHandle, PChar( Err_JpgToBmp
+ Msg_ErrorDetail
+ E.Message), Msg_ErrCaption, MB_OK + MB_ICONSTOP);
end; //end of try..except
end;