gpt4 book ai didi

delphi - 如何使用 GDI+ 通过 Alpha channel 调整 PNG 图像的大小?

转载 作者:行者123 更新时间:2023-12-03 15:07:27 25 4
gpt4 key购买 nike

在寻找调整 TPngObject 大小并保持透明度 + Alpha channel 的方法无效后,我尝试使用 GDI+

这是我的代码,它似乎工作正常。它会缩小/放大 PNG。到目前为止已在 XP 上进行了测试:

uses GDIPAPI, GDIPOBJ, GDIPUTIL; 

procedure TForm1.Button1Click(Sender: TObject);
var
encoderClsid: TGUID;
stat: TStatus;
img, img_out: TGPImage;
begin
img := TGPImage.Create('in.png'); // 200 x 200
img_out := img.GetThumbnailImage(100, 100, nil, nil);
GetEncoderClsid('image/png', encoderClsid);
img_out.Save('out.png', encoderClsid);
img_out.free;
img.Free;
end;

我的问题:使用 GetThumbnailImage 是执行此操作的正确方法吗?我没有找到任何其他方法。

最佳答案

我认为 GetThumbnailImage 方法不是一个好方法,因为我怀疑您是否会获得高质量的重新采样图像。在 this article您可以找到如何重新缩放图像。他们正在使用 DrawImage方法,所以我也会做同样的事情。在此之前,我还会设置高质量图形模式以获得高质量输出。这是一个例子:

procedure TForm1.Button1Click(Sender: TObject);
var
Input: TGPImage;
Output: TGPBitmap;
Encoder: TGUID;
Graphics: TGPGraphics;
begin
Input := TGPImage.Create('C:\InputImage.png');
try
// create the output bitmap in desired size
Output := TGPBitmap.Create(100, 100, PixelFormat32bppARGB);
try
// create graphics object for output image
Graphics := TGPGraphics.Create(Output);
try
// set the composition mode to copy
Graphics.SetCompositingMode(CompositingModeSourceCopy);
// set high quality rendering modes
Graphics.SetInterpolationMode(InterpolationModeHighQualityBicubic);
Graphics.SetPixelOffsetMode(PixelOffsetModeHighQuality);
Graphics.SetSmoothingMode(SmoothingModeHighQuality);
// draw the input image on the output in modified size
Graphics.DrawImage(Input, 0, 0, Output.GetWidth, Output.GetHeight);
finally
Graphics.Free;
end;
// get encoder and encode the output image
if GetEncoderClsid('image/png', Encoder) <> -1 then
Output.Save('C:\OutputImage.png', Encoder)
else
raise Exception.Create('Failed to get encoder.');
finally
Output.Free;
end;
finally
Input.Free;
end;
end;

关于delphi - 如何使用 GDI+ 通过 Alpha channel 调整 PNG 图像的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31271622/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com