procedure TD3DWindow.SaveGpBitmapToFile(fname: PAnsiChar; Bmp: TGpBitmap); var clsid: TGUID; ext, format: string; Quality: Cardinal; Parameters: TEncoderParameters; begin ext := ExtractFileExt(fname); if CompareText(ext, '.bmp') = 0 then format := 'bmp' else if CompareText(ext, '.jpg') = 0 then format := 'jpeg' else if CompareText(ext, '.png') = 0 then format := 'png' else if CompareText(ext, '.tif') = 0 then format := 'tiff'; if gdiplus.GetEncoderClsid('Image/' + format, CLSID) then begin Parameters.Count := 1; Parameters.Parameter[0].NumberOfValues := 1; Quality := 100; Parameters.Parameter[0].Value := @Quality; Bmp.Save(fname, CLSID, @Parameters); end; end;
var clsid: TGUID;
ext, format: string;
Quality: Cardinal;
Parameters: TEncoderParameters;
begin
ext := ExtractFileExt(fname);
if CompareText(ext, '.bmp') = 0 then format := 'bmp'
else if CompareText(ext, '.jpg') = 0 then format := 'jpeg'
else if CompareText(ext, '.png') = 0 then format := 'png'
else if CompareText(ext, '.tif') = 0 then format := 'tiff';
if gdiplus.GetEncoderClsid('Image/' + format, CLSID) then
begin
Parameters.Count := 1;
Parameters.Parameter[0].NumberOfValues := 1;
Quality := 100;
Parameters.Parameter[0].Value := @Quality;
Bmp.Save(fname, CLSID, @Parameters);
end;
end;
aImage.Save('XXX.tif', Clsid, @Param1);
......
aImage.SaveAdd(@Param2);
Param1用的是EncoderSaveFlag,因为要保存多页;Param2是压缩
//Param2
Param2.Count := 1;
Param2.GUID := EncoderCompression;
Param2.Parameter[0].type_ := EncoderParameterValueTypeLong;
Param2.Parameter[0].NumberOfValues := 1;
Param2.Parameter[0].Value := @Value;
Value := EncoderValueCompressionCCITT4; 运行后没出错,但也没压缩,还是LZW
Parameters.Parameter[0].Guid := EncoderCompression;
Parameters.Parameter[0].NumberOfValues := 1;
Parameters.Parameter[0].Type_ := EncoderParameterValueTypeLong;
Value :=EncoderValueCompressionCCITT4;
Parameters.Parameter[0].Value := @Value;肯定能压缩