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/