我正在开发QT图像应用程序。现在我想从文件中加载图像,显示它,然后在按钮点击时将其更改为灰度。
以下是我对转换函数和图像对象的公开声明
public:
QImage * MainWindow::greyScale(QImage * origin);
QImage myImage;
在我的"打开文件"动作我初始化图像并将其显示在这样的标签中
myImage.load(fileName);
myImage = myImage.scaled(400, 300);
ui->imageLabel->setPixmap(QPixmap::fromImage(myImage));
这是我的灰度转换方法
QImage * MainWindow::greyScale(QImage * origin){
QImage * newImage = new QImage(origin->width(), origin->height(), QImage::Format_ARGB32);
QColor oldColor;
for(int x = 0; x<newImage->width(); x++){
for(int y = 0; y<newImage->height(); y++){
oldColor = QColor(origin->pixel(x,y));
int average = (oldColor.red()+oldColor.green()+oldColor.blue())/3;
newImage->setPixel(x,y,qRgb(average,average,average));
}
}
return newImage;
}
现在我遇到的问题是我不确定如何正确调用转换方法并将返回的对象存储在新图像中。我想发送原始图像(myImage),但是如果我这样做的话
QImage newPic = greyScale(myImage);
我收到错误&#34;无法从&#39; QImage&#39;转换参数1到&#39; QImage *&#39;
我需要传递指针或引用吗?我尝试了多种组合,但没有任何效果。我的语法
并不完全清楚QImage * origin
请帮助!!
答案 0 :(得分:7)
让我们一步一步地改变这个调用,并为此你需要注意两件事:返回的方法,以及需要的参数
该方法明确为新QImage
分配空间,返回指向该对象的指针。所以第一个改变将解决这个问题:
QImage* newPic = greyScale(myImage);
其次,方法期望现有QImage
对象的内存地址(指针)。所以我们继续并提供myImage
的地址:
QImage* newPic = greyScale(&myImage);
就是这样。
答案 1 :(得分:1)
您的方法接收指向QImage的指针作为参数。将其更改为QImage * MainWindow::greyScale(const QImage &origin)
,或将myImage
声明为指针:QImage *myImage = new QImage (/*some params if needed*/);