私はこれをFlashとopenFrameworksで試しましたが、両方で同じ問題がありました...
何千もの画像で構成されたキャンバスを作成し、最終的な画像をjpgとしてエクスポートしています。
6メガピクセルのjpgなどでエクスポートしたいのですが、画面の解像度がそれよりはるかに低く、画面サイズでしかエクスポートできません。
これを回避する方法はありますか?
ありがとう....
私はこれをFlashとopenFrameworksで試しましたが、両方で同じ問題がありました...
何千もの画像で構成されたキャンバスを作成し、最終的な画像をjpgとしてエクスポートしています。
6メガピクセルのjpgなどでエクスポートしたいのですが、画面の解像度がそれよりはるかに低く、画面サイズでしかエクスポートできません。
これを回避する方法はありますか?
ありがとう....
簡単だ。目的のサイズのBitmapDataオブジェクトを作成し、そのビットマップデータ上に必要な方法で必要なものをすべて描画してから、そのビットマップデータをJPEGEncoderとpwnでエンコードします。例:
public function saveAsPNG():void {
if (frameset[0] == null) return;
var fr:FileReference = new FileReference();
var totalHeight:int = Math.ceil(Math.sqrt(totalFrames));
var iter:int = totalHeight;
if (iter * (iter - 1) >= totalFrames) totalHeight--;
var totalWidth:int = iter * baseRect.width;
totalHeight *= baseRect.height;
var dp:Point = new Point();
var bigBitmap:BitmapData = new BitmapData(totalWidth, totalHeight, true, 0);
for (var i:int = 0; i < totalFrames; i++) {
var j:int = Math.floor(i / iter);
var k:int = i - j * iter;
dp.x = k * baseRect.width;
dp.y = j * baseRect.height;
bigBitmap.copyPixels(frameset[i], baseRect, dp); // semi-square bitmap as a result
}
fr.save(PNGEncoder.encode(bigBitmap));
}
これは、「frameset」という名前の一連のBitmapDataを取得し、「bigBitmap」という名前の単一のBitmapDataにスラップします。これは、PNGとしてエクスポートされます。詳細な透過性が必要なため、この形式を使用します。ソースオブジェクトはBitmapDataタイプであるため、BitmapData.draw()
関係はありませんが、BitmapData.copyPixels()
代わりに関係します。