我需要用从压缩/解压缩图像接收的无符号字符数据构造一个图像。为此,我只是编写了一个简单的程序来测试从图像加载缓冲区,反之亦然。当我运行代码时,我无法将图像设置像素映射到背景。
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);
loadFromData 要求数据采用某种格式(PNG、JPG...),纯数组不是有效的
数组但是做
QImage img(buffer,_width, _height, QImage::Format_RGB888);
将返回正确大小和格式的图像,但仅在缓冲区处于活动状态时有效