0

32 ビットの BitmapData でいくつかの fillRects を使用しようとしています (つまり、透明度 = true で、bg の色を FFFF00FF (不透明なマゼンタ) に設定します)。たとえば、次のように使用します。

fillRect(rect, 0xFF0000FF);

予想通り、これは不透明な青い四角形を描画しますが...

fillRect(rect, 0x550000FF);

これは半透明の青い長方形を描くはずですよね?しかし、代わりに、青が黒と混ざっているように、濃い青の四角形が得られます(ただし、背景はマゼンタです。覚えているので、青が下のマゼンタと混ざると思いますか?)。

色の値を 0x000000FF に設定すると、基になるマゼンタが 100% になるはずですが、代わりに黒が 100% になります。

BitmapData は 32 ビット ARGB で作成されているので、ここで何が問題なのだろうか?

これはデフォルトの AS3 の動作のようですか? 小さなテストクラスを作成した後、実際に説明したように動作します...

package 
{
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Sprite;
    import flash.geom.Rectangle;


    public class Main extends Sprite
    {
        public function Main()
        {
            stage.color = 0x000000;
            var bd:BitmapData = new BitmapData(400, 300, true, 0xFFFF00FF);
            var b:Bitmap = new Bitmap(bd);
            addChild(b);

            bd.fillRect(new Rectangle(0, 0, 200, 200), 0x000000FF);
        }
    }
}

fillRect で描画された四角形はマゼンタになると思われますが、明らかにステージの背景色になります。今私の質問は:

目的の効果を得る方法はありますか (fillRect アルファは、Flash ステージではなく、ビットマップデータの背景色に適用されます)。

4

1 に答える 1

2

あなたの問題は、fillRectがフォトショップのツールのようなものであり、半透明の長方形を描くことができ、それが自動的にブレンドされることを前提としています。

そうではありません。fillRectは、指定された長方形の領域から指定された色にすべてのビットマップピクセルを設定するだけです。

あなたがしなければならないことは、この単純化された例のように、例えばdrawメソッドを使用して、希望のサイズと色で半透明のビットマップを作成し、作業中のビットマップ(キャンバス)とマージすることです。

var whiteTransparent:BitmapData = new BitmapData(100, 100, true, 0x80FFffFF);
var blackCanvas:BitmapData = new BitmapData(400, 400, false, 0);

var canvas:Bitmap = new Bitmap(blackCanvas);

addChild(canvas);

blackCanvas.draw(whiteTransparent);

よろしくお願いします

于 2013-02-22T07:35:53.393 に答える