现在要搞一个转换的功能,就是把 BMP,JPG,GIF,PNG,TIF 这些格式图片,压缩转换成JPG的图片,网上有一些例子,不过这些转换都会有很大的色差...
采用TJpegImage 这个类进行转换时,都会有一定的色差, 而且色差比较大,不支持GIF 的格式....
如果用 TGpBitmap 这个类来进行转换的话,无法更改图片的像素,而且色差比上面的更大,有没有别的方法可以实现少损压缩转换的?
采用TJpegImage 这个类进行转换时,都会有一定的色差, 而且色差比较大,不支持GIF 的格式....
如果用 TGpBitmap 这个类来进行转换的话,无法更改图片的像素,而且色差比上面的更大,有没有别的方法可以实现少损压缩转换的?
谢谢你,我正是用了你的那个函数进行转换,才会出现上面的情况...
procedure TForm1.ImageConverToJpg(FileName : string); //色差大,品质较差 ,支持所有格式 无法更改像素
var
Bmp: TGpBitmap;
Clsid: TGUID;
Parameters: TEncoderParameters;
Quality: Integer;
ExtName : string;
Image :TImage;
begin
//处理保存的名称
Image := TImage.Create(self);
ExtName := copy(FileName,1,length(FileName) - 3);
ExtName := ExtName + '.jpg';
with Image.Picture.Bitmap do
bmp := TGpBitmap.Create(FileName);
if GetEncoderClsid('image/jpeg', Clsid) then
begin
Parameters.Count := 1;
Parameters.Parameter[0].Guid := EncoderQuality;
Parameters.Parameter[0].ValueType := EncoderParameterValueTypeLong;
Parameters.Parameter[0].NumberOfValues := 1;
Quality := 90; // 图片质量90
Parameters.Parameter[0].Value := @Quality;
bmp.Save(ExtName, Clsid, @Parameters);
end;
bmp.Free;
end;
如果做商业应用,用第三方吧
转换是非常简单的问题,将要转换的图片Draw到Bitmap对象中,然后再转换成jpg就可以,注意的是bitmap最好是24位或者32位的
我试过了用你说的那个方法修改像素,可改后的图片像素没变...将Quality设为100似乎效果也差不多...