Показать сообщение отдельно
Старый 09.04.2010, 00:29
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 6  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Код AS3:
var map:BitmapData = new BitmapData(800, 800);
map.draw(new PuzzleMap()); // PuzzleMap — мувиклип, с заливками нескольких цветов. Аля карта с пазлами.
 
// инстанциируем исходное изображение. Какое-то изображение, кусок из которого будет вырезаться
image = new Art2(800, 800);
 
// цвет одной из заливок в PuzzleMap            
var currentPuzzleColor:Number = 0xFF000000;
 
// границы этого цвета           
var puzzleBounds:Rectangle = map.getColorBoundsRect(0xFFFFFFFF, currentPuzzleColor, true);
 
// создаем битмапдату по размерам цвета
var croppedImage:BitmapData = new BitmapData(puzzleBounds.width, puzzleBounds.height, true, 0xFFFFFFFF);
 
// копируем кусок исходного изображения в границах цвета
croppedImage.copyPixels(image, puzzleBounds, new Point(0, 0), image, new Point(0, 0), true);
 
// стираем все пиксели соответствующие пикселям map, которые не равны текущему цвету currentPuzzleColor
croppedImage.threshold(map, puzzleBounds, 
new Point(0, 0), "!=", currentPuzzleColor, 0x00000000, 0xFFFFFFFF);
 
var puzzle:Puzzle = new Puzzle(croppedImage);
puzzle.x = 100;
puzzle.y = 100;
root.addChild(puzzle);
Код в классе Puzzle
Код AS3:
public function Puzzle(bitmapData:BitmapData)
{
    //TODO: implement function
    super();
 
    this.bitmapData = bitmapData;
    init();
}
 
private var bitmap:Bitmap;
private var bitmapData:BitmapData;
 
private function init():void
{
    //cacheAsBitmap = true
    var bmd:BitmapData = bitmapData.clone();
    //bmd.applyFilter(bmd, bitmapData.rect, new Point(0, 0), new BlurFilter(4, 4, 1));
    //bmd.draw(bitmapData);
   // bmd.applyFilter(bmd, bmd.rect, new Point(0, 0), new BevelFilter());
    bitmap = new Bitmap(bmd, PixelSnapping.AUTO, true); // что с тру, что без тру один черт
 
    bitmap.filters = [ new BevelFilter(4, 45, 0xFFFFFF, 1, 0x000000, 1, 4, 4, 1, 1, "inner", false ) ];
 
    //bitmap.smoothing = true
    addChild(bitmap);
}
upd:
Такой вариант придумал:
Код AS3:
 
        private function init():void
        {
            var bmd:BitmapData = bitmapData.clone();
            var bounds:BitmapData = bitmapData.clone();
            bounds.applyFilter(bounds, bitmapData.rect, new Point(0, 0), new BlurFilter());
            bounds.applyFilter(bounds, bitmapData.rect, new Point(0, 0), 
                new BevelFilter(4, 45, 0xFFFFFF, 1, 0x000000, 1, 4, 4, 1, 1, "inner", true ));
            bmd.draw(bounds);
 
            bitmap = new Bitmap(bmd);
            addChild(bitmap);
        }
Но не покидает чувство, что через одно место это всё.


Последний раз редактировалось udaaff; 09.04.2010 в 00:58.