未配置のスプライトシートを開いて、XMLファイルに従って配置し、PNGとして保存できるプログラムを自分で作成しています。未配置のシートをロードしてに配置BitmapData
し、特定のXMLファイルに従ってシートの各フレームを(を使用して)取得し、結果を順番に配列にBitmapData.copypixels()
追加します。Bitmap
次に、これらBitmap
をSprite
オブジェクトに追加して配置し、それに応じて新しい行を作成します。本質的に、私が最終的に得たのは、私が望むように配置されたSprite
封じ込めです。Bitmaps
ここで私が通常行うことはSprite
、BitmapData
usingBitmapData.draw()
に描画することです。これは機能し、次にそれをPNGとしてエンコードして保存します。これは、1つの場合を除いて、すべて機能します。時々、私は複数の整理されていないものから1つの配置されたスプライトシートを作成します。その結果、かなり大きなシートになります。ある場合、この結果のシートは非常に大きく、なぜかBitmapData
私が描きたいものはそれほど大きくないことを受け入れません。つまり、BitmapData
寸法がに等しい新しいを作成しますSprite
が、これを実行しようとすると、次のエラーが発生します。
ArgumentError: Error #2015: Invalid BitmapData.
私の知る限り、これBitmapData
は幅や高さが0の場合、または最大寸法を超えた場合にのみ発生します。Flash11とAIR3に制限がないという事実がなければ、後者だったと思います。
いずれにせよ、私はそれから抜け出す方法を見つけられなかったので、基本的にこれは私の質問です:これを別の方法で行う方法はありますか?たとえば、?Sprite
を作成せずにのピクセルデータを取得できBitmapData
ますか?または、BitmapData
画像と同じサイズを指定せずに、どういうわけかデータをに保存できますか?または、これを完全に行うための別の方法はありますか?
画像を2つに分割できることはBitmapData
わかっていますが、これに頼る前に別の方法があるかどうかを知りたいと思います。
ちなみに、重要なのは、FlashDevelopとFlex4SDKを使用して作成されたAdobeAIRアプリです。PNGEncoder2を使用して、保存する最終的なスプライトシートをエンコードしています。
BitmapData
編集:問題は、私のPCが必要なサイズのを単に処理できないことであるように思われることを発見しました。それを2つの別々のに分割しようとしましBitmapData
たが、残念ながら、2番目を作成するときBitmapData
に同じエラーが発生しました。したがって、その量のデータをBitmapData
一度にsとしてPCのメモリに含めることはできないように思われます。BitmapDatas
残念ながら、これは、彼がリンクしたPNGエンコーダーを使用して2つを1つのPNGにマージするg10のソリューションを使用することさえできないことを意味します。これまでの私の解決策は、画像の半分をに保存してBitmapData
エンコードし、次に残りdispose()
のBitmapData
半分を保存してエンコードすることでした。それから私は保存しますByteArrays
(エンコードの結果です)個別の画像として、外部プログラムを使用して1つに再構築できます。
だから今、私の質問は、「単一として取得できるか」ではなく、「これを単一のPNGとして保存できるか」ということBitmapData
です。