我在as3中構建繪圖應用程序,並且在畫筆上出現羽化或模糊邊緣問題。我使用bitmapData.draw()繪製筆刷,但在繪製速度緩慢時,邊緣周圍會看到較深的彩色區域。AS3 - bitmapData邊緣alpha透明問題
我試過很多選項,包括設置所有涉及到cacheAsBitmap = true的顯示對象,使用copyPixels而不是繪製,模糊濾鏡與漸變填充... 都無濟於事。
以下課程說明了我的問題。我已經包含了一個可以正常工作但沒有羽化邊緣的solid()方法,一個顯示相同問題的gradient()方法和一個filter()方法,並且onMove2使用copyPixels()並且同樣存在問題。
有什麼我可以做的,以解決這個問題?我真的不希望進入使用pixelbender着色器這麼簡單的東西...
package test {
import flash.display.*;
import flash.events.*;
import flash.filters.*;
import flash.geom.*;
public class Sucks extends Sprite {
private var brush:Sprite;
private var brushMap:BitmapData;
private var bmd:BitmapData;
private var radius:Number = 50;
private var color:uint = 0x990000;
public function Sucks() {
brush = new Sprite();
brushMap = new BitmapData(radius*2, radius*2, true, 0x00ffffff);
bmd = new BitmapData(stage.stageWidth, stage.stageHeight, true, 0x0);
var bmp:Bitmap = new Bitmap(bmd, PixelSnapping.ALWAYS, true);
addChild(bmp);
//solid();
gradient();
//filter();
brushMap.draw(brush, new Matrix(1, 0, 0, 1, radius, radius));
stage.addEventListener(Event.ENTER_FRAME, onMove);
}
private function solid():void {
brush.graphics.beginFill(color, 1);
brush.graphics.drawCircle(0, 0, radius);
brush.graphics.endFill();
}
private function gradient():void {
var m:Matrix = new Matrix();
m.createGradientBox(radius*2, radius*2, 0, -radius, -radius);
brush.graphics.beginGradientFill(GradientType.RADIAL, [color, color], [1, 0], [0, 250], m);
brush.graphics.drawCircle(0, 0, radius);
brush.graphics.endFill();
}
private function filter():void {
solid();
brush.filters = [new BlurFilter(8, 8, 3)];
}
private function onMove(e:Event):void {
var mp:Matrix = new Matrix();
mp.tx = mouseX;
mp.ty = mouseY;
bmd.draw(brush, mp);
//bmd.applyFilter(bmd, new Rectangle(0, 0, stage.stageWidth, stage.stageHeight), new Point(), new BlurFilter(2, 2, 3));
}
private function onMove2(e:Event):void {
bmd.copyPixels(brushMap, new Rectangle(0, 0, radius*2, radius*2), new Point(mouseX-radius, mouseY-radius), null, null, true);
}
}
}
這是一個好主意,但也有不規則形狀的刷子難以同心創建。看起來,任何模糊的形狀,當繪製到位圖時受到這些小文物 – 2011-03-06 15:28:22