mieki256's diary



2017/04/17(月) [n年前の日記]

#1 [ruby] BGRAをARGBに変換するソレ

昨日書いたRubyスクリプトをもっと高速化できないものかとググってたら以下の記事を見かけて。

_Rubyでのビッグエンディアンとリトルエンディアンの相互変換 - エンジニアの低脳っぷりを晒す戦記

あー。その手があったか…。なるほどなあ…。

つまり、以下の処理は…。
def convert_image2(w, h, surface)
  dst = []
  src = surface.data.unpack("L*")
  src.each do |d|
    dst << ((d >> 24) & 0x0ff)  # a
    dst << ((d >> 16) & 0x0ff)  # r
    dst << ((d >>  8) & 0x0ff)  # g
    dst << (d & 0x0ff)          # b
  end
  return Image.createFromArray(w, h, dst)
end

こう書けるのだな…。
def convert_image3(w, h, surface)
  dst = surface.data.unpack("L*").pack("N*").unpack("C*")
  return Image.createFromArray(w, h, dst)
end

ベンチマークを取ってみたら、2倍ほど速くなった。
ruby cairo_helloworld_dxruby3.rb 
                      user     system      total        real
cairo draw        0.031000   0.000000   0.031000 (  0.020485)
use StringIO      0.047000   0.000000   0.047000 (  0.046708)
not StringIO      0.203000   0.016000   0.219000 (  0.224593)
unpack+pack       0.110000   0.000000   0.110000 (  0.112492)
それでも、一旦png出力するほうが速いという結果に。無念。

このやり方、何をやってるのかちょっと分かりづらい、ような気もする。せめてコメントをつけておかないと3週間後の自分が頭の上に「???」を浮かべてそう。

以上です。

過去ログ表示

Prev - 2017/04 - Next
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project