根据维基百科页面,.bmp
图像的宽度存储在文件的标题中,以字节 0x12 到 0x15 为单位。例如,在 256x256 的图像中,字节 0x12 到 0x15 看起来像这样;Ruby 将每个字节转换为整数:
file = File.open("red_bmp.bmp", "r")
bytes = file.bytes.to_a
bytes[0x12..0x15]
#=> [0, 1, 0, 0]
为了将其转换为小端格式,我最好的解决方案是将每个十进制值转换为十六进制字符串,反转数组,连接元素,然后将生成的十六进制字符串转换回整数。
width = bytes[0x12..0x15].map {|x| x.to_s(16).rjust(2, "0")}.reverse.join.to_i(16)
#=> 256
- 有没有更简单的方法来解决这个问题?
- 有没有一种简单的方法来读取文件并返回一个十六进制值数组而不是整数(不求助于
x.to_s(16).rjust(2, "0")
)?