我正在使用 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;
uj5u.com熱心網友回復:
VCL 中不支持 alpha 通道透明度,這似乎是您想要的。我從未使用過 TWCImage 并且谷歌搜索它沒有透露任何資訊,所以我不確定如何建議您如何使用它。
能夠做您想做的事情的一種簡單方法是使用 Image32 庫,可以在 SourceForge 上免費下載 - 它可以讀取檔案,包括具有透明度的 PNG。您可以渲染具有透明度的影像,并且可以將其與 VCL 和 FMX 一起使用。
https://sourceforge.net/projects/image32/
(我建議這不是為了推廣 Image32(雖然我認為它很棒)而是為了回答關于如何處理透明度的 OP 問題。
uj5u.com熱心網友回復:
默認情況下,BMP 的 Windows 成像組件 (WIC) 編解碼器不會為不支持“V5”標頭的閱讀器向后兼容撰寫32 位 BMP。但是,您可以通過該EnableV5Header32bppBGRA屬性啟用它。
我不知道你如何在 Delphi 中做到這一點,但這里有一些 C 示例代碼:
// pWIC is a pointer to IWICImagingFactory
ComPtr<IWICBitmapEncoder> encoder;
HRESULT hr = pWIC->CreateEncoder(containerFormat, nullptr, encoder.GetAddressOf());
if (FAILED(hr))
return hr;
ComPtr<IWICBitmapFrameEncode> frame;
ComPtr<IPropertyBag2> props;
hr = encoder->CreateNewFrame(frame.GetAddressOf(), props.GetAddressOf());
if (FAILED(hr))
return hr;
// Opt-in to the WIC2 support for writing 32-bit Windows BMP files with an alpha channel
PROPBAG2 option = {};
option.pstrName = const_cast<wchar_t*>(L"EnableV5Header32bppBGRA");
VARIANT varValue;
varValue.vt = VT_BOOL;
varValue.boolVal = VARIANT_TRUE;
(void)props->Write(1, &option, &varValue);
hr = frame->Initialize(props);
if (FAILED(hr))
return hr;
...
請參閱Microsoft 檔案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/315628.html
