![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: Feb 2010
Сообщений: 102
|
Собственно програмное рисование для меня загадка. Загружаю я картинку, и надо мне програмно сделать для неё градиентную альфа маску. Собственно как для типа BitmapData сделать градиентную alpha заливку? Что бы например альфа уменьшалась от нижнего к верхнему.
Последний раз редактировалось metsys; 17.01.2011 в 22:19. |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Для BitmapData делаете copyChannel() в альфа-канал из другой битмапдаты с нужным градиентом или картой прозрачностей. Копировать можно и не альфа-канал, разумеется, но - В альфа)).
__________________
Reality.getBounds(this); |
|
|||||
|
Регистрация: Feb 2010
Сообщений: 102
|
сижу ломаю голову ничерта не получается, может кто то кусок кода привести хотя бы приблезительный?
вот загрузил я картинку, представил её в виде BitmapData а как мне на неё альфаканал наложить? Добавлено через 3 часа 12 минут и так вот до чего я дошёл import flash.display.Bitmap; import flash.display.BitmapData; var bmd:BitmapData = new BitmapData(80, 80, true, 0xFFCCCCCC); var al:Number=255/100; var onePercent:Number=bmd.height/100; for (var i:uint=0; i<80; i++) { for (var j:int=0; j<80; j++) { var gtPxl32:uint = bmd.getPixel32(j, i); var alphaValue:uint = gtPxl32 >> 24 & 0x11; trace(alphaValue.toString(16)); var q:int=(100-(i/onePercent)); var point:uint=gtPxl32;//-(q+0x10000000); bmd.setPixel32(j, i, point); } //trace(q); } var bm:Bitmap = new Bitmap(bmd); addChild(bm); Это единственное что я придумал как сделать альфа градиент к картинке. |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
//черная полоска будет под битмапом для теста прозрачности. var testShape:Shape = new Shape(); testShape.graphics.beginFill(0x000000); testShape.graphics.drawRect(30, 0, 20, 250) addChild(testShape); //рабочая битмапдата var bmd:BitmapData = new BitmapData(80, 80, true, 0xFFCCCCCC); var bm:Bitmap = new Bitmap(bmd); addChild(bm); //будущая карта прозрачности var alphaMap:BitmapData = bmd.clone(); //матрица для управления градиентом var matrix:Matrix = new Matrix(); matrix.createGradientBox(bmd.width, bmd.height, Math.PI / 2); //векторный градиент для отрисовки в карту прозрачности var gradient:Shape = new Shape(); gradient.graphics.beginGradientFill("linear", [0xFFFFFF, 0x000000], [1, 1], [0, 255], matrix); gradient.graphics.drawRect(0, 0, bmd.width, bmd.height); gradient.graphics.endFill(); // отрисовываем в карту alphaMap.draw(gradient); //копируем любой канал (т.к. все изменяются одинаково от 0 до 255) в альфаканал рабочей битмап bmd.copyChannel(alphaMap, new Rectangle(0, 0, bmd.width, bmd.height), new Point(), 2, 8);
__________________
Reality.getBounds(this); |
|
|||||
|
Регистрация: Feb 2010
Сообщений: 102
|
в общем сделал такой геморой, и он работает, но наверное выполнение сего кода огого какое большое. Что вы скажите по поводу этого? :
import flash.display.Bitmap; import flash.display.BitmapData; var bmd:BitmapData = new BitmapData(80, 80, true, 0xFF00FF00); var onePercent:Number=bmd.height/100; for (var i:uint=0; i<80; i++) { var q:uint=(2.55*(100-(i/onePercent))); for (var j:int=0; j<80; j++) { var gtPxl:uint = bmd.getPixel(j, i); var argb:uint=0; argb += (q<<24); argb += (gtPxl); bmd.setPixel32(j, i, argb); } trace(q); } var bm:Bitmap = new Bitmap(bmd); addChild(bm); |
![]() |
![]() |
Часовой пояс GMT +4, время: 10:19. |
|
|
« Предыдущая тема | Следующая тема » |
|
|