![]() |
|
||||||||||
|
|||||
|
Регистрация: Dec 2009
Сообщений: 64
|
Доброе время суток. Есть BitmapData в которой необходимо вырезать прозрачную область непрямоугольной формы. Подскажите плиз как это сделать?
Заранее спасибо. |
|
|||||
|
Lorem ipsum
|
при правильной подготовке непрямоугольной области поможет BitmapData#copyChannel()
__________________
Поймай яблоко 2! |
|
|||||
|
Регистрация: Dec 2009
Сообщений: 64
|
А как правильно подготовить?=)
|
|
|||||
|
Lorem ipsum
|
k0syak, ну я бы произвольную маску из любого вида отрисовал в непрозрачную ч/б BitmapData (черная маска на белом фоне) и потом влоб использовал бы copyChannel() с указанием в качестве канала-источника любого (R, G или B), а в качестве канала-приемника — alpha.
__________________
Поймай яблоко 2! |
|
|||||
|
Регистрация: Dec 2009
Сообщений: 64
|
При черно белой маске (черное - где нужна прозрачность) получается прозрачность там где и надо, но где на маске был белый на результирующем bitmap-е получается черный. Вот код:
var bitmapData : BitmapData; var r : Rectangle = newMovie.getRect(newMovie); bitmapData = new BitmapData(r.width, r.height, true, 0x00000000); var m : Matrix = new Matrix(); m.translate(-r.x, -r.y); m.scale(newMovie.scaleX, newMovie.scaleY); bitmapData.draw(newMovie, m); resultBitMap.bitmapData.copyChannel(bitmapData, new Rectangle(0,0,bitmapData.width,bitmapData.height), new Point(0,0), BitmapDataChannel.RED, BitmapDataChannel.ALPHA); |
|
|||||
|
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
подразумевалось, что исходная битмапдата будет непрозрачной.
А у вас прозрачная. Вот и получается что фон 0x00000000 превращается в 0xFF000000 после модификации альфа канала. И кстати, можно упростить это вот в такое выражение ![]() |
|
|||||
|
Lorem ipsum
|
а что такое resultBitMap?
__________________
Поймай яблоко 2! |
|
|||||
|
Регистрация: Dec 2009
Сообщений: 64
|
Изменил на следующее, только ничего не поменялось
![]() Кстати newMovie - это MovieClip с черно-белым битмапом. resultBitMap - это результирующий битмап, где хотим нарисовать прозрачность var bitmapData : BitmapData; var r : Rectangle = newMovie.getRect(newMovie); bitmapData = new BitmapData(r.width, r.height, false); var m : Matrix = new Matrix(); m.translate(-r.x, -r.y); m.scale(newMovie.scaleX, newMovie.scaleY); bitmapData.draw(newMovie, m); resultBitMap.bitmapData.copyChannel(bitmapData, bitmapData.rect, new Point(0,0), BitmapDataChannel.RED, BitmapDataChannel.ALPHA); Последний раз редактировалось k0syak; 26.08.2010 в 13:59. |
|
|||||
|
Lorem ipsum
|
ну а где и как он у тебя создается? он у тебя, судя по результату операции, изначально черным залит. я думал у тебя есть картинка, в которой ты дырку прожигаешь.
__________________
Поймай яблоко 2! |
![]() |
![]() |
Часовой пояс GMT +4, время: 13:43. |
|
|
« Предыдущая тема | Следующая тема » |
|
|