【问题标题】:How to use DrawTransparentBitmap() in C++ Builder如何在 C++ Builder 中使用 DrawTransparentBitmap()
【发布时间】:2018-12-16 06:10:22
【问题描述】:

只是想弄清楚如何在 C++ Builder 中使用 DrawTransparent 来绘制带有 alpha 通道的位图或 tbitmap,以便绘制的图像与背景图像是半透明的。

我在这个网站上到处找遍了所有地方,但除了一个说明这个和 DrawTransparentBitmap 存在的注释之外找不到任何东西..

在帮助中列出如下:

virtual void __fastcall DrawTransparent(TCanvas* ACanvas, const 
System::Types::TRect &Rect, System::Byte Opacity);

但是没有代码示例。编译器无法识别过程名称,也不会作为 tbitmap 的方法出现...

我还是 C++ 新手,我真的可以在这方面寻求帮助...

【问题讨论】:

  • 如果编译器连函数都认不出来,那么使用它很可能会出现严重问题。我的直接建议是考虑改用AlphaBlend
  • DrawTransparent 是一种受保护的方法,因此您不能直接调用它,但也许这可以工作 destination_bitmap->Canvas->Draw(0, 0, source_bitmap->Picture->Graphic, 50); 您可能也需要这样做 source_bitmap->Transparent = true;。自己没有测试过。
  • 我确定我做错了什么.. C++ 的细微差别我仍然不明白.. 可能有某种方式来声明它或其他什么......它应该成为现有图形系统的一部分,或者看起来如此 - 就像 StretchDraw() 所以我认为它会更容易集成......但我会研究 AlphaBlend,谢谢。
  • 什么是受保护的方法?感谢所有信息帮助...
  • 这里很好地描述了受保护的成员(方法或变量)是什么:access specifiers @ cppreference

标签: c++ tbitmap


【解决方案1】:

DrawTransparent 是受保护的方法,因此您不能直接调用它,但这应该可以:

// opacity 50 
destination_bitmap->Canvas->Draw(0, 0, source_bitmap->Picture->Graphic, 50);

你可能也需要source_bitmap->Transparent = true;

【讨论】:

  • 这确实绘制了一个混合......:) 只需要让新位图使用透明颜色,到目前为止不想......即使使用透明 = True 并指定颜色...
猜你喜欢
  • 2019-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多