Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   маска, BitmapData, ColorMatrixFilter (http://www.flasher.ru/forum/showthread.php?t=203636)

imagi 02.10.2013 08:02

маска, BitmapData, ColorMatrixFilter
 
Здравствуйте. У меня следующий вопрос:
Имеются два файла - один черно-белый, формат png. Другой - цветной фон, формат jpg.
Необходимо собрать эти файлы чтобы получился один нормальный рисунок.
Файл с PNG не имеет прозрачных участков.
Есть намек что нужно каким-то образом для этого использовать colorMatrixFilter и BitmapData.applyFilter.
Кто-нибудь сталкивался с подобным? Есть идеи как реализовать подобное?

am_devcorp 02.10.2013 13:42

А тот чёрно-белый пнг — маска для цветного, я правильно понял?
Если да, то делается это тривиально

Fogflasher 02.10.2013 13:43

А сделать это в фотошопе, получить готовый файл, и потом загрузить его в библиотеку, такой вариант почему не устраивает?

imagi 02.10.2013 14:07

Вложений: 2
Цитата:

Сообщение от am_devcorp (Сообщение 1147462)
А тот чёрно-белый пнг — маска для цветного, я правильно понял?
Если да, то делается это тривиально

воспользовавшись приведенной вами ссылкой получил такой код:

Код AS3:

package
{
        import flash.display.Bitmap;
        import flash.display.BitmapData;
        import flash.display.Loader;
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.geom.Point;
        import flash.net.URLRequest;
 
        public class test_loader extends Sprite
        {
                public function test_loader()
                {
                        var loader1:Loader = new Loader();
                        var loader2:Loader = new Loader();
 
                        var myBag:BitmapData;
                        var myMask:BitmapData;
                        var composite:BitmapData;
 
                        loader1.load(new URLRequest("symbol.png"));
                        loader2.load(new URLRequest("symbol.jpg"));
 
                        loader1.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler1);
                        loader2.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler2);
 
                        function completeHandler1(event:Event):void {
                                myBag = Bitmap(loader1.contentLoaderInfo.content).bitmapData;
                                loader1 = null;
                                if(loader2 == null) compose();
                        }
 
                        function completeHandler2(event:Event):void {
                                myMask = Bitmap(loader2.contentLoaderInfo.content).bitmapData;
                                loader2 = null;
                                if(loader1 == null) compose();
                        }
 
                        function compose():void
                        {
                                var bmd1:BitmapData = myMask;
                                var bmd2:BitmapData = myBag;
 
                                bmd2.copyPixels(bmd1, bmd1.rect, new Point());
 
                                var bm1:Bitmap = new Bitmap(bmd1);
                                addChild(bm1);
                                var bm2:Bitmap = new Bitmap(bmd2);
                                addChild(bm2);
                                bm2.x = 150;
 
                        }
                }
        }
}

результат - цветное изображение просто скопировалось без каких-либо изменений.
к сообщению прикреплены примеры исходных изображений.

imagi 02.10.2013 14:14

Цитата:

Сообщение от Fogflasher (Сообщение 1147463)
А сделать это в фотошопе, получить готовый файл, и потом загрузить его в библиотеку, такой вариант почему не устраивает?

слишком большое количество изображений не позволяет делать это вручную.

am_devcorp 02.10.2013 14:22

А какое примерно должно получиться? Синий крест на чёрном фоне?

imagi 02.10.2013 14:28

Цитата:

Сообщение от am_devcorp (Сообщение 1147467)
А какое примерно должно получиться? Синий крест на чёрном фоне?

просто синий крест

am_devcorp 02.10.2013 14:36

Вложений: 1
Вот так?
Вложение 30050

тогда код:
Код AS3:

package {
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.BitmapDataChannel;
    import flash.display.Sprite;
    import flash.geom.Point;
        public class Main extends Sprite {
                [Embed(source="../bg.jpg")]    //картинка с синим прямоугольником
        private var cbg:Class;
        [Embed(source="../mask.png")]      // чёрно-белая картинка
        private var cmask:Class;
                public function Main():void {
            var bgd:BitmapData = new cbg().bitmapData; //получаем битмапдаты для картинок
            var maskd:BitmapData = new cmask().bitmapData;
            var res:BitmapData = new BitmapData(bgd.width, bgd.height); // создаём битмапдату с прозрачностью
            var b:Bitmap =new Bitmap(res);
            addChild(b);
            res.copyPixels(bgd, bgd.rect, new Point());//кладём в нее картинку фона
            res.copyChannel(maskd,maskd.rect,new Point(),BitmapDataChannel.RED,BitmapDataChannel.ALPHA);//создаем маску
                }
        }
}


imagi 02.10.2013 17:02

Цитата:

Сообщение от am_devcorp (Сообщение 1147470)
Вот так?

Похоже на то. Вы меня очень выручили!


Часовой пояс GMT +4, время: 02:47.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.