mieki256's diary



2015/12/09(水) [n年前の日記]

#1 [dxruby] DXRubyのImageをアルファチャンネル付で保存

DXRuby の Image はアルファチャンネル情報を含むことができるけど。Image#save を使って Image をアルファチャンネル付pngとして保存できるかどうか記憶が怪しいので動作確認。

_imagesave2.rb
# DXRubyのImage#saveでアルファチャンネルが保存されるかテスト

require 'dxruby'

img = Image.new(320, 240) # Imageを新規作成
img.line(0, 0, 320, 240, C_BLUE) # 線を引く
img.save("test2.png") # png画像として保存

Window.loop do
  break if Input.keyPush?(K_ESCAPE)
  Window.draw(0, 0, img)
end
出力画像は以下。

test2.png

アルファチャンネルは保存されないらしい。残念。

どうにかアルファチャンネル付で保存できないものか…。もしかすると、Rubyでpng保存できるライブラリだかモジュールだかがあれば、ソレを利用して実現できるかもしれない。

ググってみたところ、chunky_png なるライブラリがあるようで。コレを使えばどうにかなりそうな予感。

_ChunkyPNG
_wvanbergen/chunky_png
_chunky_png | RubyGems.org | your community gem host
_Medfreak / MNIST画像データ を Chunky_png でPNGにする

gem install chunky_png でインストール。以下のスクリプトを書いて動作確認。

_imagesave_chunky_png.rb
# DXRubyのImageをアルファチャンネル付で保存できないかテスト
# chunky_pngを利用して32bit PNGに変換してから保存する。

require 'dxruby'
require 'chunky_png'

# DXRubyのImageを、32bit(アルファチャンネル付)pngで保存する。
#
# @param [String] filename 保存ファイル名
# @param [Object] img DXRubyのImage
#
def save_dxruby_image(filename, img)
  w = img.width
  h = img.height
  png = ChunkyPNG::Image.new(w, h, ChunkyPNG::Color::TRANSPARENT)
  h.times do |y|
    w.times do |x|
      a, r, g, b = img[x, y]
      png[x, y] = ChunkyPNG::Color.rgba(r, g, b, a)
    end
  end
  png.save(filename, :fast_rgba)
end

# ここからメイン

# 仮Imageを作成
img = Image.new(320, 240)
img.line(0, 0, 320, 240, C_BLUE)

# 仮Imageを保存してみる
save_dxruby_image("test3.png", img)

Window.loop do
  break if Input.keyPush?(K_ESCAPE)
  Window.draw(0, 0, img)
end
出力画像は以下。

test3.png


アルファチャンネル付png画像として保存できたっぽい。

chunky_pngより高速なライブラリがあるらしい。 :

_Medfreak / MNIST画像データ を Chunky_png でPNGにする によると、 _oily_png なる高速なライブラリがあるらしい。

_oily_png | RubyGems.org | your community gem host

試しにインストールしてみたり。DevKitをインストールしてある環境で、gem install pily_png。バイナリがビルドされた。

ドキュメントには、require 'chunky_png' のままで効果が得られる、と書いてあるように見えるけど…英語分からんので自信無し。

それはともかく、出力結果が微妙に変わったような気がする…。アルファチャンネルがあることがより分かりやすいデータになったというか。

以上、1 日分です。

過去ログ表示

Prev - 2015/12 - 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 31

カテゴリで表示

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


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

Powered by hns-2.19.6, HyperNikkiSystem Project