首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有透明度的位图

具有透明度的位图
EN

Stack Overflow用户
提问于 2010-09-27 01:21:38
回答 2查看 4.8K关注 0票数 1

使用代码

代码语言:javascript
复制
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图像,我用代码显示

代码语言:javascript
复制
procedure TForm2.Button2Click(Sender: TObject);
begin
  Image1.Transparent := True;
  Image1.Picture.LoadFromFile('D:\data\WMF.bmp');
end;

但显示的图像没有透明度。什么?如何显示透明的bmp图像?

蒂娅向布兰科致以最良好的问候

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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位图图像格式以许多不同的方式支持透明度。

票数 3
EN

Stack Overflow用户

发布于 2010-09-27 01:36:05

位图不支持透明度,除非它是32位的。但我不确定是否可以在没有第三方组件的Delphi中做到这一点。您可以尝试使用png而不是位图。Delphi为此提供了TPNGImage。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3798938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档