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

如何将仅含0/255的RGBA黑白图像字节数组转换为按位存储的二进制数组

RGBA黑白数组转单比特像素数组方案

需求说明

输入为仅包含255或0的字节数组,对应RGBA格式的黑白图像,需要转换为每个比特位对应1个像素的压缩字节数组。
示例输入:
[255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]
示例输出:
二进制10111111对应字节数组[191]

实现逻辑

  1. 提取像素值:RGBA格式每个像素占4个字节(R、G、B、A顺序),黑白图像同一像素的R/G/B取值一致,每4个输入元素取第一个值作为该像素的亮度值
  2. 比特映射:255对应比特位1,0对应比特位0
  3. 字节拼接:每8个比特按高位到低位的顺序拼接为1个输出字节,不足8位的末尾补0凑整

Python 实现代码

def rgba_to_bit_packed(rgba_array):
    # 提取每个像素的R通道值
    pixels = [rgba_array[i] for i in range(0, len(rgba_array), 4)]
    result = []
    current_byte = 0
    bit_pos = 7  # 从最高位开始填充
    
    for pixel in pixels:
        if pixel == 255:
            current_byte |= (1 << bit_pos)
        bit_pos -= 1
        # 凑够8位存入结果数组
        if bit_pos < 0:
            result.append(current_byte)
            current_byte = 0
            bit_pos = 7
    # 处理剩余不足8位的情况
    if bit_pos != 7:
        result.append(current_byte)
    return result

# 测试示例
test_input = [255,255,255,255, 0,0,0,255, 255,255,255,255, 255,255,255,255, 255,255,255,255, 255,255,255,255, 255,255,255,255, 255,255,255,255]
print(rgba_to_bit_packed(test_input)) # 输出 [191]

示例验证

  • 32位输入共对应8个像素,提取后像素序列为[255, 0, 255, 255, 255, 255, 255, 255]
  • 映射为比特序列(从高位到低位):1 0 1 1 1 1 1 1
  • 转换为十进制:1*128 + 0*64 +1*32 +1*16 +1*8 +1*4 +1*2 +1*1 = 191,和示例输出完全匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 19:36:02