преобразовать цветное изображение в один цвет as3 - PullRequest
1 голос
/ 10 июня 2010

Как конвертировать цветное изображение в один Color as3?

Ответы [ 2 ]

1 голос
/ 08 марта 2011

Я думаю, что вы должны иметь в виду, как в следующем примере: Multi color image В этом примере я взял изображение и сделал его оттенками серого (верхний левый). В верхнем правом углу то же самое изображение в оттенках серого, но затем с красным наложением и установил режим смешивания на Darken. Самен с синим и желтым. Чтобы сделать серое изображение во флэш-памяти, необходимо установить одинаковые значения для каналов Red Blue и Green. Вы можете сделать это легко в мгновение ока. Сначала у вас должен быть объект bitmapData с изображением в нем. Затем сделайте его в оттенках серого и, наконец, сделайте наложение и смешайте его вместе.

Чтобы получить растровые данные с изображением, вы можете следовать примеру @ Adobe Reference

Я создал пример класса (работает на примере @ adobe), который делает именно то, что я сказал выше:

    package {
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Loader;
    import flash.display.Sprite;
    import flash.display.BitmapDataChannel;
    import flash.display.BlendMode;

    import flash.events.*;

    import flash.geom.Point;
    import flash.geom.Rectangle;

    import flash.net.URLRequest;

    [SWF(width='900', height='481', backgroundColor='#FFFFFF', frameRate='30')]
    public class BitmapExample extends Sprite {
        private var url:String = "test.jpg";
        private var fillColor:uint = 0xFF0000; //0xFF0000 = Red

        public function BitmapExample() {
            configureAssets();
        }

        private function configureAssets():void {
            var loader:Loader = new Loader();
            loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
            loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);

            var request:URLRequest = new URLRequest(url);
            loader.load(request);
        }

        private function completeHandler(event:Event):void {
            var loader:Loader = Loader(event.target.loader);
            var image:Bitmap = Bitmap(loader.content);
            var bitmapData:BitmapData = image.bitmapData.clone();

            //Now we have the bitmapData we can make it grayscale.
            //First lock the data so it shows no changes while we are doing the changes.
            bitmapData.lock();
            //We now copy the red channel to the blue and the green channel.
            bitmapData.copyChannel(bitmapData,bitmapData.rect,new Point(),BitmapDataChannel.RED,BitmapDataChannel.BLUE);
            bitmapData.copyChannel(bitmapData,bitmapData.rect,new Point(),BitmapDataChannel.RED,BitmapDataChannel.GREEN);
            //After the change we can unlock the bitmapData.
            bitmapData.unlock();


            //Create the overlay with the color set in the private var fillColor
            var overlay:Bitmap = this.makeOverlayBitMap(bitmapData.width, bitmapData.height, fillColor);
            //Set the blendMode to darken so it will will be just like the picture in the post.
            overlay.blendMode = BlendMode.DARKEN;

            //Add original to the stage
            image.x = 0;
            image.y = 0;
            addChild(image);

            //Add a copy next to it with the grayscale data
            var image2:Bitmap = new Bitmap(bitmapData);
            image2.x = image.width;
            image2.y = 0;
            addChild(image2);

            //Add the overlay to the stage at position of the grayscale
            overlay.x = image2.x;
            overlay.y = image2.y;
            addChild(overlay);

        }

        private function makeOverlayBitMap(theWidth:int, theHeight:int, theColor:uint):Bitmap{
            var bitmapData:BitmapData = new BitmapData(theWidth,theHeight,false, theColor);
            var returnBit:Bitmap = new Bitmap(bitmapData);
            return returnBit;
        }

        private function ioErrorHandler(event:IOErrorEvent):void {
            trace("Unable to load image: " + url);
        }
    }
}

Я надеюсь, что код и комментарии в нем сделают разговор. Если у вас есть вопросы, пожалуйста, задавайте их.

0 голосов
/ 15 февраля 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...