心魅 - cocoromi -

半角スペース時々全角

ImageオブジェクトからBitmapDataを作る

タスクトレイに表示するアイコンはBitmapDataというクラスのインスタンスを使っている。
このとき、アイコンはあらかじめ用意した画像ファイルを使いたいという需要がある気がするのだがいかがだろう?

ImageSnapshot.captureBitmapData


ImageSnapshotクラスはコンポーネントからBitmapDataを作れるクラスです。
(このほかにも適当な画像形式にエンコード出来たりするらしいが、そっちは知りません。)

mxmlに以下のような箇所があるとする

<mx:Image id="icon" source="icons/16x16.png" />

このとき、このImageオブジェクトのBitmapDataはこのようにして生成出来る。

   var bitmapData:BitmapData = ImageSnapshot.captureBitmapData( icon );

ちなみにこのImageSnapshot.captureBitmapDataは引数に、DisplayObjectかBitmapDataが取れるので
すべてのコンポーネントはImageSnapshotを使って、BitmapDataに変換できる。

タスクトレイのアイコンにしてみる


上記のようにして用意したBitmapDataをタスクトレイに表示してみる。

var sysTrayIcon:SystemTrayIcon = NativeApplication.nativeApplication.icon as SystemTrayIcon;
sysTrayIcon.tooltip = "Tray Icon Test";
NativeApplication.nativeApplication.icon.bitmaps = [ImageSnapshot.captureBitmapData(image)];

タスクトレイアイコンを制御するためにはSystemTrayIconクラスを使う。
ただしこのSystemTrayIconクラスはnewによって生成できないので、自動で生成されるNativeApplication.nativeApplication.iconを利用する。
あとはSystemTrayIconオブジェクトのbitmapsにBitmapDataを格納した配列を代入すれば良い。


まとめ


コンポーネントの表示状態をキャプチャしたかったら、ImageSnapshot.captureBitmapData。
タスクトレイアイコンはNativeApplication.nativeApplication.icon.bitmapsに配列で代入。


未確認事項


mxmlにImageオブジェクトを配置してしまうと、画面に描画されてしまう。BitmapDataだけが必要な場合、かつ可能な限りmxmlに書きたい場合どうすればいいのか。