如何将不透明的文件保存为JPEG文件而不使Qt透明色变为黑色? 我知道JPEG不支持alpha,黑色可能只是alpha的默认“0”值,但黑色是一种可怕的默认颜色。Qt:QImage总是将透明色保存为黑色
看起来这应该是一个简单的操作,但所有我尝试过的mask和alpha函数在保存为JPEG时都会被忽略。
例如:
image->load("someFile.png"); // Has transparent background or alpha channel
image->save("somefile.jpg", "JPG"); // Transparent color is black
我试图保存为JPEG,保存之前的图像转换为ARGB32(8位alpha通道)之前填充有白色的图像,甚至试图可笑慢这样的东西:
QImage image2 = image1->convertToFormat(QImage::Format_ARGB32);
image2.setAlphaChannel(image1->alphaChannel());
image2.save(fileURI, "JPG", this->jpgQuality; // Still black!
See: http://67.207.149.83/qt_black_transparent.png for a visual.
这段代码让我走上了正轨。您使用QPainter在手动绘制白色背景上绘制传入图像的想法很奏效。你有我的感谢。 我希望有一个更快的方法来做到这一点,但现在我满足于它的作品。 – 2009-10-12 06:16:38
好吧,最快的方法可能是自己做。您可以使用bits()来获取原始数据,迭代它,检查像素的qAlpha()是否低于255,将颜色与白色混合。 – 2009-10-12 06:38:39
我不知道该代码当时使用的是什么版本(4.5,4.6?),但现在5年后(Qt 4.8和Qt 5.x),QImage的构造函数需要QSize [需要通过格式以及](http://qt-project.org/doc/qt-4.8/qimage.html#QImage-2)。还有一种新的填充方法[采用Qt :: Global颜色](http://qt-project.org/doc/qt-4.8/qimage.html#fill-2)。 – Uflex 2014-01-16 15:01:05