Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
QT变化QImageα_Qt_Qt4_Qimage - Fatal编程技术网

QT变化QImageα

QT变化QImageα,qt,qt4,qimage,Qt,Qt4,Qimage,我需要改变我拥有的一个气法师的阿尔法,这样它就能与后面和前面的其他气法师混合。这需要快速开关 以前,我不得不重新创建每一张图像,并给它们一个新的颜色,只是一个不同的阿尔法值。但现在我想保留同样的原始图像,而不是重新绘制和绘制它 我现在试着这样做: QImage image; unsigned int rgb; for(int y=0;y<image.height();y++){ for(int x=0;x<image.width();x++){ rgb=image.pi

我需要改变我拥有的一个气法师的阿尔法,这样它就能与后面和前面的其他气法师混合。这需要快速开关

以前,我不得不重新创建每一张图像,并给它们一个新的颜色,只是一个不同的阿尔法值。但现在我想保留同样的原始图像,而不是重新绘制和绘制它

我现在试着这样做:

QImage image;
unsigned int rgb;

for(int y=0;y<image.height();y++){
  for(int x=0;x<image.width();x++){
    rgb=image.pixel(x,y);
    image.setPixel(x,y,qRgba(qRed(rgb),qGreen(rgb),qRed(rgb),120));
  }
}
QImage图像;
无符号整数rgb;

对于(int y=0;y如果您在
QGraphicsView
或其他
QWidget
中使用
QImage
,您应该查看此
QGraphicsEffect

如果您使用的是QLabel,我将尝试以下方法:

#include <QLabel>
#include <QPainter>

class TransparentQLabel : public QLabel
{
     Q_OBJECT
public:
     explicit TransparentQLabel() : QLabel() {}
     ~TransparentQLabel(){}
     void setOpacity(const qreal & val)
     {
          if (this->pixmap() == null || this->pixmap().isNull())
              return;
          QPixmap result(this->pixmap()->size());
          result.fill(Qt::transparent);

          QPainter painter;
          painter.begin(&result);
          painter.setOpacity(val);
          painter.drawPixmap(0, 0, *(this->pixmap()));
          painter.end();

          QLabel::setPixmap(result);
     }
};
下面是一个例子,说明这些东西在起作用:


希望对您有所帮助。

如果您在
QGraphicsView
或其他
QWidget
中使用
QImage
,您应该查看此
QGraphicsEffect

如果您使用的是QLabel,我将尝试以下方法:

#include <QLabel>
#include <QPainter>

class TransparentQLabel : public QLabel
{
     Q_OBJECT
public:
     explicit TransparentQLabel() : QLabel() {}
     ~TransparentQLabel(){}
     void setOpacity(const qreal & val)
     {
          if (this->pixmap() == null || this->pixmap().isNull())
              return;
          QPixmap result(this->pixmap()->size());
          result.fill(Qt::transparent);

          QPainter painter;
          painter.begin(&result);
          painter.setOpacity(val);
          painter.drawPixmap(0, 0, *(this->pixmap()));
          painter.end();

          QLabel::setPixmap(result);
     }
};
下面是一个例子,说明这些东西在起作用:


希望有帮助。

你有一个打字:第二个到最后一个qrgBa()参数应该是Q蓝色,而不是QReIn。你在哪个上下文中绘制图像?如果你使用Q画家,考虑使用Q画家::StuopObon当绘画时。你有一个打字:第二个到最后一个QRGBa()。参数应该是Q蓝色,而不是QRILIN,你是如何画图像的?如果你使用Q画家,考虑使用Q画家::StuopObon当绘画时,我使用QGrimeCiStIm,这样第三个链接就是我正在寻找的。我太专注于改变我用的图像来描绘,我忘记了T的功能。他是QGraphicsItem。谢谢Vash。我正在使用QGraphicsItem,所以第三个链接正是我想要的。我太专注于改变我用来绘制的图像,以至于我忘记了QGraphicsItem的功能。谢谢Vash。