【发布时间】:2015-06-29 08:36:31
【问题描述】:
我正在尝试从 std::vector 创建 QImage。我试过;
void FaceCutThread::convertImage(std::vector<uint8_t> &buf)
{
QImage img(&buf[0], 300, 300, QImage::Format_ARGB32);
emit isFinisedFaceCut(img);
}
和
void FaceCutThread::convertImage(std::vector<uint8_t> &buf)
{
QImage img(buf.data(), 300, 300, QImage::Format_ARGB32);
emit isFinisedFaceCut(img);
}
两种类型的转换都没有给出任何错误;但是,当我尝试在QLabel 中显示它时;
void MainWindow::handleFaceResults(QImage& buf)
{
QImage myImage(buf);
ui->lblRawImage->setPixmap(QPixmap::fromImage(myImage));
}
我的应用程序总是意外完成。能否请您帮助我如何正确转换为 QImage?
编辑:
我可以毫无问题地将图像写入文件;
bool save_file (const string &path, const vector<uint8_t> &data)
{
std::ofstream os;
os.open(path.c_str(), std::ios::out | std::ios::binary);
if (!os.is_open())
return false;
os.write((const char*)data.data(), data.size());
return true;
}
【问题讨论】:
-
你确定buf包含足够的元素(300*300*4)吗?
-
@marom,其实我不知道 buf 的高度和宽度……但我知道它的大小。请查看我的最新编辑..
-
好的,我重新提出我的问题:data.size (buf.size()) 是否足够大?应该是(至少)300*300*4。
-
@marom,因为它来自 SDK...我不知道,所以假设它不是。如何在不定义确切高度和宽度的情况下使其动态化?