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;
}
}
}
