幅416ピクセルのモノクロBMPファイルの上下と色を反転させ、データ部分のみを出力するフィルタ
require "enumerator" def convert(str,width=416) width /= 8 off = str[10,4].unpack("V").first header = str[0,off] data = str[off,str.size - off] data = data.enum_for(:scan, /.{#{width}}/m).map{|line| line.unpack("l*").map{|c| ~c}.pack("l*") }.reverse.join data end STDOUT.write convert(STDIN.read)
仕事で必要に迫られて書いた。すごくニッチなところで役に立つプログラム。ポイントは変換部分をEnumeratorを使って1行で書いているところですかね。
convertの返り値を header + data にすればBMPとして書き出すこともできます。