1

さまざまなPNGから作成されたMovieClipsを透明度で表示するFlashアプリに取り組んでいます。PNGは、輝度レベルを均一にするために、実行時に色補正する必要があります。これを実現するために、MovieClipの平均輝度レベルを使用して、画像を明るくしたり暗くしたりする量を決定するコードを作成しました。誰かがアドビのフォーラムで平均輝度を計算するためのコードを丁寧にくれました:http://forums.adobe.com/message/3501572

ヒストグラムを使用するこの方法は、MovieClipに透明な領域がある場合を除いて、完全に機能します。MovieClipの透明なピクセルはすべて真っ白になり、結果が歪んでしまいます。

誰かがこれを行うためのより良い方法を知っていますか?正確な結果が必要です。MovieClipを1ピクセルに縮小したり、そのピクセルの色を読み取ったりするなど、風変わりなことを試したことを覚えていますが、それは効果的ではありませんでした。

編集:

ああああ!私はついにhttp://www.kirupa.com/forum/showthread.php?266493-Extract-Bitmap-or-BitmapData-from-MovieClipからそれを理解しました。デフォルトのBitmapDataコンストラクターは白で塗りつぶされます。代わりに透明なピクセルで塗りつぶしました。以下の回答を参照してください。

4

1 に答える 1

1
        var bmp:BitmapData = new BitmapData(image.width/4,image.height/4, true, 0x00000000);
        bmp.draw(image);
        bmp.draw(image.getChildAt(0));
        var v:Vector.<Vector.<Number >  >  = bmp.histogram();
        var r:Number = 0;
        var g:Number = 0;
        var b:Number = 0;
        var a:Number = 0;

        for (var i:uint=0; i<256; i++) {
            r +=  i * v[0][i] / 255;
            g +=  i * v[1][i] / 255;
            b +=  i * v[2][i] / 255;
            a += i*v[3][i]/255;

        }
        var totalPixels:uint = bmp.rect.width * bmp.rect.height;
        r /=  totalPixels;
        g /=  totalPixels;
        b /=  totalPixels;
        a /= totalPixels;

        var brightness:Number = (r+g+b)/3;
        bmp.dispose();
        return brightness * 2;
于 2012-07-13T20:25:09.980 に答える