把图片的某种颜色改为透明

时间:2024-04-05 11:28:46

把图片的某种颜色改为透明

我先讲解下怎么把图片中指定的某种颜色修改成我们想要的颜色。具体流程很简单,在qt中有一个函数可以获取图片中的颜色表(即所有颜色),所有颜色存储在QVector里面,然后更具QVector里面的颜色表修改图片中的某种颜色。示例代码如下:

QImage image(":/image/pix.png");
    //根据x,y提取像素点的Rgb
    QRgb rgb = image.pixel(image.width()/2,image.height()/2);
    //把图片所有颜色存储于rgbVector中
    QVector<QRgb> rgbVector = image.colorTable();
    for (int i = 0; i < rgbVector.size(); ++i)
    {
        if(rgbVector.at(i) == rgb)
        {
            QRgb rgb2 = QColor(0,255,0).rgba();//替换的颜色可以是透明的,比如QColor(0,255,0,0)。
            image.setColor(i,rgb2);
        }
    }


不过使用这种方法我碰到了一个问题,那就是如果图片不是8位深度,那么颜色表就提取不出来,于是我使用下面这个方法把图片的某种颜色设置为透明。

QImage Widget::getTransImage(QImage image , QPoint point)
{
    int imageW = image.width();
    int imageH = image.height();
    //判断所取的点是否在图片内部
    if(image.valid(point))
    {
        QRgb  rgb = image.pixel(point);
        QImage mask = image.createMaskFromColor(rgb,Qt::MaskOutColor);
        image.setAlphaChannel(mask);
        
        return image;
    }
    return image ;
}
以上代码的作用是将图片上点所在的像素颜色变为透明