Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 压缩图像的字节顺序_C++_C_Rgb - Fatal编程技术网

C++ 压缩图像的字节顺序

C++ 压缩图像的字节顺序,c++,c,rgb,C++,C,Rgb,因此,从中,我了解到ARGB的字节顺序是,从最低地址到最高地址,BGRA,在某种解释下,在一台小端机器上 这会如何影响压缩数据的命名约定,例如auint8_t ar[]={R,G,B,B,R,G,B}?根据定义,Little endian按相反顺序存储数字的字节。如果将它们视为字节数组,则严格来说这不是必需的,但是任何效率不高的代码基实际上都会将4个字节视为32位无符号整数。这将使软件升级速度提高近4倍 现在真正的问题是为什么。这源于这样一个事实,即当如上所述将像素视为32位整数时,编码器希望能

因此,从中,我了解到ARGB的字节顺序是,从最低地址到最高地址,BGRA,在某种解释下,在一台小端机器上


这会如何影响压缩数据的命名约定,例如a
uint8_t ar[]={R,G,B,B,R,G,B}

根据定义,Little endian按相反顺序存储数字的字节。如果将它们视为字节数组,则严格来说这不是必需的,但是任何效率不高的代码基实际上都会将4个字节视为32位无符号整数。这将使软件升级速度提高近4倍

现在真正的问题是为什么。这源于这样一个事实,即当如上所述将像素视为32位整数时,编码器希望能够以可预测的方式运行算术和移位。这取决于字节的顺序相反

简言之,这实际上并不奇怪,因为在小端机器中,最后一个字节(最高地址)实际上是最高有效字节,而第一个字节是最低有效字节。因此,像这样的字段自然会按相反的顺序排列,因此当作为数字处理时,它是正确的(作为数字,它将显示为ARGB,但作为字节数组,它将显示为BGRA)


对不起,如果这是不清楚,但我希望它有帮助。如果您不理解或我遗漏了一些内容,请发表评论。

如果您按照指定的字节数组存储数据,则您使用的是基本上与RGB相反的BGR格式:


哪种命名约定?@AdrianMcCarthy维基百科RGBA文章中列出的一种,基于endianess的命名约定(不是基于字节顺序的命名约定)。它不是命名约定,而是字节顺序。命名约定是B=蓝色,R=红色等–EJP 3小时ago@EJP事实上,这是完全错误的。ARGB是一种值命名约定(虽然字节顺序是相反的,但像素的整数值(理论上)在不同的机器上是相同的)。我不明白的是,这是如何映射到压缩数据类型的:这似乎是不可能的?@MadScienceDreams好吧,看来主要的区别在于压缩版本只是缺少alpha通道。你应该能够很容易地在这两者之间转换,只需要一些位移位和memcopies。我知道如何转换它。ARGB“命名约定”是按像素值,而不是按字节顺序。但是相同的命名约定对压缩数据类型没有意义。在比较字节空间时,[RGBR]和[BGRB]是非常不同的值。如果将像素值定义为(值>>8),则约定仍然有效,但这似乎…很奇怪。