| nubideus |
12.07.2014 19:00 |
Вложений: 1
faraday,
Код AS3:
package
{
import flash.events.Event;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.GradientType;
import flash.display.Shape;
import flash.display.Sprite;
import flash.geom.Matrix;
import flash.geom.Point;
import flash.geom.Rectangle;
public class Main extends Sprite
{
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
var mask:Shape = new Shape();
var gradientMatrix:Matrix = new Matrix();
gradientMatrix.createGradientBox(100, 100);
mask.graphics.beginGradientFill(GradientType.LINEAR, [0xFFFFFF, 0xFFFFF], [0x00, 0xFF], [0, 255], gradientMatrix);
mask.graphics.drawCircle(50, 50, 40);
mask.graphics.drawRect(70, 70, 30, 30);
// векторная маска
var background:BitmapData = new BitmapData(800, 600, true, 0); // твоя карта
background.noise(0);
var maskRect:Rectangle = mask.getBounds(null);
var region:BitmapData = new BitmapData(maskRect.width, maskRect.height, true, 0); // результат
var maskBitmap:BitmapData = new BitmapData(maskRect.width, maskRect.height, true, 0); // растеризованная маска
maskBitmap.draw(mask, new Matrix(1, 0, 0, 1, -maskRect.x, -maskRect.y));
region.copyPixels(background, maskRect, new Point(), maskBitmap, new Point()); // copyPixels умеет маску
this.addChild(new Bitmap(region)).transform.matrix =
new Matrix(1, 0, 0, 1, maskRect.x, maskRect.y);
}
}
}
результат Вложение 31019
и что бы не множить растр делаешь
Код AS3:
var maskRect:Rectangle = mask.getBounds(null);
var region:BitmapData = new BitmapData(maskRect.width, maskRect.height, true, 0); // результат
region.draw(mask, new Matrix(1, 0, 0, 1, -maskRect.x, -maskRect.y));
region.copyPixels(background, maskRect, new Point(), region, new Point()); // copyPixels умеет маску
Цитата:
не понял про маску с режимом наложения без копирования икселей, можешь подробнее чем тут поможет бленд?
|
я што то не сообразил как во флеше это сделать просто. как я понял там нужны манипуляции с display list, а раз так, то проще применять векторную маску и растеризовывать результат. может кто подскажет как это сделать правильно? а так мне вариант с copyPixels видится быстрее display list'а, на глаз
faraday, хорошим тоном было бы приложить сюда карту и маски в виде swc
|