如何在TImage上正确显示带有Alpha通道的TBitmap?

安德鲁

我有一个TBitmap,其中包含带有alpha通道的半透明图像(在本示例中,我是从TPngImage获得的)。

var
  SourceBitmap: TBitmap;
  PngImage: TPngImage;
begin
  PngImage := TPngImage.Create();
  SourceBitmap := TBitmap.Create();
  try
    PngImage.LoadFromFile('ImgSmallTransparent.png');
    SourceBitmap.Assign(PngImage);
    SourceBitmap.SaveToFile('TestIn.bmp');
    imgSource.Picture.Assign(SourceBitmap);
  finally
    PngImage.Free();
    SourceBitmap.Free();
  end;

当我将此TBitmap保存到TestIn.bmp文件并使用任何图像查看器打开它时,我可以看到透明度。但是,当我将其分配给TImage时,透明像素显示为黑色(TImage具有Transparent = True)。

如何在TImage上正确显示具有透明度的TBitmap?

布米

如果对imgSource使用Transparent = false,则显示的代码在我的系统上可以正常工作。
如果从文件加载位图,则可以用黑色像素重现行为。

不同的设置影响显示 在此处输入图片说明 在此处输入图片说明 在此处输入图片说明 在此处输入图片说明

procedure TForm3.SetAlphaFormatClick(Sender: TObject);
begin
  if SetAlphaFormat.Checked then
    ToggleImage.Picture.Bitmap.alphaformat := afDefined
  else
    ToggleImage.Picture.Bitmap.alphaformat := afIgnored;
end;

procedure TForm3.SetImageTransparentClick(Sender: TObject);
begin
  ToggleImage.Transparent := SetImageTransparent.Checked;
  Image1.Transparent := SetImageTransparent.Checked;
end;

procedure TForm3.LoadPngTransform2BitmapClick(Sender: TObject);
Const
  C_ThePNG = 'C:\temp\test1.png';
  C_TheBitMap = 'C:\temp\TestIn.bmp';
var
  SourceBitmap, TestBitmap: TBitmap;
  pngImage: TPngImage;
begin

  Image1.Transparent := SetImageTransparent.Checked;
  pngImage := TPngImage.Create;
  SourceBitmap := TBitmap.Create;
  TestBitmap := TBitmap.Create;
  try
    pngImage.LoadFromFile(C_ThePNG);
    SourceBitmap.Assign(pngImage);

    {v1 with this version without the marked* part, I get the behavoir you described
      SourceBitmap.SaveToFile(C_TheBitMap);
      TestBitmap.LoadFromFile(C_TheBitMap);
      TestBitmap.PixelFormat := pf32Bit;
      TestBitmap.HandleType := bmDIB;
      TestBitmap.alphaformat := afDefined;  //*
      Image1.Picture.Assign(TestBitmap);
    }
    //> v2
    SourceBitmap.SaveToFile(C_TheBitMap);
    SourceBitmap.PixelFormat := pf32Bit;
    SourceBitmap.HandleType :=  bmDIB;
    SourceBitmap.alphaformat := afDefined;
    Image1.Picture.Assign(SourceBitmap);
    //< v2
  finally
    pngImage.Free;
    SourceBitmap.Free;
    TestBitmap.Free;
  end;
end;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在OSX上显示带有Alpha通道的图像

来自分类Dev

在OSX上显示带有Alpha通道的图像

来自分类Dev

如何在带有alpha值的CALayer()上添加颜色?

来自分类Dev

如何在PyQt5 QColorDialog中显示Alpha通道

来自分类Dev

如何在TImage上显示Div背景图像

来自分类Dev

如何在TImage上显示Div背景图像

来自分类Dev

如何在Delphi中使Alpha透明TImage?

来自分类Dev

在Win32中显示带有Alpha通道的32位图像

来自分类Dev

如何在RichTextBoxt上显示带有公式的RTF文档?

来自分类Dev

如何将带有Alpha通道的图像绘制到TSpeedButton?

来自分类Dev

