actionscript 3.0初心者がbitmap処理で問題が発生しています

このQ&Aのポイント
  • actionscript 3.0初心者ですが、bitmap処理について調べています。
  • 現在、ライブラリーにあるpng画像をbitmapで読み込み、画像に変化を起こそうとしていますがうまくいきません。
  • エラーの原因がわからないので、助けが必要です。
回答を見る
  • ベストアンサー

actionscript 3.0 初心者です

現在bitmap処理について調べています。 以下の記述に置いて、ライブラリーにあるpng画像をbitmapで読み込みました。 この画像はswfファイルに埋め込み済みでクラスをtokyo1としています。 続いて、これを.draw()を使って画像に変化を起こそうとしましたが、 こちらはうまく行きませんでした。 どこかおかしいのでしょうか?お心当たりございましたら是非よろしくお願いします。 import flash.display.BitmapData; import flash.display.Bitmap; import flash.geom.Matrix; import flash.geom.ColorTransform; var rectX:Number=40; var rectY:Number=30; var rectwidth:Number=20; var rectheight:Number=20; var rect1:Rectangle=new Rectangle(rectX,rectY,rectwidth,rectheight); var btm_data:BitmapData=new tokyo1(); var btm_obj:Bitmap=new Bitmap(btm_data,PixelSnapping.AUTO,false); var matrix:Matrix=new Matrix(2,0,0,3,0,0); var color:ColorTransform=new ColorTransform(1,1,1,1,0,0,0,0); btm_data.draw(stage,matrix,color,BlendMode.NORMAL,rect1,true); addChild(btm_obj);

  • Flash
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

ご質問にある次の行ですが var btm_data:BitmapData=new tokyo1(); 例えば 0,0 など適当な引数を2つは入れないとエラーになりませんか?  ↓修正例↓ var btm_data:BitmapData=new tokyo1(0,0); 以上のように1ヶ所のみを修正すれば 一応スクリプトは正常に動作しているようですが。。。 だた,気になるのが次の行です。 btm_data.draw(stage,matrix,color,BlendMode.NORMAL,rect1,true); この draw() の第一引数に stage を入れていらしゃいますが 透明でない何かを ステージ上の左上のコーナーの辺りに描いたり置いたりしていらっしゃいますか? ステージ上の左上のコーナーの辺りに 何かを描いたり置いたりしているのでしたら それが btm_data 上に出てくると思いますが 何も描いたり置いたりしていないのしたら btm_data 上には何も出て来ません。 例えば私はステージ上に 下の図の左側のような放射状(同心円状)の塗りを描きました。 そしてムービープレビューすると PNG画像「tokyo1」(グレーの画像)に 放射状(同心円状)の塗りの一部が拡大されたものが出てきました。 特に問題なしに見えます。  

naonao321
質問者

お礼

ご回答ありがとうございます。 なるほどお鋭いです。 こちらではTokyo1以外の画像を置いていませんでした。 実験結果はこちらでも同様のものになりました。 毎度の詳細なご説明ありがとうございます。 またよろしくお願い致します。

