Форум 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=123478)

Mur4ik 04.04.2009 04:42

Вот что по итогу получилось, может кому пригодится
Код AS3:

 
                /**
                * Возвращает цвет темнее заданного на указанную величину
                * @param        $color Исходный цвет
                * @param        $koeff На сколько делать темнее
                * @return Результирующий цвет
                */

                public static function darker( $color:uint, $koeff:Number = .7 ):uint
                {
                        var r:Number = 0;
                        var g:Number = 0;
                        var b:Number = 0;
 
                        r = ($color >> 16 & 0xFF) * $koeff;
                        g = ($color >> 8 & 0xFF) * $koeff;
                        b = ($color & 0xFF) * $koeff;
 
                        return r << 16 | g << 8 | b;
                }
 
                /**
                * Находит среднее значение цвета всего изображения
                * @param        $source Исходное изображение
                * @param        $scale масштаб изображения для подсчета цвета
                * @return результирующий цвет
                */

                public static function findMedianColour( $source:BitmapData, $scale:Number = .25 ):uint
                {
                        var xScale:uint = Math.round( $source.width * $scale );
                        var yScale:uint = Math.round( $source.height * $scale );
 
                        var mtrx:Matrix = new Matrix();
                        var tempBmd:BitmapData = new BitmapData(xScale, yScale);
 
                        mtrx.scale($scale,$ scale);
                        tempBmd.draw($source, mtrx);
 
                        var r:uint = 0;
                        var g:uint = 0;
                        var b:uint = 0;
 
                        var pCount:uint = xScale * yScale;
                        var pixel:uint;
 
                        for (var px:int = 0; px < xScale; px++)
                        {
                                for (var py:int = 0; py < yScale; py++)
                                {
                                        pixel = tempBmd.getPixel(px, py);
 
                                        r += pixel >> 16 & 0xFF;
                                        g += pixel >> 8 & 0xFF;
                                        b += pixel & 0xFF;
                                }
                        }
 
                        tempBmd.dispose();
 
                        r /= pCount;
                        g /= pCount;
                        b /= pCount;
 
                        return r << 16 | g << 8 | b;
                }

Поправил функцию darker, c умножением каждой компоненты затемнение выглядит более правильно.

BlooDHounD 04.04.2009 15:48

Mur4ik, правильно правильно. забыл обратно преобразовать.


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

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