C 寻找一种快速便携的8位图像彩色键控方法

C 寻找一种快速便携的8位图像彩色键控方法,c,image,transparency,blit,C,Image,Transparency,Blit,我正在寻找一种快速、C语言、可移植的方法(独立、无库)来执行彩色键控的BLIT。目标是一个独立的仿真器库,用于复古风格的计算机设计 我目前对此的看法(图像存储在uint32\t类型存储中,但它们是8位调色板图像): 一些解释: 它基本上利用修改后的掩模来产生一个应用在源上的掩模。第二行是hack的核心,在我的案例中,与colorkey不匹配的每个像素(字节)返回0x80,否则返回0。第三行只是将所有0x80扩展为0xFF。后来应用掩码很简单,所以我没有包括它(在实际代码中,它与其他东西结合在一起

我正在寻找一种快速、C语言、可移植的方法(独立、无库)来执行彩色键控的BLIT。目标是一个独立的仿真器库,用于复古风格的计算机设计

我目前对此的看法(图像存储在
uint32\t
类型存储中,但它们是8位调色板图像):

一些解释:

它基本上利用修改后的掩模来产生一个应用在源上的掩模。第二行是hack的核心,在我的案例中,与colorkey不匹配的每个像素(字节)返回0x80,否则返回0。第三行只是将所有0x80扩展为0xFF。后来应用掩码很简单,所以我没有包括它(在实际代码中,它与其他东西结合在一起)


因此,问题是,在普通C(精确地说,是C89)的约束下,有没有任何方法可以使这项任务总体上更快(对于大多数体系结构)?

您可能会获得更好的牵引力。我不需要像我一样的解决方案,我只是把它作为参考,是的,我正在研究它,并且来到了这里。我认为任何更快的解决方案都需要一些不同的方法,所以我更希望有人提出一些自己的想法,而不是干扰我的想法。
uint32_t sdata; /* Last read source data (4 pixels) */
uint32_t ckey;  /* Prepared colorkey, such as 0x30303030U if the key is 0x30 */
uint32_t t32;

...

t32 = sdata ^ ckey; /* 0x00 where the colorkey matches */
t32 = (((t32 & 0x7F7F7F7FU) + 0x7F7F7F7FU) | t32) & 0x80808080U;
t32 = (t32 - (t32 >> 7)) + t32; /* Colorkey mask prepared (0xFF or 0x00) */