|
|
|||||
Вам поможет метод getPixel32 у BitmapData картинки. Считываете пиксель под курсором, смотрите на его alpha-компонент (прозрачность).
Последний раз редактировалось serenkiy; 10.04.2009 в 23:02. |
|
|||||
|
|
|||||
короче говоря написал я функцию
private function createMask(img) { var mask_sp=new Sprite(); mask_sp.graphics.lineStyle(1,0x000000,0); var myData=img.bitmapData; for(var i=0; i<myData.width; i++) { for(var j=0; j<myData.height; j++) { var pix=myData.getPixel32(i,j); if((pix & 0x000000ff)>0) { mask_sp.graphics.moveTo(i,j); mask_sp.graphics.lineTo(i+1,j); } } } addChild(mask_sp); //mask_sp.buttonMode=true; mask_sp.addEventListener(MouseEvent.ROLL_OVER,handleMouseEvent) } private function handleMouseEvent(e:MouseEvent) { dispatchEvent(new MouseEvent(e.type)); //trace(1); } |
|
|||||
Попробуйте вместо
написать изменить ф-цию handleMouseEvent: Последний раз редактировалось serenkiy; 11.04.2009 в 04:26. |
|
|||||
Так я узнаю канал RED, зачем он мне? спрайт создаётся нармально, и функция тоже оповещает событие когда надо.
Только вот класс Sprite оповещает событие и сам по себе. То есть если бы я даже не написал функцию handleMouseEvent, так вот можно ли отключить этот стандартный оповеститель??? Теоретически можно былобы написать свой класс расщиряющий MouseEvent. Но может быть и без этого получится |
|
|||||
Так Вы узнаете канал Alpha. Ф-ция getPixel32 возвращает значение цвета ARGB, а не RGBA.
Добавлено через 40 минут Вообще, без всяких ухищрений, можно сделать так: ваш прозрачный Bitmap помещаете в контейнер (Sprite), на контейнер вешаете листенер: ну и разумеется описание приемника: Последний раз редактировалось serenkiy; 11.04.2009 в 14:58. |
|
|||||
Да но в таком случае эту функцию надо будет переписывать каждый раз... Я вот так сделал.
private function createMask(img) { mask_sp=new Sprite(); var myData=img.bitmapData; for(var i=0; i<myData.width; i++) { for(var j=0; j<myData.height; j++) { var pix=myData.getPixel32(i,j); if((uint(pix & 0xff000000) >>> 24 ) > 0) { with(mask_sp.graphics) { beginFill(0x000000); drawRect(i,j,1,1); endFill(); } } } } addChild(mask_sp); img.mask=mask_sp; } Насчет ARGB ты был прав, только в этом случае надо результат операции "pix & 0xff000000" надо трасформировать в uint, так как в обычном int если первая цифра это 1, значит номер отрицательный. Также для шифта надо использовать оператор ">>>", так как ">>" тоже может превратить загнать ваш номер в минис. Что бы не мучаться с деспетчерами, прото наложил маску на PNG. Раньше компилятор её не распознавал, так как она была нарисована линиями. Но сечас, так как она нарисова квадратами она распознается. Короче работает, всем спасибо за помощь |
Часовой пояс GMT +4, время: 01:22. |
|
« Предыдущая тема | Следующая тема » |
|
|