Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   определение темный пиксел под мышкой или светлый (http://www.flasher.ru/forum/showthread.php?t=146496)

MyChemic 09.11.2010 18:54

определение темный пиксел под мышкой или светлый
 
Есть функция, которая распознает цвет пикселя под мышкой, как мне определить к светлым или темным тонам относится цвет, естественно надо программно определить?

TWETTI 09.11.2010 19:21

Функция называется getPixel(). Возвращает целое число в формате RGB. Яркость определяют по формуле (0.2126*R) + (0.7152*G) + (0.0722*B).

samana 09.11.2010 19:23

Да, цвет под мышкой можно узнать. При клике тогда нужно отрисовать сцену в битмапДату и применить к ней метод getPixel(x,y). - выводит цвет пиксела.

Добавлено через 58 секунд
Цитата:

Сообщение от TWETTI (Сообщение 948659)
Яркость определяют по формуле (0.2126*R) + (0.7152*G) + (0.0722*B).

Про яркость спасибо, не знал!!!

TWETTI 09.11.2010 19:27

samana, а ты знаешь как из RGB выделить отдельные цвета R,G и B?

alatar 09.11.2010 19:56

Цитата:

Сообщение от TWETTI (Сообщение 948662)
samana, а ты знаешь как из RGB выделить отдельные цвета R,G и B?

Код AS3:

r = (color >> 16) & 0xFF;
g = (color >> 8) & 0xFF;
b = color & 0xFF;


MyChemic 09.11.2010 21:56

Да как цвет пикселя узнать я знаю, меня именно интересует принадлежность цвета к темным оттенкам или светлым. То есть у меня есть 2 стейта объекта: черный и белый, этот объект инициализируется когда я вожу мышкой по некоторому полю, если поле имеет темный цвет, то объект принимает светлый стейт, иначе темный. Вот я хочу диапазон цветов узнать, до которого светлые, после которого темные. Как если бы взял шкалу от белого до черного и разделил бы пополам, до 50% я бы брал один стейт, после другой

i.o. 09.11.2010 22:31

и чем вас не устроил предложенный вариант?

expl 09.11.2010 22:33

Цитата:

При клике тогда нужно отрисовать сцену в битмапДату
Всю сцену - дороговато, зато можно сделать BitmapData размером 1x1 и отрисовывать туда stage со смещением, равным координатам мыши.
И просто анализировать цвет этого единственного пикселя.

TWETTI 09.11.2010 23:38

Вот код:
Код AS3:

package
{
        import flash.display.Bitmap;
        import flash.display.Loader;
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.events.MouseEvent;
        import flash.net.URLRequest;
 
        public class Main extends Sprite
        {
                private var loader:Loader;
 
                public function Main()
                {
                        loader = new Loader();
                        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
                        loader.load(new URLRequest("img.jpg"));
 
                        stage.addEventListener(MouseEvent.MOUSE_MOVE, onMove);
                }
 
                private function onMove(e:MouseEvent):void
                {
                        var color:uint = (loader.content as Bitmap).bitmapData.getPixel(mouseX, mouseY);
                        var r:uint = (color >> 16) & 0xFF;
                        var g:uint = (color >> 8) & 0xFF;
                        var b:uint = color & 0xFF;
                        var light:Number = (0.2126*r) + (0.7152*g) + (0.0722*b);
                        // от 0 черный до 255 белый
                        if (light >= 127.5) trace("светлый");
                        else trace("темный");
                }
 
                private function onComplete(e:Event):void
                {
                        addChild(loader.content);
                }
        }
}


samana 10.11.2010 00:15

Цитата:

Сообщение от TWETTI (Сообщение 948662)
samana, а ты знаешь как из RGB выделить отдельные цвета R,G и B?

Вижу что за меня уже ответили, но отвечу - да знаю, у меня была записана эта "формула" в книжке.


Часовой пояс GMT +4, время: 03:38.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.