Actionscript конвертировать фон в прозрачный - PullRequest
0 голосов
/ 23 марта 2009

Цель функции - преобразовать фон в прозрачный, а затем вернуть битовые данные, но, похоже, это не работает. Код следующий:

    private function transparentConverter( source:BitmapData, threshold:Number = 0.1 ):BitmapData
        {
            var bitmapData:BitmapData = new BitmapData( source.width, source.height, true, 0x00000000  );
            bitmapData.lock();
            var color:uint = source.getPixel( 0, 0 );

            var x:uint, y:uint;
            for ( y = 0; y < source.height; y++ )
            {
                for ( x = 0; x < source.width; x++ )
                {
                    var c1:uint = source.getPixel( x, y );
                    var c2:uint = color;
                    var rx:uint = Math.abs((( c1 & 0xff0000 ) >> 16 ) - (( c2 & 0xff0000 ) >> 16 ));
                    var gx:uint = Math.abs((( c1 & 0xff00) >> 8 ) - (( c2 & 0xff00 ) >> 8 ));
                    var bx:uint = Math.abs(( c1 & 0xff ) - ( c2 & 0xff ));

                    var dist:uint = Math.sqrt( rx*rx + gx*gx + bx*bx );

                    if ( dist <= threshold )
                    {
                        bitmapData.setPixel32( x, y, 0x00000000 );
                    }else
                        {
                            bitmapData.setPixel32( x, y, c1 );
                        }
                }
            }
            bitmapData.unlock();
            return bitmapData;
        }

Пожалуйста, совет.

Ответы [ 3 ]

0 голосов
/ 23 марта 2009

Можете ли вы попробовать это:

// This bitmapData should be defined for real, wherever you get that from ...
var source:BitmapData;  

if(source == null)
   trace("The source cannot be empty");

// Here you get the transformed BitmapData
var destination:bitmapData = transparentConverter( source );

// You apply it to a Bitmap in order to visualize it
var viewBitmap:Bitmap = new Bitmap(destination);

// You add the Bitmap to the stage so you can see it
addChild(viewBitmap);
0 голосов
/ 24 марта 2009

Тео, спасибо за ваши усилия. Я думаю, что проблема в том, что функции выполняются слишком долго. После того, как я попробую ваш скрипт, появятся предупреждающие сообщения. Он сказал, что запуск программы занимает более 15 секунд, и велел мне прекратить работу.

Я думаю, что функция должна быть в порядке, но, возможно, не совсем практичной.

Тео, спасибо за ваше время и советы еще раз.

Я думаю, что вопрос можно закрыть.

0 голосов
/ 23 марта 2009

Тео, функция, кажется, может работать, но займет некоторое время, но не возвращает битовые данные.

Я получаю битовые данные по следующему коду:

bitmapData = transparentConverter( bitmapData );
var bitmap:Bitmap = new Bitmap( bitmapData );
image1.source = bitmap;

Изображение не появляется.

А также я могу проследить (c1) и получить длинный список данных. Спасибо за ваш ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...