Delphi开发的windows应用,使用DevExpress控件库在保存图片时,报了这个错误,定位到这句话:
image.Picture.SaveToFile(filePath);
一直以为是保存函数出现问题,最后发现是TImage控件在加载img图片时需要通过bitmap来进行存储会更稳定,如果使用Picture将会造成此类报错。
稳定控件装载图片写法:
Bitmap.Assign把原本图片类型转为bitmap
img: TJPEGImage;
img := TJPEGImage.Create;
img.LoadFromFile(facePhotoUrl);
imgGuestPhoto.Picture.Bitmap.Assign(img);
如此生成的图片较大,可以进行重新绘制调整尺寸,降低分辨率来压缩。
bitmap.Width := 270;
bitmap.Height := 480;
bitmap.Canvas.StretchDraw(rect(0, 0, bitmap.Width, bitmap.Height), img );
不稳定的写法:
self.imgGuestPhoto.Picture.LoadFromFile(facePhotoUrl);
使用Bitmap在存储上会更加快速。
最近发现了一种更完美的写法,就是用TWCImage
(属于VCL.Graphics)
替代Bitmap,可以不需要裁剪并且图片占用内存与使用TJPEGImage一样。接下来直接上代码:
WicImg: TWICImage;//定义
WicImg := TWICImage.Create;//初始化
WicImg.LoadFromFile(facePhotoUrl);//直接加载jpg图片的地址
Self.imgGuestPhoto.Picture.Assign(WicImg);//保存图片