Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Назначить прозрачный цвет для загруженной картинки (http://www.flasher.ru/forum/showthread.php?t=109002)

Utes 05.03.2008 14:12

Назначить прозрачный цвет для загруженной картинки
 
Интуитивно понимаю, что должно решаться как-то просто, но как - не пойму.
Есть картинка jpeg - рисунок на черном (0x000000) фоне. После runtime загрузки этой картинки в Image необходимо черный фон сделать прозрачным. Как?

Mr. Fixit 05.03.2008 14:19

BitmapData.
thresold.

Utes 05.03.2008 14:30

Пршу прощения, а можно конкретную строчку кода? Ведь не так много прошу.

Iv 05.03.2008 16:35

Код:

/**
 * @author ivan.dembicki@gmail.com
 */
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;
        import flash.system.ApplicationDomain;
        import flash.system.LoaderContext;               

        public class ThreshholdSample extends Sprite {

                public static function addTransparency(bmp : BitmapData, transparentColor : uint = 0) : BitmapData {
                        const newBmp:BitmapData = new BitmapData(bmp.width, bmp.height, true);
                        newBmp.draw(bmp);
                        newBmp.threshold(newBmp, bmp.rect, new Point(), "==", transparentColor);
                        return newBmp;
                }
               
                private static const PICTURE_URL : String = "dimpiax.png";
                private static const TRANSPARENT_COLOR : uint = 0xFFF1F1EF;
               
                private const pictureLoader : Loader = new Loader();

                public function ThreshholdSample() {
                        initInstance();
                }
               
                private function initInstance() : void {
                        addChild(pictureLoader);
                        pictureLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onPictureLoaded);
                        const request : URLRequest = new URLRequest(PICTURE_URL);
                        const context : LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain);
                        pictureLoader.load(request, context);
                }
               
                private function onPictureLoaded(event : Event) : void {
                        const picture : Bitmap = pictureLoader.content as Bitmap;
                        picture.bitmapData = addTransparency(picture.bitmapData, TRANSPARENT_COLOR);
                }
               
        }
}


Utes 05.03.2008 18:58

Положил Image, назвал img1, откорректировал соответственно для своей картинки PICTURE_URL и TRANSPARENT_COLOR, добавил пследней строчкой в onPictureLoaded следующее:

Application.application.img1.source = picture;
- не работает. :( Картинка выводится как есть, без прозрачности.

Iv 05.03.2008 19:33

Application.application.img1.source = picture;
- очень загадочна эта строка без остального кода.

Utes 05.03.2008 19:59

вот собственно и весь код:

Код:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
        creationComplete="Init()">
        <mx:Script>
                <![CDATA[
                        import src.ThreshholdSample;
                       
                        private function Init():void{
                                new ThreshholdSample();
                        }
                ]]>
        </mx:Script>
        <mx:Image id="img1" width="350" height="205"/>
</mx:Application>

ThreshholdSample:

Код:

// ActionScript file
package src{
        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;
        import flash.system.ApplicationDomain;
        import flash.system.LoaderContext;
        import mx.core.Application;             

        // @author ivan.dembicki@gmail.com
        public class ThreshholdSample extends Sprite {

                public static function addTransparency(bmp : BitmapData, transparentColor : uint = 0) : BitmapData {
                        var newBmp:BitmapData = new BitmapData(bmp.width, bmp.height, true);
                        newBmp.draw(bmp);
                        newBmp.threshold(newBmp, bmp.rect, new Point(40,40), "==", transparentColor);
                        return newBmp;
                }
               
                private static const PICTURE_URL : String = "fishka_light_default.jpg";//"dimpiax.png";
                private static const TRANSPARENT_COLOR : uint = 0x000000;
               
                private const pictureLoader : Loader = new Loader();

                public function ThreshholdSample() {
                        initInstance();
                }
               
                private function initInstance() : void {
                        addChild(pictureLoader);
                        pictureLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onPictureLoaded);
                        const request : URLRequest = new URLRequest(PICTURE_URL);
                        const context : LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain);
                        pictureLoader.load(request, context);
                }
               
                private function onPictureLoaded(event : Event) : void {
                        const picture : Bitmap = pictureLoader.content as Bitmap;
                        const bmp : BitmapData = picture.bitmapData;
                        picture.bitmapData = addTransparency(bmp, TRANSPARENT_COLOR);
                       
                        Application.application.img1.source = picture;
                       
                }
               
        }
}


Iv 05.03.2008 20:05

Попробуй пример без использования Flex - создай рядом с ThreshholdSample FLA файл и руту назначь класс ThreshholdSample.
Проверь, правильно ли ты указал цвет. Он должен содержать альфу.

Utes 05.03.2008 20:09

Вложений: 1
А вот и собственно картинка.

badun 05.03.2008 22:33

для такой картинки наверное просто blendMode = "screen" подойдет


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

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