【问题标题】:Making pixels semi-transparent使像素半透明
【发布时间】:2023-03-14 02:43:01
【问题描述】:

我正在尝试使一些像素半透明。

使用带有笔颜色 Qt::color0 和 Qt::color1 的 QPainter 可以使像素完全透明或不透明,但我尝试将笔颜色设置为 0.5 以制作部分透明的像素,但它不起作用我会期待的。

在本例中,不透明像素为红色,透明像素为白色(背景颜色,我希望半透明像素为粉红色,但它们也是白色的:

http://programmingexamples.net/index.php?title=Qt/Images/SemiTransparentPixels

谁能看到我哪里出错了?

【问题讨论】:

  • 在您的代码中,painter.setPen(.5); 行可能没有按照您的预期进行。你需要像 Stephen Chu 建议的那样做 painter.setPen( QColor( 255, 0, 0, 127 ) ); 之类的事情

标签: qt qt4


【解决方案1】:

在 QColor 中将 alpha 设置为 0.5 (127):http://doc.qt.io/qt-4.8/qcolor.html#QColor-2

【讨论】:

  • 嗯,即使有painter.setPen( QColor( 255, 0, 0, 127 ) );正如 Tim Meyer 建议的那样,右上角(alpha=127)是红色而不是粉红色。透明度是否仅适用于其他对象而不适用于背景?
  • 我也不明白setAlphaChannel和setMask的区别?
  • 您正在使用 QBitmap 作为painter backstore。位图只有黑白或完全不透明或透明。它不知道中间的任何东西。使用 QPixmap 或 QImage 作为painter backstore。
  • 我认为我们越来越近了......请参阅programmingexamples.net/index.php?title=Qt/Images/… - 我现在使用 QPixmap 作为后台存储。那里的代码现在会生成一个完全半透明的正方形,我希望在其中看到我定义的 4 个象限。我从 QPixmap 开始,然后尝试只更改它的 alpha 通道 - 我是否必须将前 3 个通道重新设置为原始像素图的现有值?我开始使用 QBitmap 的原因是我以为我只是设置一个通道来传递给 setAlphaChannel 而不是完整的图像?
  • setAlphaChennel 方法现已过时。您将不得不更改图像中每个像素数据的 alpha 值。为此,请使用 QImage 并修改底层原始像素数据。
猜你喜欢
  • 2019-05-14
  • 1970-01-01
  • 1970-01-01
  • 2015-05-29
  • 2015-12-07
  • 2011-07-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-13
相关资源
最近更新 更多