如何在JFrame上正确显示PNG

来自分类Dev

如何在JFrame上正确显示PNG

来自分类Dev

Timage / Tbitmap上的delphi网络摄像头照片

来自分类Dev

如何在QOpenGLTexture中创建带有alpha的纹理?

来自分类Dev

将带有Alpha通道的示例视频覆盖在gstreamer中的另一个视频上

来自分类Dev

TImage没有显示

来自分类Dev

如何在TBitmap上透明地绘制TBitmap32?

来自分类Dev

iTunes Store 操作失败错误 ITMS-90396:“无效图标。带有 Alpha 通道。图标不应具有 Alpha 通道。”

来自分类Dev

如何在Android的菜单栏上显示带有徽章的clickble购物车

来自分类Dev

如何在带有超链接的UILabel上显示HTML文本(作为字符串)?

来自分类Dev

如何在带有追加的屏幕上显示数据的验证错误消息?

来自分类Dev

如何在Surface Pro 3(带有扩展坞)上设置外接显示器?

来自分类Dev

如何在带有Highcharts的柱形图中仅在xAxis上显示特定年份

来自分类Dev

如何在带有灰色背景色的 div 上显示部分产品图片?

来自分类Dev

Google App Script / Gmail 插件:如何在 Gmail 上显示带有文本和按钮的窗口?

来自分类Dev

如何使用SourceOver在drawPixmap上应用Alpha通道

来自分类Dev

如何使用SourceOver在drawPixmap上应用Alpha通道

来自分类Dev

如何在SCSS颜色功能中控制HSLA alpha通道?

来自分类Dev

如何正确显示带有变量的String资源

Related 相关文章

  1. 1

    在OSX上显示带有Alpha通道的图像

  2. 2

    在OSX上显示带有Alpha通道的图像

  3. 3

    如何在带有alpha值的CALayer()上添加颜色?

  4. 4

    如何在PyQt5 QColorDialog中显示Alpha通道

  5. 5

    如何在TImage上显示Div背景图像

  6. 6

    如何在TImage上显示Div背景图像

  7. 7

    如何在Delphi中使Alpha透明TImage?

  8. 8

    在Win32中显示带有Alpha通道的32位图像

  9. 9

    如何在RichTextBoxt上显示带有公式的RTF文档?

  10. 10

    如何将带有Alpha通道的图像绘制到TSpeedButton?

  11. 11

    如何在JFrame上正确显示PNG

  12. 12

    如何在JFrame上正确显示PNG

  13. 13

    Timage / Tbitmap上的delphi网络摄像头照片

  14. 14

    如何在QOpenGLTexture中创建带有alpha的纹理?

  15. 15

    将带有Alpha通道的示例视频覆盖在gstreamer中的另一个视频上

  16. 16

    TImage没有显示

  17. 17

    如何在TBitmap上透明地绘制TBitmap32?

  18. 18

    iTunes Store 操作失败错误 ITMS-90396:“无效图标。带有 Alpha 通道。图标不应具有 Alpha 通道。”

  19. 19

    如何在Android的菜单栏上显示带有徽章的clickble购物车

  20. 20

    如何在带有超链接的UILabel上显示HTML文本(作为字符串)?

  21. 21

    如何在带有追加的屏幕上显示数据的验证错误消息?

  22. 22

    如何在Surface Pro 3(带有扩展坞)上设置外接显示器?

  23. 23

    如何在带有Highcharts的柱形图中仅在xAxis上显示特定年份

  24. 24

    如何在带有灰色背景色的 div 上显示部分产品图片?

  25. 25

    Google App Script / Gmail 插件:如何在 Gmail 上显示带有文本和按钮的窗口?

  26. 26

    如何使用SourceOver在drawPixmap上应用Alpha通道

  27. 27

    如何使用SourceOver在drawPixmap上应用Alpha通道

  28. 28

    如何在SCSS颜色功能中控制HSLA alpha通道?

  29. 29

    如何正确显示带有变量的String资源

热门标签

归档