0

私はこれをFlashとopenFrameworksで試しましたが、両方で同じ問題がありました...

何千もの画像で構成されたキャンバスを作成し、最終的な画像をjpgとしてエクスポートしています。

6メガピクセルのjpgなどでエクスポートしたいのですが、画面の解像度がそれよりはるかに低く、画面サイズでしかエクスポートできません。

これを回避する方法はありますか?

ありがとう....

4

1 に答える 1

2

簡単だ。目的のサイズの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()代わりに関係します。

于 2012-12-05T08:52:30.950 に答える