[AS]ArgumentError: Error #2015: BitmapData が無効です。エラーの謎
エラー:ArgumentError: Error #2015: BitmapData が無効です。
書籍:ActionScript3.0エラーアーカイブスによると、このエラーの主な原因は、
1.BitmapDataインスタンスの幅または高さが制限範囲(1~8191px)を超えている。
2.BitmapDataインスタンスのピクセルの総数が1677215pxを超えている。
ということらしいのですが、じゃあこれはどういうことだ?ということがおきたのでメモ。
//フレームアクション for(var i:uint = 0; i < 11; i++){//i < 10のときは実行可能 var bmd:BitmapData = new BitmapData(4000, 4000,true,0x11FFCC00); }
これを実行するの上記エラーになります。
(ちなみにfor文を10回繰り返しではエラーにならない。11回でエラーになる)
これは主な原因の1,2も満たしていないのでその他の原因ということでしょうか。
憶測として、BitmapDataは全体でのピクセル数の制限があるのでは?ということで、
上記の場合は、4000×4000×11 = 176000000ピクセルとなります。
このくらいが限界なのかと、ためしに、以下のように書き換えてみると同じようにエラー
(2000×8000×11 = 176000000 でピクセル総数は同じ)
for(var i:uint = 0; i < 11; i++){//i < 10のときは実行可能 var bmd:BitmapData = new BitmapData(2000, 8000,true,0x11FFCC00); }
うんうん、予想通り。
じゃあ、これもエラーだよねと、以下のようにすると、(1000×1000×176=176000000)
これは想定外にOK・・・
for(var i:uint = 0; i < 176; i++){//i<700くらいでやっとエラーになる。 var bmd:BitmapData = new BitmapData(1000, 1000,true,0x11FFCC00); }
繰り返し数を700回くらいにするとやっとエラーになります。
うーん、どういうことなんだろう。。。
これで現実的に困ったのはEnterFrameの処理でBitmapDataを生成しまくってたら、この現象になってしまったということ。
具体的には、BitmapData作って、BitmapにあててaddChildして、一定時間がたったら、そのBitmapをremoveChildして~の繰り返しをしてたのだけど、しばらく動かしているとこのエラーが発生。
一応解決策は、BitmapをremoveChildする際に、BitmapData.dispose()してあげれば大丈夫な感じだったけど、原因がはっきりしないのが、なんだか気持ち悪い。。。
※コメント欄で教えてもらいました。
Tweet
2 Comments
おーありがとー
ってことは、PCの個体差も起こりえるってことですかね。
そうなると具体的な数字は算出できないっぽいのかな。
とにかくdispose()を忘れずにやれ、ということですね。