设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1480|回复: 1
打印 上一主题 下一主题

[随意闲聊] 位运算求助

[复制链接]

Lv2.观梦者

傻♂逼

梦石
0
星屑
374
在线时间
1606 小时
注册时间
2007-3-13
帖子
6562

烫烫烫开拓者

跳转到指定楼层
1
发表于 2011-9-18 10:21:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
原始数据是
rgbrgbrgbrgbrgbrgb
怎么快速转换成
argbargbargbargbargbargb
a=255
哎呀,蛋疼什么的最有爱了

Lv1.梦旅人

梦石
0
星屑
110
在线时间
953 小时
注册时间
2007-4-25
帖子
805
2
发表于 2011-9-19 01:25:38 | 只看该作者
本帖最后由 苏小脉 于 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 位寄存器。

这个只是整十二字节的处理,如果有余数只好做特殊处理。
[email protected]:~> repeat 1 fortune
Matz is nice, so we are nice.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2025-4-16 20:38

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表