一个头疼的GDI+问题(100分)

  • 主题发起人 主题发起人 merkey2002
  • 开始时间 开始时间
M

merkey2002

Unregistered / Unconfirmed
GUEST, unregistred user!
关于缩放图像的
我用TGPImage.GetThumbnailImage方法来缩放图片(我需要将缩放后的图像存为文件)
用这个方法得到的TGPImage对象,再存为文件,速度很快。
但是有个问题,有小部分的图片,用GetThumbnailImage得到的图像非常的模糊(有问题的大多是数码相机拍出来的照片),
我将有问题的图片用ACDSee另存一个jpg文件,这个文件又没问题了。
我猜可能是原文件中有一些垃圾数据?
不知道哪位大侠对这方面有研究? 或者有更好的方法来缩放图片?
 
Anylib!最适合应用软件开发的产品,超自由的格式,完善的设计期功能,一步到位的报表实现,让您的界面随心所欲!

http://www.anylib.com
 
1、GetThumbnailImage 确实存在这个问题...
2、解决方法还是有的,只需要稍微变通一下:
//SrcJpegFile: 源文件;DestJpegFile: 目标文件;Width: 缩略图宽度;Height: 缩略图高度
procedure GetThumbImage(SrcJpegFile, DestJpegFile: WideString; Width, Height: Integer);
var
bmp: TGPBitmap;
g: TGPGraphics;
img: TGPImage;
guidEncoder: TGUID;
paramEncoder: TEncoderParameters;
quality: ULONG;
begin
bmp := TGPBitmap.Create(Width, Height);
g := TGPGraphics.Create(bmp);
img := TGPImage.Create(SrcJpegFile);
g.DrawImage(img, 0, 0, Width, Height);
img.Free;
g.Free;
GetEncoderClsid('image/jpeg', guidEncoder);
paramEncoder.Count := 1;
paramEncoder.Parameter[0].Guid := EncoderQuality;
paramEncoder.Parameter[0].Type_ := EncoderParameterValueTypeLong;
paramEncoder.Parameter[0].NumberOfValues := 1;
quality := 100;
paramEncoder.Parameter[0].Value := @quality;
bmp.Save(DestJpegFile, guidEncoder, @paramEncoder);
bmp.Free;
end;
3、按照我的方法做,图像质量应该能显著提高。
4、能用就结帖,不能用说一声。
 
楼主不是开始玩失踪了吧?
 
to vvyang
速度比GetThumbnailImage慢一些,但效果还是不错的,谢谢~
 
后退
顶部