【发布时间】:2021-09-22 08:12:07
【问题描述】:
我使用的是 Delphi 10.4.2,并且我有一个可以缩放图像(BMP、GIF、PNG、...)的应用程序。
我的问题是,如果输入图像是透明 BMP,则输出 BMP 不透明,而是黑色背景。当输入是透明 PNG 并且我想输出 BMP 时,也会发生这种情况。我怎样才能避免这种情况?
示例代码:
procedure TFrmTestGenImg.Resize;
var
LInputImgPath, LOutputImgPath: string;
LImageIn, LImageOut: TWICImage;
LBitmap: TBitmap;
begin
LInputImgPath := 'C:\temp\Input.bmp';
LOutputImgPath := 'C:\temp\Output.bmp';
LImageIn := TWICImage.Create;
try
LImageOut := TWICImage.Create;
try
LImageIn.Transparent := True;
LImageIn.LoadFromFile(Trim(LInputImgPath));
LBitmap := TBitmap.Create;
try
LBitmap.PixelFormat := pf32bit;
LBitmap.Assign(LImageIn);
LBitmap.Transparent := True;
{ ... Resizing bitmap ... }
LImageOut.Assign(LBitmap);
LImageOut.ImageFormat := wifBmp;
LImageOut.Transparent := LImageIn.Transparent;
LImageOut.SaveToFile(LOutputImgPath);
finally
LBitmap.Free;
end;
finally
LImageOut.Free;
end;
finally
LImageIn.Free;
end;
end;
【问题讨论】:
-
LImageOut 是否保留
pf32bit格式? -
为什么要使用
TBitmap?为什么不只坚持TWICImage?见Resize TWICImage without losing transparency -
@MBo
PixelFormat在TWICImage上不存在,我可以检查一下类似的吗? -
@AmigoJack 我尝试了链接的代码,这次我没有使用任何
TBitmapvar,但我仍然有黑色背景。使用链接的代码,如果我跳过调整大小,透明度会保留,所以我猜它与调整大小方法有关
标签: image delphi delphi-10.4-sydney wic delphi-10.4.2