image - TWICImage:如何保存透明的 BMP?
问题描述
我正在使用 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;
解决方案
VCL 中不支持 alpha 通道透明度,这似乎是您想要的。我从来没有使用过 TWCImage 并且谷歌搜索它没有透露任何内容,所以我不确定如何建议你如何使用它。
一种能够做你想做的事情的简单方法是使用在 SourceForge 上免费下载的 Image32 库——它可以读取包括具有透明度的 PNG 在内的文件。您可以使用透明度渲染图像,并且可以将其与 VCL 和 FMX 一起使用。
https://sourceforge.net/projects/image32/
(我建议这不是为了推广 Image32(尽管我认为它很棒),而是为了回答关于如何处理透明度的 OP 问题。
推荐阅读
- selenium - (IDE)单击选项说确定但什么也不做
- python - 在 sklearn 中使用 make_regression 函数的问题
- python - Pandas 将 json 转换为单个单元格 csv 而不是完整的电子表格
- c# - 加速 C# 原生调用 pinvoke
- r - 将数据帧转换为r中的二进制特征
- react-native - 将 noHoist 添加到项目后,React Native 无法解析本地模块
- html - 所有网格功能在 cPanel HTML 编辑器中显示为未知属性
- ios - 如何使用 IBOutlet 更新 UIView 的恒定高度约束
- google-sheets - 使用上限分配值
- c++ - 如何检查集合的元素在 C++ 中是否等于零?