ActionScript3でベクタ→ビットマップ変換
最近、Flash/Flex/ActionScript3に注目しています。
しかし、どこから手をつけようかと思ってしまったり。
Box2DFlashAS3とか、Papervision3Dとか、いろいろと
面白そうなネタはころがっているけれど。
そこで、まずは手始めにミニ画像編集ツールでも作ってみようかと
思い立ちました。個人的に使いたいシーンがあるので。
でもって、その前段として
・AS3でベクターを描画
・それをビットマップに変換する
という機能の実現方法を調べて、実装。。。
というところで、予想外に詰まってしまいました。
元のベクター画像はくっきりと表示されているのに、(画像上段)
ビットマップ化すると画像がぼやけてしまうのですよ。(画像中段)
スムージングをOFFにしたら今度はジャギーだらけになるし。(画像下段)
なにかうまい解決策はあるんですかねぇ…
テストコードは下記のとおりです。
package { import flash.display.*; import flash.filters.ColorMatrixFilter; import flash.text.*; import flash.geom.*; import flash.events.*; public class BitmapTest extends Sprite{ public function BitmapTest() { var sp:Sprite = new Sprite(); sp.graphics.beginFill(0xFFFFFF); sp.graphics.drawRect(0, 0, 200, 100); sp.graphics.lineStyle(1, 0x0099FF); sp.graphics.moveTo(0, 0); sp.graphics.lineTo(200, 100); sp.graphics.endFill(); sp.graphics.beginFill(0xFF0000); sp.graphics.drawRect(20, 5, 1, 1); sp.graphics.endFill(); this.addChild(sp); var matrix:Matrix = new Matrix(); matrix.scale(1.0, 1.0); var myBitmapData:BitmapData = new BitmapData(200, 100); myBitmapData.draw(sp, matrix, null, null, null, true); //スムージングするとジャギーはましになるが、ぼやけた感じになる。 var bmp:Bitmap = new Bitmap(myBitmapData, PixelSnapping.AUTO, true); this.addChild(bmp); bmp.y = 100; //スムージングしないとジャギジャギ。 var bmp2:Bitmap = new Bitmap(myBitmapData, PixelSnapping.AUTO, false); this.addChild(bmp2); bmp2.y = 200; } } }