Project1

标题: 位运算求助 [打印本页]

作者: yangff    时间: 2011-9-18 10:21
标题: 位运算求助
原始数据是
rgbrgbrgbrgbrgbrgb
怎么快速转换成
argbargbargbargbargbargb
a=255
作者: 苏小脉    时间: 2011-9-19 01:25
本帖最后由 苏小脉 于 2011-9-19 11:18 编辑

如果目标机器是 32 位,便可将数据读入 32 位整数数组 rgb 中,rgb 元素划分如下:

rgbr|gbrg|brgb|rgbr|gbrg|brgb|rgbr|...

可见每三个元素便可进行一次迭代,每次迭代处理 4 个 argb。

  1. argb[j] = 0xff000000 | (rgb[i] & 0xffffff00) >> 8;
  2. argb[j+1] = 0xff000000 | (rgb[i] & 0x000000ff) << 16 | (rgb[i+1] & 0xffff0000) >> 16;
  3. argb[j+2] = 0xff000000 | (rgb[i+1] & 0x0000ffff) << 8 | (rgb[i+2] & 0xff000000) >> 24;
  4. argb[j+3] = 0xff000000 | (rgb[i+2] & 0x00ffffff);
  5. i += 3, j += 4;
复制代码
64 位下则可以利用 64 位寄存器。

这个只是整十二字节的处理,如果有余数只好做特殊处理。




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1