Yur*_*ury 2 qt qt4 image-processing memory-mapped-files qimage
我希望将绑定QImage绑定到MMF文件来操作图像,而不需要直接在光盘上使用内存.不幸的是,我的代码在内存中创建了一个副本
QFile file("Boston City Flow.jpg");
if(!file.open(QIODevice::ReadOnly))
QMessageBox::information(this, "Error", "Error");
qint64 size = file.size();
unsigned char *mmf = file.map(0, size);
QImage image;
image.loadFromData(mmf, size, NULL);
Run Code Online (Sandbox Code Playgroud)
我的程序需要处理非常大的图像.
尝试声明mmf const:
const unsigned char* mmf = file.map(0, size);
Run Code Online (Sandbox Code Playgroud)
然后看看QImage ctors,尤其是
QImage( const uchar*, int width, int height, Format )
Run Code Online (Sandbox Code Playgroud)
QImage :: QImage(const uchar*data,int width,int height,Format format)
文档说:
"缓冲区必须在QImage的整个生命周期内保持有效,并且所有未经修改或以其他方式与原始缓冲区分离的副本.图像不会在破坏时删除缓冲区.[...]与类似的QImage构造函数不同一个非const数据缓冲区,这个版本永远不会改变缓冲区的内容.例如,调用QImage :: bits()将返回图像的深层副本,而不是传递给构造函数的缓冲区.这允许从原始数据构建QImage的效率,而不会改变原始数据."
请注意,非const uchar*版本会立即复制,因此请确保传递const uchar*.另请注意,调用QImage的非const方法将复制数据.
| 归档时间: |
|
| 查看次数: |
3148 次 |
| 最近记录: |