scanline的问题

iamyourneed 2004-11-01 11:24:28
好象scanline是只能用于bmp格式的图象处理,那TJpegImage格式的要用什么来进行象素扫描。



令我知道可以用DIBNeeded方法来把Jpeg转成Bmp的,但是不知道怎么用, Delphi Help里面好象没有这方面的例子。
...全文
260 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
YaoKuiVcl 2005-01-10
  • 打赏
  • 举报
回复
这么快呀
iamyourneed 2004-11-01
  • 打赏
  • 举报
回复
谢谢楼上的,可是我想知道的是有没有类似的Jpeg扫描,要是没有的话,DIBNeeded是怎么用的
ksaiy 2004-11-01
  • 打赏
  • 举报
回复
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;

end;
iamyourneed 2004-11-01
  • 打赏
  • 举报
回复
如我 用一个
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;
........
这样写有没有什么问题
iamyourneed 2004-11-01
  • 打赏
  • 举报
回复
to: ksaiy(消失在人海) 你的程序是不是只统计整张图的各个灰度值的个数
xzhifei 2004-11-01
  • 打赏
  • 举报
回复
不管是PhotoShop还是其它的软件,编辑JPEG图片时,都是先将图片转换成其它的方式,保存时再转换回JPEG格式
ksaiy 2004-11-01
  • 打赏
  • 举报
回复
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;

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