急,在线等待,很简单的问题(关于TbitBmp对象加载一张BMP图像) (100分)

  • 主题发起人 主题发起人 无疯无禄
  • 开始时间 开始时间

无疯无禄

Unregistered / Unconfirmed
GUEST, unregistred user!
Function BmpToJpg(BmpFile, JpgFile: String):boolean;
Var
BMP:TBitMap;
JPG:TJpegImage;
begin
Bmp:=TBitMap.Create;
Jpg:=TJpegImage.Create;
Try
if FileExists(BmpFile) then
begin
BMP.LoadFromFile(BmpFile);//运行到这里的时候出现下面的出错提示

//bmp.pixelformat := pf8bit;

JPG.Assign(BMP);
JPG.CompressionQuality:=80; //压缩率为
JPG.JPegNeeded;
JPG.Compress;
JPG.SaveToFile(JpgFile);
end;
Finally
BMP.Destroy;
JPG.Destroy;
end;
end;

错在哪里??本来在自己这台机子上不会错的,可是到了别的机子就错???
怎么解决??
Access violation at address 77F643D1 in module 'GDI32.DLL'.Read of address 01340B58
 
BMP.Destroy;
JPG.Destroy;
是这里出问题吧。如果是 Win2K 以下就会有问题。改成:
BMP.Free;
JPG.Free;
试试。
 
是啊,free才是正确的用法。
不过,我觉得你的错误有点怪,复制一个gdi32.dll过去,试一下。
如果不让复盖,就比较一下两个文件的版本是不是一样。
 
sssbmp是什么?
我改为bmp就没问题了
 
To 一楼
我是2000的,已经改为Free了
to 二楼
已经试过了,将好的那台机子的文件已经拷过了,文件大小没有任何区别。还是不行
 
to wfzha
是个笔误,因为我刚开始以为会和变量名有关系,所以改了一下,拷过来的时候为了显示的清楚点,又改回来,这个地方错了,现在改回来了
 
以前都是好的,没问题的,在自己的机子上也是好的,不会错
 
我启动到98下试了一下,也没问题,我用的是d7
好像不是你代码的问题。
 
具体情况我再说明一下

我用到了,柯达扫描控件,我是扫描一个图像,产生一个临时的temp.bmp文件,再用这个函数将bmp转成jpg文件,我试了一下,只要是扫出来的文件好像都会出错,而其它办法产生的bmp文件调用这个函数不会出错
然后我看了一下两种Bmp文件头觉得有点不一样(我对图像文件格式不是很懂的)
 
我也不懂,我觉得让vcl自己判断可能行吧?
试试下面的行不行
self.Image1.Picture.LoadFromFile('c:/2.bmp');
self.Image1.Picture.SaveToFile('c:/a.jpg');
 
我转换格式是为了保存到数据库里,因为BMP文件太大了
 
你先把bmp读到image1中去,然后再assign(image1.picture)试试
我觉得tpicture比bmp认识的格式多
 
文件格式问题?晕!在Windows附件的画图工具中能够显示吗?
要不然发一个小点的文件给我,我给你看看: justiceupholder@163.com

wfzha:即使用TPicture来处理也不需要TImage控件的。
 
有道理,不过,有image的时候调试方便,问题解决后可以改过来嘛!
 
to Carlsberg,你叫我发什么文件给你?

to wfzha
BMP.LoadFromFile(BmpFile);//运行到这里的时候出现下面的出错提示
是这句出错,会不会和我用的imgscan控件有关系,那为什么两台机子都是2000的这台可以那台越不行呢?
 
有可能啦,你的imgscan控件是不是OCX或ACTIVEX,如果是,就是这个问题了
 
俺的意思是发一个小点的bmp文件给俺看看,帮你确认是不是文件格式问题。
 
to Carlsberg已经发出
To bundur
我用的就是柯达的imgscan.ocx控件,系统自带的
现在是只有我这台机子,我已经在另外三四台机子上试过了
我还将一台imgscan控件版本更新掉(当时为了解决XP下没有这组控件下的一个14天的试用版),结果更狠一用到的话就提示,“不支持该类型”,晕死了
 
在我这里已经重现了你的错误,别急,我相信我能够给你搞定。
 
终于搞明白了。记得你欠我啤酒了,可不许懒帐。

与文件格式无关,只与文件大小有关(幸亏你发了个1.2M的文件)。也许Graphics的TBitmap如果是动态生成的实例只能处理小一点的文件,太大的处理不了。你试试TOpenPictureDialog也一样出错。我用TImageEnIO立刻搞定。
你现在可以下方案可以选择(按性能优劣排序):
1.用ImageLib6;
2.用Envision2
3.用ImageEn2;
......
 
后退
顶部