QImage的QT save()函数问题

时间:2011-09-05 03:29:48

标签: qt

我有一个问题,我一直试图弄清楚几天。我正在使用OpenCV从相机中获取帧,然后我将其转换为QImage并尝试将帧保存在磁盘上。我面临的问题是,如果我在visual studio中以发布/调试模式编译/运行代码,那么它可以正常工作。如果我运行visual studio为调试模式创建的可执行文件,那么它运行正常。但是如果我在发布模式下运行visual studio创建的可执行文件,那么gui工作正常,除了QImage save()函数不再起作用。如果我使用OpenCV函数来保存帧,那么它在所有模式下都能正常工作。我想保存的QImage不是Null,因为我的注释文本框显示我在里面打印的行,但是save函数返回false。我真的很感激帮助。

这是一个小代码:

IplImage和QImage之间的转换代码(我还使用了其他代码,结果相同)

QImage A::IplImage2QImage(const IplImage *iplImage)
{
    int height = iplImage->height;
    int width = iplImage->width; 
    if (iplImage->depth == IPL_DEPTH_8U && iplImage->nChannels == 3) {
        const uchar *qImageBuffer = (const uchar*)iplImage->imageData;
        QImage img(qImageBuffer, width, height, QImage::Format_RGB888); 
        return img.rgbSwapped();
    }
    else {
        // qWarning() << "Image cannot be converted.";  
        return QImage();
    }
}

void A::getFrame()
{
    commentsTextBox->setText("getFrame");
    if (VI.isFrameNew(device1)) {
        VI.getPixels(device1, (unsigned char *)frame->imageData, false, true);
    }
    QImage qimg2 = IplImage2QImage(frame);
    m_Label->setPixmap(QPixmap::fromImage(qimg2));
    if (!qimg2.isNull()) {
        x = qimg2.save("C:\\Data\\test.jpg");
        commentsTextBox->append("notEmpty33"); 
    }
}

2 个答案:

答案 0 :(得分:4)

我遇到了与QImage :: load()相同的问题。我将发布alexisdm链接中指出的解决方案的副本,以使其更清晰。

  

在windows下,qjpeg4.dll必须位于imageformats目录下   默认情况下应用程序的目录。

谢谢!

答案 1 :(得分:0)

尝试这样的事情,

// Prepare the url,
QUrl url("file:///home/ubuntu/Desktop/image.jpg");

// Get the path,
QString path = url.path();

// Save the image,
myQimage.save(path);