5

AS3で色付きのビットマップのビットマップデータを白黒に変更するにはどうすればよいですか? 私はフラッシュで CMS 用のシンプルな画像編集ツールを開発しています。

アップロードされたビットマップの色を白黒に切り替えることができるはずです。bitmapdata 自体を変更したいので、後で Adob​​eの JPGEncoder クラスを使用して ByteArray に書き込むことができます。

4

7 に答える 7

28

これは私が推測する最もエレガントな解決策です(sourceあなたであるとBitmapData):

const rc:Number = 1/3, gc:Number = 1/3, bc:Number = 1/3;
source.applyFilter(source.bitmapData, source.bitmapData.rect, new Point(), new ColorMatrixFilter([rc, gc, bc, 0, 0,rc, gc, bc, 0, 0, rc, gc, bc, 0, 0, 0, 0, 0, 1, 0]));

と..。flash.geom::Point_flash.filters::ColorMaxtrixFilter

ColorMatrixFilter色相の変化、色付け、明るくする、暗くする、彩度を下げるなど、多くのことを可能にします...それ以外BitmapData::paletteMapの場合BitmapData::colorTransformは、優れた補完物です...

ただ注意したかったのは、以下を使用することです

const rc:Number = 1/3, gc:Number = 1/2, bc:Number = 1/6; 

#00FF00主観的にはより明るいので#FF0000、もう少し自然に見えます。#0000FF

じゃあ、頑張ってね ... ;)

グリーツ

back2dos

于 2009-07-08T16:08:46.603 に答える
2

実際には、 back2dos のソリューションをもっと簡単な方法で使用できます。

const rc:Number = 1/3, gc:Number = 1/3, bc:Number = 1/3;
mc.filters = [ new ColorMatrixFilter([rc, gc, bc, 0, 0,rc, gc, bc, 0, 0, rc, gc, bc, 0, 0, 0, 0, 0, 1, 0]) ];

ここで、mc は、ビットマップデータがビジュアル要素として存在する MovieClip または Sprite コンテナーです。ありがとうback2dos :)

于 2012-01-06T10:50:34.917 に答える
2

getPixel と setPixel を使用して、色を平均化するだけです (フィルターなどを使用してこれを行う別の方法があると思います)。

for(int i = 0; i < bitmapData.height; i++)
{
    for(int j = 0; j < bitmapData.width; j++)
    {
        var color:uint = bitmapData.getPixel(i, j);
        var red:uint = color & 0xFF0000 >> 16;
        var green:uint = color & 0x00FF00 >> 8;
        var blue:uint = color & 0x0000FF >> 0;
        var bwColor:uitn = red + green + blue / 3;
        bwColor = bwColor << 16 + bwColor << 8 + bwColor; // puts the average in each channel

        bitmapData.setPixel(i, j, bwColor);
    }
}
于 2009-07-08T15:58:30.460 に答える
1

Cookie に感謝します。元のビットマップデータをコピーすることは、色を復元するための最も簡単な解決策でした。

   function clearColor() {
      colorbmd = new BitmapData(source.width, source.height);
      colorbmd = source.clone();
      //apply filter here    
    }
    function restoreColor() {
      source = colorbmd;
    }

画像を白黒に変換すると、元に戻すことはできないと思います(変換中に情報が失われます)。フィルターを適用する前に、コピーを作成する必要があります。– CookieOfFortune

于 2009-07-09T15:30:47.943 に答える
0

アプローチに感謝します。値をいじることができる小さなツールを作成しました: http://bjornson.inhb.de/?p=159

初期値は、macke によって提案された値です。RGB の場合、30%、59%、および 11% です。

また、外部画像を読み込んで、画像の最良の結果を試すこともできます。

于 2011-01-31T15:42:51.830 に答える
0

両方の方法を試しました。大きな画像を扱うときは、ColorMatrixFilter メソッドの方がはるかに高速に動作するようです。

フィルターも削除する方法はありますか?または、ColorMatrixFilter の値をもう一度変更する必要がありますか?

于 2009-07-09T09:50:16.410 に答える