![]() 画像のロードと Bitmap オブジェクトFlex で画像を扱いたい場合、埋め込むか外部からロードするかですが、 処理の仕方は違いますが、取り込まれた画像の基本的な扱いは Bitmap オブジェクトです 1. [Bindable] 2. [Embed( "smile.png" )] 3. private var imgSmile:Class; まず、上記定義で imgSmile は、クラスとして定義されていますが、 これは、Bitmap クラスのサブクラスで、インスタンスを作成 すると、bitmapData プロパティに smile.png のデータがセットされます。 つまり、img:Bitmap = new imgSmile(); です。 また、loader:Loader = new Loader(); で作成された loader オブジェクトは content プロパティを持ちますが、これは Bitmap オブジェクトです。 つまり、以下の実行が可能です Bitmap(img.content).bitmapData = Bitmap(loader.content).bitmapData; Bitmap オブジェクトは、実体としての BitmapData オブジェクトの容器であり、 別のBitmap オブジェクトが、同じ BitmapData オブジェクトを参照する事もできます。 imgSmile の 新しいインスタンスはそれぞれ別々の BitmapData オブジェクト を持ちます。BitmapData.clone() で複製も可能で、廃棄は BitmapData で dispose します。 Image オブジェクトの プロパティである source プロパティや、 WindowedApplication の titleIcon プロパティは特殊なプロパティで、 Flex の仕様の元、変換可能な記述を自動的に Bitmap オブジェクトに変換 してくれます 01. // ********************************************************* 02. // 単純な Image Class の処理 03. // ********************************************************* 04. public function Action2(): void { 05. 06. // img2.addChild( smile ); 07. // img2.source = "http://localhost/php/smile.png"; 08. // img2.source = "c:\\tmp\\smile.png"; 09. // img2.source = "smile.png"; 10. // img2.source = smile; 11. // img2.source = imgSmile; 12. Bitmap(img2.content).bitmapData = smile.bitmapData; 13. 14. } 上記の 7 つの処理は同じ結果になります。 ( addChild は、見た目に関して同じ ) また、Sprite オブジェクトより継承された表示オブジェクトには、 graphics プロパティがあり、これを使用して、BitmapData オブジェクトを 描画する事も可能です。 ※ 複数の別々の画像を重ねるのには向いていません、 ※ そのような場合は、別々のオブジェクトを作成してコンテナに追加します 1. // Image オブジェクトに対する描画 2. // ( 対象が大きければ繰り返し描画されます ) 3. img.graphics.beginBitmapFill( smile.bitmapData ); 4. img.graphics.drawRect( 0 , 0 , smile.width, smile.height); 5. img.graphics.endFill(); 特殊な描画としては、Flash としてのルートとなる描画エリアである stage に対しては、Bitmap オブジェクトを直接追加可能です。 この場合はこのページの先頭の画像のように、タイトルエリアを無視した 表示が可能になります。また、逆に言えば、 stage に対しては、 mx.* コントロールを追加しても表示される事はありません。 ( Bitmap オブジェクトを追加する必要があります ) テスト用のソースコード001. <?xml version= "1.0" encoding= "utf-8" ?> 002. <mx:WindowedApplication 003. xmlns:mx= "http://www.adobe.com/2006/mxml" 004. initialize= "initData();" 005. 006. usePreloader= "true" 007. 008. headerHeight= "80" 009. cornerRadius= "20" 010. titleTextStyleName= "titleStyle" 011. layout= "absolute" 012. > 013. 014. <mx:Style> 015. WindowedApplication { 016. backgroundGradientColors: 0 , 9044009 ; 017. } 018. .titleStyle { 019. fontSize: 12 ; 020. } 021. </mx:Style> 022. 023. <mx:Script> 024. <![CDATA[ 025. 026. [Bindable] 027. [Embed( "smile.png" )] 028. private var imgSmile:Class; 029. 030. private var loader:Loader = new Loader(); 031. private var smile:Bitmap = new imgSmile(); 032. 033. // ********************************************************* 034. // アプリケーションの初期化 035. // ********************************************************* 036. public function initData(): void { 037. 038. img.source = new Bitmap(); 039. img2.source = new Bitmap(); 040. 041. } 042. 043. // ********************************************************* 044. // Loader による画像取得 045. // ********************************************************* 046. public function Action1(): void { 047. 048. // 読み込み完了イベントを登録 049. loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete); 050. 051. // 読み込み 052. loader.load( new URLRequest( "http://localhost/php/smile.png" )); 053. // loader.load(new URLRequest("smile.png")); 054. // loader.load(new URLRequest("c:\\tmp\\smile.png")); 055. 056. } 057. 058. // ********************************************************* 059. // 読み込み完了イベント 060. // ********************************************************* 061. private function loadComplete(e:Event): void { 062. 063. // target は、LoaderInfo 064. 065. // img.addChild( e.target.loader ); 066. // img.addChild( loader.content ); 067. // img.addChild( loader ); 068. // img.source = e.target.content; 069. // img.source = loader.content; 070. // img.source = loader; 071. // Bitmap(img.content).bitmapData = e.target.content.bitmapData; 072. Bitmap(img.content).bitmapData = Bitmap(loader.content).bitmapData; 073. 074. } 075. 076. // ********************************************************* 077. // 単純な Image Class の処理 078. // ********************************************************* 079. public function Action2(): void { 080. 081. // img2.addChild( smile ); 082. // img2.source = "http://localhost/php/smile.png"; 083. // img2.source = "c:\\tmp\\smile.png"; 084. // img2.source = "smile.png"; 085. // img2.source = smile; 086. // img2.source = imgSmile; 087. Bitmap(img2.content).bitmapData = smile.bitmapData; 088. 089. } 090. 091. 092. // ********************************************************* 093. // 少し特殊な画像描画 094. // ********************************************************* 095. public function Action3(): void { 096. 097. // mx を無視した flash 全体への描画 098. stage.addChild( smile ); 099. 100. // Image Class の source プロパティと同じ 101. titleIcon = imgSmile; 102. 103. // mx ルートコンテナへの追加 104. // var mxImg:Image = new Image(); 105. // mxImg.source = "smile.png"; 106. // addChild(mxImg); 107. 108. // Image オブジェクトに対する描画 109. // ( 対象が大きければ繰り返し描画されます ) 110. img.graphics.beginBitmapFill( smile.bitmapData ); 111. img.graphics.drawRect( 0 , 0 , smile.width, smile.height); 112. img.graphics.endFill(); 113. 114. 115. } 116. 117. ]]> 118. </mx:Script> 119. 120. <mx:Image 121. id= "img" 122. x= "0" 123. y= "0" 124. /> 125. <mx:Image 126. id= "img2" 127. x= "100" 128. y= "0" 129. /> 130. 131. <mx:Button 132. x= "150" 133. y= "150" 134. label= "画像テスト1" 135. click= "Action1();" 136. /> 137. 138. <mx:Button 139. x= "150" 140. y= "200" 141. label= "画像テスト2" 142. click= "Action2();" 143. /> 144. 145. <mx:Button 146. x= "150" 147. y= "250" 148. label= "画像テスト3" 149. click= "Action3();" 150. /> 151. 152. </mx:WindowedApplication> |