|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Oct 2013
Сообщений: 5
|
маска, BitmapData, ColorMatrixFilter
Здравствуйте. У меня следующий вопрос:
Имеются два файла - один черно-белый, формат png. Другой - цветной фон, формат jpg. Необходимо собрать эти файлы чтобы получился один нормальный рисунок. Файл с PNG не имеет прозрачных участков. Есть намек что нужно каким-то образом для этого использовать colorMatrixFilter и BitmapData.applyFilter. Кто-нибудь сталкивался с подобным? Есть идеи как реализовать подобное? |
|
|||||
А тот чёрно-белый пнг — маска для цветного, я правильно понял?
Если да, то делается это тривиально
__________________
cats are supreme beings |
|
|||||
Регистрация: Mar 2013
Сообщений: 290
|
А сделать это в фотошопе, получить готовый файл, и потом загрузить его в библиотеку, такой вариант почему не устраивает?
|
|
|||||
Регистрация: Oct 2013
Сообщений: 5
|
Цитата:
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; } } } } к сообщению прикреплены примеры исходных изображений. |
|
|||||
Регистрация: Oct 2013
Сообщений: 5
|
слишком большое количество изображений не позволяет делать это вручную.
|
|
|||||
А какое примерно должно получиться? Синий крест на чёрном фоне?
__________________
cats are supreme beings |
|
|||||
Регистрация: Oct 2013
Сообщений: 5
|
просто синий крест
|
|
|||||
Вот так?
тогда код: 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);//создаем маску } } }
__________________
cats are supreme beings Последний раз редактировалось am_devcorp; 02.10.2013 в 14:49. |
|
|||||
Регистрация: Oct 2013
Сообщений: 5
|
|
Часовой пояс GMT +4, время: 03:55. |
|
« Предыдущая тема | Следующая тема » |
|
|