代码之家  ›  专栏  ›  技术社区  ›  Charles Burns

qt:qImage始终将透明色保存为黑色

  •  5
  • Charles Burns  · 技术社区  · 15 年前

    如何将具有透明度的文件保存到不使用qt的jpeg文件中,使透明颜色变为黑色? 我知道jpeg不支持alpha,黑色可能只是alpha的默认值“0”,但黑色是一种可怕的默认颜色。

    看起来这应该是一个简单的操作,但是当保存为jpeg时,我尝试的所有蒙版和alpha函数都会被忽略。

    例如:

    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.
    
    3 回复  |  直到 14 年前
        1
  •  9
  •   LukáÅ¡ Lalinský    15 年前

    我会尝试这样做(即加载图像,创建另一个相同大小的图像,绘制背景,绘制图像):

    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");
    
        2
  •  -2
  •   Martin Beckett    15 年前

    jpeg不支持透明度

        3
  •  -2
  •   Andres    14 年前

    如果要使用alpha chanel(透明),应将imge保存为*.png*.bmp格式。