2015/12/09(水) [n年前の日記]
#1 [dxruby] DXRubyのImageをアルファチャンネル付で保存
DXRuby の Image はアルファチャンネル情報を含むことができるけど。Image#save を使って Image をアルファチャンネル付pngとして保存できるかどうか記憶が怪しいので動作確認。
_imagesave2.rb

アルファチャンネルは保存されないらしい。残念。
どうにかアルファチャンネル付で保存できないものか…。もしかすると、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

アルファチャンネル付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
出力画像は以下。
アルファチャンネルは保存されないらしい。残念。
どうにかアルファチャンネル付で保存できないものか…。もしかすると、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
出力画像は以下。
アルファチャンネル付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' のままで効果が得られる、と書いてあるように見えるけど…英語分からんので自信無し。
それはともかく、出力結果が微妙に変わったような気がする…。アルファチャンネルがあることがより分かりやすいデータになったというか。
_oily_png | RubyGems.org | your community gem host
試しにインストールしてみたり。DevKitをインストールしてある環境で、gem install pily_png。バイナリがビルドされた。
ドキュメントには、require 'chunky_png' のままで効果が得られる、と書いてあるように見えるけど…英語分からんので自信無し。
それはともかく、出力結果が微妙に変わったような気がする…。アルファチャンネルがあることがより分かりやすいデータになったというか。
[ ツッコむ ]
以上です。