Qt: QImage всегда сохраняет прозрачный цвет как черный - PullRequest
6 голосов
/ 11 октября 2009

Как сохранить файл с прозрачностью в файл JPEG без Qt, сделав прозрачный цвет черным? Я знаю, что JPEG не поддерживает альфа, и черный цвет - это просто значение по умолчанию «0» для альфы, но черный - ужасный цвет по умолчанию.

Кажется, что это должна быть простая операция, но все маски и альфа-функции, которые я пробовал, игнорируются при сохранении в формате JPEG.

Например:

image->load("someFile.png"); // Has transparent background or alpha channel
image->save("somefile.jpg", "JPG"); // Transparent color is black

Я пытался заполнить изображение белым перед сохранением в формате JPEG, преобразовать изображение в ARGB32 (с 8-битным альфа-каналом) перед сохранением и даже попробовал смехотворно медленные вещи, такие как:

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.

Ответы [ 3 ]

10 голосов
/ 11 октября 2009

Я бы попробовал что-то вроде этого (то есть загрузить изображение, создать другое изображение того же размера, нарисовать фон, нарисовать изображение):

QImage image1("someFile.png"); 
QImage image2(image1.size());
image2.fill(QColor(Qt::white).rgb());
QPainter painter(&image2);
painter.drawImage(0, 0, image1);
image2.save("somefile.jpg", "JPG");
0 голосов
/ 28 июня 2010

True, если вы хотите использовать Alpha Chanel (прозрачный), вы должны сохранить изображение в формате * .png * .bmp

0 голосов
/ 11 октября 2009

JPEG не поддерживает прозрачность

...