2

まず最初に、私がやろうとしていることを説明します。誰かがより良いアプローチを思いついた場合に備えて、Photoshop の「カラー」スタイルを使用して画像をブレンドする必要があります (ブレンド方法: スクリーン、ハードライト、色 ... )

したがって、基本イメージ (png) と WriteableBitmap が実行時に生成されます (カラー マスクと呼びましょう)。次に、「color」メソッドを使用してこの 2 つの画像をブレンドし、結果を UI コンポーネントに表示する必要があります。

これまでのところ、私が試みているのは、WriteableBitmap に描画することだけですが、アルファ チャネルで予期しない動作に直面しています。

これまでの私のコード:

// variables declaration
WriteableBitmap img = new  WriteableBitmap(width, height, 96,96,PixelFormats.Bgra32,null); 
pixels = new uint[width * height];

//function for setting the color of one pixel
private void SetPixel(int x, int y, Color c)
    {
        int pixel = width * y + x;

        int red = c.R;
        int green = c.G;
        int blue = c.B;
        int alpha = c.A;

        pixels[pixel] = (uint)((blue << 24) + (green << 16) + (red << 8) + alpha);

    }

//function for paint all the pixels of the image
private void Render()
    {
        Color c = new Color();
        c.R = 255; c.G = 255; c.B = 255; c.A = 50;
        for (int y = 0; y < height; y++)
            for (int x = 0; x < width; x++)
                SetPixel(x, y, c);



        img.WritePixels(new Int32Rect(0, 0, width, height), pixels, width * 4, 0);
        image1.Source = img;  // image1 is a WPF Image in my XAML
    }

色 cA = 255 でコードを実行するたびに、期待どおりの結果が得られます。イメージ全体が目的の色に設定されます。しかし、cA を別の値に設定すると、奇妙なことが起こります。色を BRGA = 0,0,255,50 に設定すると、ほぼ黒に近い濃い青になります。BRGA = 255,255,255,50 に設定すると、黄色になります...

どんな手掛かり !?!?!

前もって感謝します !

4

1 に答える 1

2

色成分の順序を次のように変更します

pixels[pixel] = (uint)((alpha << 24) + (red << 16) + (green << 8) + blue);
于 2012-12-11T09:01:28.190 に答える