我正在阅读Leptonica的sourse代码,这是一个很好的图像处理库。在这个库中它提供了一个功能,当像素的深度为8(对应于灰度图像)时设置像素值:
/*!
* l_setDataByte()
*
* Input: line (ptr to beginning of data line)
* n (pixel index)
* val (val to be inserted: 0 - 0xff)
* Return: void
*/
void
l_setDataByte(void *line,
l_int32 n,
l_int32 val)
{
#ifdef L_BIG_ENDIAN
*((l_uint8 *)line + n) = val;
#else /* L_LITTLE_ENDIAN */
*(l_uint8 *)((l_uintptr_t)((l_uint8 *)line + n) ^ 3) = val;
#endif /* L_BIG_ENDIAN */
}
typedef unsigned int uintptr_t;
typedef unsigned char l_uint8;
对于大端的情况,代码很容易理解,但对于小端情况,很难理解。有人可以解释为什么当计算机是小端时像素值以这种方式设置?谢谢。
答案 0 :(得分:0)
由于图像和其他文件在计算机之间传输,因此必须忽略计算机的字节序首选项,而不是文件使用的首选项。这包括图像以及不受处理器约束的任何其他文件类型。有时这是由格式定义的,有时是单独定义的(根据标题中关于TIFF声明字节序的评论)。