![](/img/trans.png)
[英]no suitable constructor exists to convert from “uint8_t *” to “std::vector<uint8_t, std::allocator<uint8_t>>”
[英]Convert std::vector<uint8_t> to QImage
我试图从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;
}
我用QImageReader和QBuffer解决了类似的问题
QByteArray data = QByteArray::fromRawData(reinterpret_cast<const char*>(buf.data()), buf.size());
QBuffer buffer(data);
QImageReader reader(&buffer);
QImage img = reader.read();
您需要确保std::vector<uint8_t> &buf
为图片保存足够的数据。 对于QImage :: Format_ARGB32,我希望每个样本需要4个字节,因此buf.size()必须至少为300 * 300 * 4。
该怎么办呢? 那么,在这种情况下,图像的大小可能不是300x300,你需要弄清楚如何发现它。 或者你可以用'0'填写buf以获得所需的大小,以便检查在这种情况下一切正常(或者更好,没有什么不好的事情发生)
你可以用它。
QImage img;
img.loadFromData(buf.data(), buf.size());
img.scaled(QSize(300,300), Qt::KeepAspectRatio);
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.