QT 给Qimage数据赋值,显示异常,像素对齐的坑

如果使用QImage(width, height, format)的形式创建qimage

有时候QT底层为了效率会使用像素对齐

一行的数据不一定为width

例如:

cpp 复制代码
QImage image = QImage(502, 410, QImage::Format_RGB888);
qDebug() << image.bytesPerLine();
// 按照设想应该输出 502 * 3 = 1506
// 实际输出 1508

// 假设你有一个 rgb888 数据需要赋值给 QImage
const quint8 *src_rgb888_data;

// 这种情况显示QImage的图像就会异常
memcpy(image.bits(), src_rgb888_data, image.width() * image.height() * 3);

// 正确的赋值方法
const quint8 *src = src_rgb888_data;
int srcStride = image.width() * 3;

quint8 *dst = image.bits();
int stride = image.bytesPerLine();
for(int i = 0; i < image.height(); i ++) {
	const quint8 *src_row = src + (i * srcStride);
    quint8 *row = dst + (i * stride);
    
    memcpy(row, src_row, srcStride);
}
相关推荐
froginwe115 分钟前
SVN 创建版本库
开发语言
2501_924952697 分钟前
C++中的枚举类高级用法
开发语言·c++·算法
闭关苦炼内功7 分钟前
使用Java语言实现二分查找
java·开发语言
2401_8732046510 分钟前
代码覆盖率工具实战
开发语言·c++·算法
xht083211 分钟前
PHP vs C++:编程语言终极对决
java·开发语言
少司府12 分钟前
C++基础入门:第一个C++程序
java·c语言·开发语言·c++·ide
不染尘.12 分钟前
欧拉路径算法
开发语言·数据结构·c++·算法·图论
Greg_Zhong15 分钟前
Js中异步编程的知识扩展【异步有哪些、如何执行、宏任务和微任务等】
开发语言·javascript
陈随易19 分钟前
我也曾离猝死很近
前端·后端·程序员
喵个咪25 分钟前
GoWind Content Hub|风行,开箱即用的企业级前后端一体内容中台
前端·后端·cms