簡體   English   中英

將QImage(icon)轉換為grayScale格式,同時保留背景

[英]Convert QImage(icon) to grayScale format while keeping background

我想將圖標轉換為灰度格式(以向用戶提供禁用操作反饋),如下所示:

在此處輸入圖片說明

inline QPixmap grayScaleImage(const QIcon &icon) {
        int w = icon.availableSizes().at(0).width();
        int h = icon.availableSizes().at(0).height();
        QImage image = icon.pixmap(w, h).toImage();
        image = image.convertToFormat(QImage::Format_Grayscale8);
        image.save("Sample.PNG");
        return QPixmap::fromImage(image);
    }

但是結果很糟糕,背景也轉換為灰色:

在此處輸入圖片說明

那我該怎么辦?

為了保持背景透明,您需要使圖像具有ARGB格式(帶有alpha)。 您可以通過迭代圖像像素,計算灰度值,同時保留Alpha通道,將彩色圖像轉換為灰色。 例如這樣:

QImage im = some_pixmap.toImage().convertToFormat(QImage::Format_ARGB32);
for (int y = 0; y < im.height(); ++y) {
    QRgb *scanLine = (QRgb*)im.scanLine(y);
    for (int x = 0; x < im.width(); ++x) {
        QRgb pixel = *scanLine;
        uint ci = uint(qGray(pixel));
        *scanLine = qRgba(ci, ci, ci, qAlpha(pixel)/3);
        ++scanLine;
    }
}
return QPixmap::fromImage(im);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM