use*_*747 1 c++ qt pointers object qimage
我正在研究QT图像应用程序.现在我想从文件加载图像,显示它,然后能够在按钮点击时将其更改为灰度.
这是我对转换函数和图像对象的公开声明
public:
QImage * MainWindow::greyScale(QImage * origin);
QImage myImage;
Run Code Online (Sandbox Code Playgroud)
在我的"打开文件"操作中,我初始化图像并将其显示在这样的标签中
myImage.load(fileName);
myImage = myImage.scaled(400, 300);
ui->imageLabel->setPixmap(QPixmap::fromImage(myImage));
Run Code Online (Sandbox Code Playgroud)
这是我的灰度转换方法
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;
}
Run Code Online (Sandbox Code Playgroud)
现在我遇到的问题是我不确定如何正确调用转换方法并将返回的对象存储在新图像中.我想发送原始图像(myImage),但如果我这样做的话
QImage newPic = greyScale(myImage);
Run Code Online (Sandbox Code Playgroud)
我收到错误"无法将参数1从'QImage'转换为'QImage*'
我需要传递指针或引用吗?我尝试了多种组合但没有任何效果.我对语法并不完全清楚
QImage * origin
Run Code Online (Sandbox Code Playgroud)
请帮忙!!
让我们改变那个调用并逐步理解它,为此你需要注意两件事:方法返回什么,以及它需要什么参数.
该方法明确地为new分配空间QImage并返回指向该对象的指针.所以第一个改变将解决这个问题:
QImage* newPic = greyScale(myImage);
Run Code Online (Sandbox Code Playgroud)
其次,该方法需要现有QImage对象的内存地址(指针).所以我们继续并给出以下地址myImage:
QImage* newPic = greyScale(&myImage);
Run Code Online (Sandbox Code Playgroud)
就是这样.