関連するQ&A

  • 下記二つのbitmapDataに関するサンプルソースですが、なぜ問題な

    下記二つのbitmapDataに関するサンプルソースですが、なぜ問題なくaddChildされるのでしょうか? 普通に考えると上から下へパブリッシュされていると思っていたのですが、 厳密には違うということでしょうか? ---------------------------------- var txt:TextField = new TextField(); txt.text = 'あああ'; var bitmapdata = new BitmapData(txt.width,txt.height); var bmp:Bitmap = new Bitmap(bitmapdata); bitmapdata.draw(txt); addChild(bmp); ---------------------------------- bitmapdata.draw(txt); の記述位置をaddChild()の下に記述してもエラーが出ること無く実行されます。 しかし、 bitmapdata.draw(txt); の記述がなければエラーが出ませんが、描画されません。 ---------------------------------- var txt:TextField = new TextField(); txt.text = 'あああ'; var bitmapdata = new BitmapData(txt.width,txt.height); var bmp:Bitmap = new Bitmap(bitmapdata); addChild(bmp); bitmapdata.draw(txt); ---------------------------------- 単純にaddChild()した後に、draw()することができるということでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • 雑誌のスクリプトの意味がわかりせん2

    スクリプトと解らない点を載せさせていただきました。もしよければ教えて下さい。800字を超えないためにギュウギュウで記述しましたのでかなりややこしくなっていますが、お願いいたします。 ●MCの写りこみを作成するスクリプトです。引数に3つのMCを渡しています。 CreateReflect = function (OriginalTG, DisplayTG, MaskTG) { var OriginalBMP = new flash.display.BitmapData(OriginalTG._width, OriginalTG._height, true, 0); var DisplayBMP = OriginalBMP.clone(); //OriginalBMPと全く同じオブジェクトを新しくDisplayBMPとして作成? var MaskBMP = new flash.display.BitmapData(MaskTG._width, MaskTG._height, true, 0); OriginalBMP.draw(OriginalTG); MaskBMP.draw(MaskTG); DisplayTG.attachBitmap(DisplayBMP, 1); //ここが理解できなかったとこなのですが、これは完全に透明なビットマップを割り当てているって事ではないのでしょうか? var DisplayRectangle = new flash.geom.Rectangle(0, 0, MaskTG._width, MaskTG._height); var OffSetPoint = new flash.geom.Point(0, 0); var BasePoint = new flash.geom.Point(0, 0); //マスクを適用する際のサイズとxとyの値を設定するために定義してる? DisplayBMP.copyPixels(OriginalBMP, DisplayRectangle, OffSetPoint, MaskBMP, BasePoint, true); //これはビットマップオブジェクトのDsplayBMPにOriginalBMPをアルファーをかけた上体でコピーするって事だと思うのですが、この後にDisplayBMPをattachする必要はないのでしょうか?上記の方でDisplayTG.attachBitmap(DisplayBMP, 1);を定義してるから?とここらへんで解らなくなってしまいました。 //attachBitmapをした後にattach元のビットマップを変更すると自動的にattachされたムービークリップに反映されるという事でしょうか?};

    • ベストアンサー
    • Flash
  • actionscript 3.0 初心者です

    以下の3つの質問にご回答いただければ幸いです。 以下の参考にさせていただいている、スクリプトにて 1、random関数の()の後に来る数字はどのような範囲を意味しているのでしょうか? 2、sList[i].vx = Math.random() -0.5;という記述について、これはあるオブジェクトの 落下(進行)の速度を示しているらしいのですが、その手前の記述で、 private var vx:Number = 0;という記述があります。自分で定義したものをプロパティーとして使い事はできるのでしょうか?(もしくわこのvxはarrayのプロパティとして使われていると考えてよろしいのしょうか?) 3、なぜ速度をわざわざ配列で記入する必要があるのでしょうか? 多岐にわたっておりますが、是非よろしくお願い致します。 package{ import flash.display.Sprite; import flash.display.MovieClip; import flash.geom.Matrix; import flash.events.Event; import flash.filters.BlurFilter; public class Main extends Sprite { private var snow:Ball;     private var num:int = 200; private var sList:Array = []; private var vx:Number = 0; public function Main(){ for(var i:int = 0; i < num; i++){ var snow:Ball = new Ball(2,0xaaffff) //初期位値 snow.x = Math.random() * stage.stageWidth; snow.y = Math.random() * stage.stageHeight; //大きさを生成順に小さく snow.scaleX = snow.scaleY = 1 / (0.02 * i + 1); //配置して配列に入れる addChild(snow); sList.push(snow); //それぞれのx方向の速度設定 sList[i].vx = Math.random() -0.5; } addEventListener(Event.ENTER_FRAME,go1); } private function go1(evt:Event):void{ for(var i = 0; i < num; i++){ //x方向とy方向の動き設定(奥のものほど遅くなる) sList[i].x += sList[i].vx / (0.02 * i + 1); sList[i].y += 4 / (0.02 * i + 1); //ステージ外(下)に出たら移動 if(sList[i].y > 400){ sList[i].x = Math.random() * stage.stageWidth; sList[i].y = 0; } } } } }

    • ベストアンサー
    • Flash
  • アクションスクリプトを簡素化したいです。

    myMovieClipというムービークリップのカラーをmy_btn01、my_btn02、my_btn03という3つのボタンで 変化させるシミュレーターを作っています。下に書いたようにすれば動くのですが共通する文言が 多いのですっきりと簡素化したいです。実際はボタンが16個あり、色を変えるパーツも20くらいある のでファイルサイズも考慮して少しでも簡素化したいです。基礎的な質問で申し訳ないですが何卒 ご指導宜しくお願いいたします。 //以下アクションスクリプト タイムラインにべた書きしています(これもクラス?とかにできればと。) import flash.geom.ColorTransform; import flash.geom.Transform; my_btn01.addEventListener( MouseEvent.CLICK , onClick01 ); function onClick01( event:MouseEvent ) { var trans:Transform = new Transform(myMovieClip); var colorTrans:ColorTransform = new ColorTransform(1,1,1,1,0,0,0,0); colorTrans.redOffset = 250; colorTrans.greenOffset = 30; colorTrans.blueOffset = 0; trans.colorTransform = colorTrans; } my_btn02.addEventListener( MouseEvent.CLICK , onClick02 ); function onClick02( event:MouseEvent ) { var trans:Transform = new Transform(myMovieClip); var colorTrans:ColorTransform = new ColorTransform(1.15,1.05,0.85,1,0,0,0,0); colorTrans.redOffset = 244; colorTrans.greenOffset = 60; colorTrans.blueOffset = -178; trans.colorTransform = colorTrans; } my_btn03.addEventListener( MouseEvent.CLICK , onClick03 ); function onClick03( event:MouseEvent ) { var trans:Transform = new Transform(myMovieClip); var colorTrans:ColorTransform = new ColorTransform(1,2,1,1,0,0,0,0); colorTrans.redOffset = 0; colorTrans.greenOffset = 0; colorTrans.blueOffset = 0; trans.colorTransform = colorTrans; }

    • ベストアンサー
    • Flash
  • as3 ムービークリップにビットマップデータを挿入するクラスがうまくい

    as3 ムービークリップにビットマップデータを挿入するクラスがうまくいかない 上記のとおりなんですが、 前提として ■ライブラリにjpgを一枚読み込んで、Photoというクラス名でリンケージしてあります。 ■ステージにmcというムービークリップを配置しています。 mcにビットマップ化したjpgをaddchildしたかったので、 メインフレームに下記を書きました。 -------------------------------------------------------- var name_str:String = "Photo"; var myClass:Class = Class(getDefinitionByName(name_str)); var bmd:BitmapData = new myClass(0, 0); var bm:Bitmap = new Bitmap(bmd); bm.pixelSnapping = PixelSnapping.ALWAYS; bm.smoothing = true; mc.addChild(bm); -------------------------------------------------------- ※今後動的に生成するのでクラス名は変数にしています。 これは問題なく行きました。 上記を外部クラス化したかったので、 下記のようにしました。 ■PhotoClass ---------------------------------------------------------------------- package { import flash.display.MovieClip; import flash.events.Event; import flash.display.Bitmap; import flash.display.BitmapData; import flash.utils.getDefinitionByName; import flash.display.PixelSnapping; public class PhotoClass extends Bitmap { private var myClass:Class;//クラス名 private var bmd:BitmapData; private var bm:Bitmap; //コンストラクタ public function PhotoClass(_name:String) { myClass = Class(getDefinitionByName(_name)); bmd = new myClass(0, 0); bm = new Bitmap(bmd); bm.pixelSnapping = PixelSnapping.ALWAYS; bm.smoothing = true; init(); } public function init():Bitmap { return bm; } } } ---------------------------------------------------------------------- ■メインフレーム var photoAdd:Bitmap = new PhotoClass("Photo"); mc.addChild(photoAdd); これがうまくいきません。 エラーはないのですが、ちゃんとmcに画像が読み込まれません。。。。 ご教授いただければと思います!

    • ベストアンサー
    • Flash
  • 多次元配列のデータがうまく吸い出せません。

    こちらでご指導仰ぎながらアクションスクリプトの簡素化を進めています。いい感じのところまできていますが最終局面で行き詰っています。 myMovieClipというムービークリップと3つのボタンmy_btn1、my_btn2、my_btn3を配置しそれぞれのボタンをクリックしたらムービークリップの色が変わるという物を作っています。エラーは出ないのですが全てのボタンで同じ色(指定していない)に変化します。なにがおかしいのでしょうか? 本来なら colorTransDic[my_btn1] = new ColorTransform(1,1,1,1,122,15,122,0); とするところを簡素化したく配列に色データを詰め込み colorTransDic[this["my_btn" + i]] = new ColorTransform(colors[i - 1]); としましたがこれが間違っているようです。 お手数ですがご指導宜しくお願いいたします。 スクリプトは以下の通りです。 import flash.geom.ColorTransform; import flash.geom.Transform; var trans:Transform = new Transform(myMovieClip); var colorTransDic:Dictionary = new Dictionary(); var colors:Array = [[1,1,1,1,255,255,255,0],[1,1,1,1,122,122,122,0],[1,1,1,1,0,0,0,0]]; for (var i:int = 1; i<=3; i++) { colorTransDic[this["my_btn" + i]] = new ColorTransform(colors[i - 1]); this["my_btn" + i].addEventListener( MouseEvent.CLICK , onClick ); } function onClick( event:MouseEvent ) { trans.colorTransform = colorTransDic[event.currentTarget]; }

    • ベストアンサー
    • Flash
  • FlashにWebカメラの画像を表示して、スナップショットを取りたいと

    FlashにWebカメラの画像を表示して、スナップショットを取りたいと思っています。 カメラの表示はできたのですが、どうしてもスナップができません。 素人ながらASを使ってやってみました。 もしどなたかお分かりになられる方がいらっしゃったら教えてください。 どうぞよろしくお願いいたします。 camera_obj = Camera.get(); vi.attachVideo( camera_obj ); mystop.onRelease = function () { import flash.display.BitmapData myBitmap = new BitmapData(vi._width,vi._height,true,0x00FFFFFF) myBitmap.draw(vi) }

  • actionscript3.0 初心者です。

    ある円の半径を、マウスカーソルのX座標に対応させて変化させよう思い、以下の記述を行ったのですが、プレビューにて全く何も表示されません。お心当たりあれば是非教えていただきたいです。やはり、半径の値をiの形で代入させるようにしたことが無理矢理だったのでしょうか。よろしくお願いします。 package { import flash.display.Sprite; import flash.events.Event; public class boin extends Sprite {  public function boin() { var _maru:Sprite = new Sprite(); var i:Number = new Number();    _maru.graphics.beginFill(0xFF0000);    _maru.graphics.drawCircle(0,0,i);    _maru.graphics.endFill();    _maru.x = 100;    _maru.y = 200;    addChild(_maru);  addEventListener(Event.ENTER_FRAME,boo);  {   function boo(event:Event):void    {     _maru.x = mouseX;     i = mouseX;     }   } } } } ASファイル(boin)

    • ベストアンサー
    • Flash
  • Rectangle(Bitmap)の幅と高さ

     以下、VBの記法で書きます。Windows10,.NETのGDI+を使用しています。  今まであまり気にしていなかったのですが、今回LockBitsとUnLockBitsを使用してBitmapのpixel情報をCopyするコードを書く事になり、急に気になり出しました。  LockBitsを使用する際、Rectangle構造体で読みだすBitmapの範囲を指定します。Rectangleが指定する実際のpixelですが、   (Rectangle.Left + Rectangle.Width - 1)×(Rectangle.Top + Rectangle.Height - 1) の範囲かな?、と思いました。例えば、   Dim Rect as Rectangle = New Rectangle(1, 1, 0, 0) などとやると、Rectは空になるし、(1, 1)一点を表すRectangleなら、   Dim Rect as Rectangle = New Rectangle(1, 1, 1, 1) なので・・・。  BitmapのWidthとHeightについても同様かと思います。実際の動作には余り影響しないのですが、気になったもので・・・。

  • buttonの色を変えたい

    お世話になります。 Flash CS5 ActionScript 3.0 で作成しております。 mybuttonというカスタムクラスを作成して、toggle=trueの時に、 selectedの状態がtrue,falseの時で、色を変えたいと思い 下記のソースを作りました。 しかしながら、下記のソースでは、 ステージにmybuttonを置く→(ソースではなく、画面上から)プロパティを選択してselected=trueにした場合、起動時に※(1)を通らずに、※(2)を通ってしまい うまくいきません。 一度起動した後は、きちんとselected=true:(1) selected=false:(2)となり、意図した 動きとなります。 目的としては、(ソースではなく、画面上の)プロパティでselected=trueで起動した 場合に(1)を通るようにしたいのですがどうしたらよいでしょうか? ※ソースでselected=trueを書くのは×です。 すみませんがよろしくお願いします。 ----------------myButton.as-------------------- package {   import fl.controls.Button; import fl.controls.*; import flash.events.*; import flash.geom.*; import flash.text.*; public class myButton extends Button { var color0 : ColorTransform = new ColorTransform;OFFの色 var colorON : ColorTransform = new ColorTransform(0,0,0,0.5,1,1,1,0);ONの色 //fontとサイズの変更 var buttonLabelFormat:TextFormat=new TextFormat(); //コンストラクタ public function myButton() { buttonLabelFormat.font = "MSゴシック"; buttonLabelFormat.size =8; addEventListener(Event.CHANGE,myButton_Change); Change(); } public function myButton_Change(e:Event):void{ Change(); } public function Change():void{ if(selected) { transform.colorTransform = colorON;※(1) } else { transform.colorTransform = color0;※(2) } } } }

    • ベストアンサー
    • Flash

専門家に質問してみよう