幅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として書き出すこともできます。

追記

scanの正規表現にmモディファイアを追加。あと、Ruby1.9だと -Ebinary などとして外部エンコーディングをbinaryにしないといけない。