2

Win32 の時代にさかのぼると、モノクロのビットマップ (すべての意図と目的で単なるビットマップ マスク) があれば、そのビットマップを DeviceContext にレンダリングできました。何が起こるかは、透明としてレンダリングされた「0」があったすべてのピクセルと、現在選択されている前景色でレンダリングされた「1」があったすべてのピクセルです。これはとても便利でした。

しかし、数週間検索した後も、WPF で同様のものは見当たりませんでした。

今、私は自分の MonochromeBitmapImage クラスをロールしようとしていましたが、これを行う別の方法を誰かが知っているとしたら、それはあなた全員、SO ユーザーになるだろうと思ったので、質問があります... WPF でどのようにレンダリングできますか1 つの値が特定の色で、もう 1 つの値が透明なモノクロ ビットマップ

4

2 に答える 2

4

非常によく似た機能はOpacityMaskですUIElement。OpacityMaskで透明でない部分が表示されます。で使用できます

  • ブラシ-SolidColorBrushなど
  • ビジュアル-VisualBrush
  • 画像-ImageBrush

Buttonこれは、を使用した例です。ImageBrush

<Button Content="Opacity Mask">
    <Button.OpacityMask>
        <ImageBrush ImageSource="C:\OpacityRect.png"/>
    </Button.OpacityMask>
</Button>

ここに画像の説明を入力してください

于 2011-02-28T00:11:49.537 に答える
3

モノクロ ビットマップを使用する必要があるか、単に画像の色を変更できるようにするかによって異なります。アルファ付きの png を使用する画像形式を使用できる場合は、画像を OpacityMask として使用できます。コードは必要ありません。画像を OpacityMask として使用すると、簡単に色を変更したり、グラデーションや ImageBrush を使用したりできます。

    <Rectangle Fill="Blue">
        <Rectangle.OpacityMask>
            <ImageBrush ImageSource="..." />
        </Rectangle.OpacityMask>
    </Rectangle>

1 ビットのビットマップを使用する必要がある場合は、カスタム パレットを使用してインデックス形式に変換するのは非常に簡単です。パレットで必要な色を設定するか、任意のものを選択して OpacityMask として使用できます。FormatConvertedBitmap には別のフォーマットが必要なようですが、別のパレットでは効果がありませんでした。

public static FormatConvertedBitmap Recolor(BitmapImage b, Color c)
{
    return new FormatConvertedBitmap(b, PixelFormats.Indexed2, new BitmapPalette(new List<Color>() { Colors.Transparent, c }), 0);
}

もう 1 つのオプションは、PixelShader です。これは、この種のものには少しやり過ぎですが、より複雑な操作には便利です。

于 2011-02-28T00:05:55.657 に答える