qt - 从 uchar[] 平台创建的 QImage 的字节顺序是否依赖于平台?

标签 qt endianness qimage

QImage 有一个构造函数 QImage (uchar *data, int width, int height, int bytesPerLine, Format format) 从现有的内存缓冲区创建一个 QImage。

字节顺序 (uchars) 是否依赖于平台?如果我将 alpha、红色、绿色和蓝色的值放入其中并增加索引,则 alpha 与蓝色交换,红色与绿色交换。这表明字节顺序存在问题。

我现在想知道字节顺序是否依赖于平台。 Qt 文档对此没有任何说明。

如果它不依赖于平台,我会改变存储值的顺序:

texture[ startIndex + 0 ] = pixelColor.blue();
texture[ startIndex + 1 ] = pixelColor.green();
texture[ startIndex + 2 ] = pixelColor.red();
texture[ startIndex + 3 ] = pixelColor.alpha();

如果它 依赖于平台,我将创建一个 uint32 数组,存储计算为 alpha << 24 | 的值红色 << 16 |绿色 << 8 |蓝色,并在将数组传递给 QImage() 构造函数之前重新解释_cast 数组。

最好的问候,

延斯

最佳答案

这取决于格式。说明像素中总位数的格式与字节序相关。比如Format_ARGB32表示一个32位整数,其最高8位是alpha,在小端机器上,同样的8位是字节序列中的最后一个字节。

Format_RGB888 这样的序列中有单个位的格式不依赖于字节序。 Format_RGB888 表示字节在内存中以 R、G、B 顺序排列,与字节顺序无关。

要访问缓冲区中的字节,我会使用 Q_BYTE_ORDER 宏来有条件地编译相应的字节访问代码,而不是使用移位。

我个人使用 Format_RGB888 因为我不直接处理图像中的 alpha。这让我省去了处理字节序差异的问题。

关于qt - 从 uchar[] 平台创建的 QImage 的字节顺序是否依赖于平台?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12974195/

相关文章:

python - mac osx 上的 pyside 导入错误

c++ - 多线程绘图不流畅怎么解决?

c++ - 如何在 C++ 中获取 char 的整数值?

c++ - Qt - 图像类 - 非最大抑制 - C++

python - 在 QImage 上绘制矩形而不显示它

c++ - QT--OpenMP运行时错误SIGSEGV

c++ - 错误 C2059 : 'constant' when trying to create a Qt container in a header file with known size

c++ - 从文件加载结构

c# - 转换为十六进制字符串或从十六进制字符串转换时如何设置字节顺序

c++ - 如何使用QComboBox来选择如何保存QImage的格式