使用代码
procedure TForm2.Button1Click(Sender: TObject);
var
oMeta: TMetaFile;
oBmp: TBitmap;
begin
Image1.Transparent := True;
Image1.Picture.LoadFromFile('D:\data\WMF.wmf');
oBmp := TBitmap.Create;
try
oMeta := TMetaFile(Image1.Picture.Graphic);
oBmp.SetSize(oMeta.Width, oMeta.Height);
oBmp.Canvas.Draw(0, 0, oMeta);
oBmp.SaveToFile('D:\data\WMF.bmp');
finally
oBmp.Free;
end;
end;我显示wmf图像和创建bmp文件。创建的bmp图像,我用代码显示
procedure TForm2.Button2Click(Sender: TObject);
begin
Image1.Transparent := True;
Image1.Picture.LoadFromFile('D:\data\WMF.bmp');
end;但显示的图像没有透明度。什么?如何显示透明的bmp图像?
蒂娅向布兰科致以最良好的问候
发布于 2010-09-27 01:33:50
首先,你应该知道透明的BMP是非常罕见的。因此,许多(大多数)位图查看器、编码器和解码器不支持透明位图。然而,还是有一些希望的。首先,许多位图是32位的,即使像素通常以$00BBGGRR格式存储。因此,每个“像素”的第一个字节都是未使用的,当然可以将其用作不透明度值:$AABBGGRR。但这不仅仅是我个人的想法。大多数位图使用version 3 bitmap header,但version 4 (和版本5)实际上支持透明度数据。您只需指定红色、绿色、蓝色和阿尔法掩码(例如,分别为$000000FF、$0000FF00、$00FF0000和$FF000000 ),然后就可以存储每个像素的红色、绿色、蓝色和阿尔法强度。
但是,正如我所说的,大多数位图查看器、编码器和解码器都不支持透明位图。我认为VCL的编码器、解码器和查看器(TImage)不需要。
我会考虑使用PNG而不是BMP。PNG位图图像格式以许多不同的方式支持透明度。
发布于 2010-09-27 01:36:05
位图不支持透明度,除非它是32位的。但我不确定是否可以在没有第三方组件的Delphi中做到这一点。您可以尝试使用png而不是位图。Delphi为此提供了TPNGImage。
https://stackoverflow.com/questions/3798938
复制相似问题