Ruby/GTKアプリノート(2):Gdk::Pixbuf

1602 ワード

詳細
Gdk::PixbufはGTKライブラリの極めて重要なコンポーネントであり、アイコンから画像コントロールまで、あちこちでその姿を見ることができ、Gdk::PixbufはGTKが画像リソースを使用することを楽にします.
Gdk::Pixbufの使い方ドキュメントがはっきりしているので、繰り返さないでください.Pixbufが内部に画像ドキュメントをどのように保存するかは詳しく説明されていません.これは使用に迷惑をかけます.
1).Pixbuf#pixels:内部画素メモリの一部を返す
参照ではなくコピーします.したがってpixels bufを変更することで画像内容を変更することはできない.これは不便そうですが、Pixbufは画素メモリを管理するのが簡単です.
2).Pixbuf#pixels=:pixbufはコピーを返し、Pixbufが内部画素を管理するメモリを単純化すると述べたので、「pixels=」という方法は実際には存在しない(そうでなければPixbufが内部画素を管理する単純性を破壊する)、RubyGnomeのウェブサイト上のドキュメントは間違っている.少なくともこれまで(0.17.0-rc 1)、Pixbuf#pixels=メソッドは存在しなかった.
画像を修正するにはどうすればいいですか?次のようにできます.
buf = Pixbuf#pixels
buf[x] = y
new_pixbuf = Pixbuf#new(buf, colorspace, has_alpha, width, height, bps, rowstride)

3).Pixbuf#new(src,src_x,src_y,width,height):既存のPixbufから新しいPixbufオブジェクトを生成すると、2つのPixbufが同じ画素メモリを共有する.特に、新しいPixbufが古いPixbufのサブエリアである場合、widthは小さくなっていますが、rowstrideは元のものと同じなので、特に注意してください.
4).Pixbuf#pixels:前述したように、pixelsは内部画素メモリのコピーを返しますが、pixels.sizeはいったいどれくらいの大きさですか.height*rowstrideに等しいですか?いいえ.widthが4の整数倍でない場合pixbuf
32 bitシステムでは最適化のためにrowstrideを4の整数に集約する可能性がありますが、最後の行では最適化する必要はありませんのでpixels.sizePixbufの画素メモリの管理を検討するのは、主にPixbufと他のオブジェクトの相互変換時にエラーが発生しないようにするためであり、例えばPixbufオブジェクトからCamelliaオブジェクト(Camelliaはコンピュータ画像処理ライブラリ)を生成したり、逆にしたりすることができる.一般的なGTKプログラムではpixelsのフォーマットにあまり関心を持つ必要はありません.