从char缓冲区加载图像

时间:2013-09-11 11:54:31

标签: qt qt4

我需要使用从压缩/解压缩图像接收的unsigned char数据构造一个图像。为此,我刚写了一个简单的程序来测试从图像缓冲区加载,反之亦然。当我运行代码时,我无法将图像映射到背景。

void MainWindow::LoadImage()
{
    //======== Load buffer from image
    unsigned char buffer[_width*_height*COLOR_COMPONENTS]; //1024 * 768 * 3
    QImage image;
    image.load("://image.jpg", "JPEG");
    memcpy(buffer, image.bits(), _width*_height*COLOR_COMPONENTS);

    //========= Load image from buffer
    QImage img;
    img.loadFromData((const char*)buffer);
    QPixmap px = QPixmap::fromImage(img);
    ui->label->setPixmap(px);
}

更新: 我将代码更改为此,但是,我使用memcpy进行分段错误。

unsigned char buffer[400*300*3];
QImage image(_width, _height, QImage::Format_RGB32);

image.load("://image.jpg", "JPEG");

memcpy(buffer, image.bits(), 400*300*3);



QImage img(400, 300, QImage::Format_RGB32);

img.loadFromData((const uchar*)buffer, sizeof(buffer)/sizeof(char), "JPG");

QPixmap px = QPixmap::fromImage(img);

ui->label->setPixmap(px);

1 个答案:

答案 0 :(得分:4)

loadFromData要求数据采用特定格式(PNG,JPG ...),普通数组不是有效数据

然而

QImage img(buffer,_width, _height, QImage::Format_RGB888);

将返回正确大小和格式的图像,但只有缓冲区处于活动状态时才有效