1

ウィキペディアのページによると、画像の幅は.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")か?
4

2 に答える 2