|
|
|||||
Как работает BitmapData.hitTest?
Нужна формула, для определения того, как определяет hitTest непрозрачный (с пороговой альфой) пиксель.
Разница появляется на некоторых файлах с разным порогом альфы. package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Sprite; import flash.events.Event; import flash.geom.Point; import flash.text.TextField; public class Main extends Sprite { [Embed(source = '../fla/sun.png')] private var Sun:Class; private var tf:TextField; private function log(text:String):void { tf.appendText(text + '\n'); } public function Main() { tf = new TextField(); tf.width = tf.height = 300; tf.border = true; addChild(tf); if (stage) addedToStageListener(); else addEventListener(Event.ADDED_TO_STAGE, addedToStageListener); } private function addedToStageListener(event:Event = null):void { var pic:Bitmap = new Sun() as Bitmap; var bmd:BitmapData = pic.bitmapData; var i:int, j:int; var v:Vector.<uint> = bmd.getVector(bmd.rect); var k:int = 0; for (j = 0; j < bmd.height; j++) { for (i = 0; i < bmd.width; i++) { var thrasholdAlpha:uint = 1; var hitTest:Boolean = bmd.hitTest(new Point(), thrasholdAlpha, new Point(i, j)); var hitPixel:Boolean = (v[k] >>> 24) > thrasholdAlpha;// нужна правильная формула // (v[k] >>> 24) >= thrasholdAlpha) дает другой эффект if (hitTest != hitPixel) { // выводим пиксель log('hitTest:' + String(hitTest) + ', hitPixel: ' + String(hitPixel) + ', pixel: 0x' + v[k].toString(16)); } k++; } } } } } |
|
|||||
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
По-моему здесь лучше использовать getPixel() вместо тормозного hitTest
|
|
|||||
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
Цитата:
Цитата:
var pixel:uint = someImage.bitmapData.getPixel(this.x, this.y); var alpha:uint = (pixel >> 24) & 0xff; if (alpha > 100) { // замеряем уровень альфа канала от 0 до 255 } п.с. Писал по памяти, может где-то ошибся. Но думаю идея ясна |
|
|||||
Млин...извиняюсь, Вы читаете сообщения полостью? То что Вы написали, есть в первом посту...и в данном случае getPixels и getVector то же самое...
Вообщем, hitTest как-то странно работает, вот я и хочу разобраться, что за формула у него внутри. Вот собрал демку...там проект FlashDevelop и есть готовый swf. |
Часовой пояс GMT +4, время: 10:42. |
|
« Предыдущая тема | Следующая тема » |
|
|