心魅 - cocoromi -

半角スペース時々全角

タスクトレイに画像ファイルを表示する

以前以下のエントリで画像ファイルをタスクトレイアイコンに表示したのだが、もっと上手いやり方があったので紹介する。

[flex3][air1.0] ImageオブジェクトからBitmapDataを作る
http://d.hatena.ne.jp/umezo/20080609/1213019379

BitmapAsset


埋め込み画像ファイルからBitmapDataオブジェクトを取得するにはBitmapAssetクラスを使うとよい。

http://livedocs.adobe.com/flex/3_jp/langref/mx/core/BitmapAsset.html
BitmapAsset - Adobe® Flex™ 3 リファレンスガイド

  • Main.mxml
<?xml version="1.0"?>
<mx:WindowedApplication
  xmlns:mx="http://www.adobe.com/2006/mxml"
  creationComplete="init();"
>
  <mx:Script>
    <![CDATA[
    import mx.core.BitmapAsset;
      [Embed(source = '../assets/icon/16x16.png')]
      private var TrayIcon : Class;
      
      private function init ( ) : void {
        NativeApplication.nativeApplication.icon.bitmaps = [ BitmapAsset( new TrayIcon() ) ];
      }
    ]]>
  </mx:Script>
</mx:WindowedApplication>


[Embed(source = '../assets/icon/16x16.png')]はコンパイルするときにこの画像埋め込むぞーという意味で、mxmlファイルからの相対パスを書く。
このような記述はメタデータタグといい、このメタデータタグ直下の変数に埋め込み画像が対応づけられる。
このとき変数の型をClassにしておくことで、以降クラスとして扱われることになる。(型をClass以外に設定しているコードを見たことがない。)
なのでNativeApplication.nativeApplication.icon.bitmaps = [ BitmapAsset( new TrayIcon() ) ];の部分でnew演算子を用いて、画像オブジェクトを生成することが出来るようになる。


他のメタデータタグは以下で調べることが出来る。

http://livedocs.adobe.com/flex/3_jp/html/help.html?content=metadata_3.html#698532
Adobe Flex 3 ヘルプ

まとめ


静的な画像のBitmapDataはEmbedで埋め込んでBitmapAsset( new Hoge() )で取得する。

ちなみに動的に読み込んだ画像のBitmapDataを得る方法としては以下のライブラリを使う方法などがある(らしい)。

http://www.libspark.org/wiki/tarotarorg/CharacterWalker
tarotarorg/CharacterWalker - Spark project