You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何简化8*4图像行重排(swizzle rows)的像素索引计算公式?

图像行重排的简洁公式优化

我们有一张8×4的图像,常规像素索引顺序如下:

// 00 01 02 03 04 05 06 07
// 08 09 10 11 12 13 14 15
// 16 17 18 19 20 21 22 23
// 24 25 26 27 28 29 30 31

需要将行重排为以下顺序:

// 00 01 02 03 04 05 06 07
// 16 17 18 19 20 21 22 23
// 08 09 10 11 12 13 14 15
// 24 25 26 27 28 29 30 31

已实现的公式为:

index / 8 % 2 * 16 + index / 16 * 8 + index % 8

可以用位运算实现更简洁的等价逻辑,利用二进制位交换的特性:

(index & 0x7) | ((index & 0x8) << 1) | ((index & 0x10) >> 1)

原理说明

每个像素索引的二进制可拆分为5位:b4 b3 b2 b1 b0,其中:

  • b4(16的位):区分行组(0对应行0-1,1对应行2-3)
  • b3(8的位):区分组内的行(0对应行0/2,1对应行1/3)
  • b2-b0:列索引(0-7)

重排需求本质是交换b4和b3位:

  • 原行1(b4=0, b3=1)→ 交换后变为b4=1, b3=0,对应新行2的位置
  • 原行2(b4=1, b3=0)→ 交换后变为b4=0, b3=1,对应新行1的位置
  • 行0(b4=0, b3=0)和行3(b4=1, b3=1)交换后位不变,位置保持原样

位运算公式通过保留低3位列索引,交换8位和16位的位置,完美实现需求,比原公式更高效且简洁。

内容的提问来源于stack exchange,提问作者aybe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 11:21:02