ウィキペディアのページによると、画像の幅は.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]
これをリトル エンディアン形式に変換するには、各 10 進数値を 16 進数文字列に変換し、配列を逆にして要素を結合し、結果の 16 進数文字列を整数に変換するのが最善の解決策です。
width = bytes[0x12..0x15].map {|x| x.to_s(16).rjust(2, "0")}.reverse.join.to_i(16)
#=> 256
- これについてもっと簡単な方法はありますか?
- ファイルを読み取り、整数の代わりに 16 進値の配列を返す簡単な方法はあります
x.to_s(16).rjust(2, "0")
か?