我先讲解下怎么把图片中指定的某种颜色修改成我们想要的颜色。具体流程很简单,在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 ;
}
以上代码的作用是将图片上点所在的像素颜色变为透明