-1

基本的に、2枚の写真を追加したいと思います。1つはアウトラインで、もう1つはカードです。

輪郭の表面のピクセル数はカードと同じですが、輪郭が実際にある場所は少し余分です。基本的にはアウトラインのあるカードですが、アウトラインの絵とカードの絵に分かれています。

では、アウトライン画像の中央部分を透明にして、カードが中に収まるようにするにはどうすればよいでしょうか。

「可視」プロパティを使用してアウトラインをフラッシュする必要があるため、カードとカードのアウトラインを 1 つの画像にすることはできません。画像を透明にすると、フォームの背景だけが表示されます。

まだ理解していない人のために、私がやりたいことは次のとおりです。

ここに画像の説明を入力

これは次の中に収まる必要があります。

ここに画像の説明を入力

しかし、カードをアウトラインに配置すると (アウトラインの内側が透明であっても)、カードは背景に入り、表面にとどまらないため、その中に消えます。アウトラインにぴったり合うようにする必要がありますが、うまくいきません。

4

2 に答える 2

0

Z オーダーを操作します。カードがアウトラインの上にあること、およびカードとアウトラインのマージンとパディングが両方とも 0 に設定されていることを確認してください。

あるいは...

PictureBox の境界設定を操作します。ボーダーの太さや色を変更したり、タイマーでボーダーのオンオフを切り替えたりできます。そうすれば、2 つの画像を描画したり、アウトラインに別の画像を使用したりする代わりに、文字通り、pictureBox 自体のアウトラインをオンにすることができます。

于 2013-02-20T19:46:26.300 に答える
0

2 つの画像を重ねて描画した新しいビットマップを作成するメソッドを作成できます。このような:

Bitmap DrawCardWithOutline(Image card, Image outline)
{
    /// Put null checks here.

    Bitmap result = new Bitmap(outline.Width, outline.Height);
    using (Graphics graphics = Graphics.FromImage(result))
    {
        Rectangle cardRect = new Rectangle(0, 0, result.Width, result.Height);
        graphics.DrawImage(card, cardRect);

        Rectangle outlineRect = new Rectangle(0, 0, result.Width, result.Height);
        graphics.DrawImage(outline, outlineRect);
    }
    return result;
}

cardRectカードを表示する場所に合わせて( ) を調整しRectangleます。私の例では、カードは左上隅 (0,0) から右下隅 (幅、高さ) までずっと描かれています。

次のように使用します。

var card = Image.FromFile(@"C:\card.png");
var outline = Image.FromFile(@"C:\outline.png");
var result = DrawCardWithOutline(card, outline);
pictureBox1.Image = result;

DrawCardWithOutline新しいビットマップの作成は安価な操作ではないため、すぐに再度使用する必要がある場合は、結果を保存してください。たとえば、cardと のresultイメージを切り替えて、点滅をシミュレートできます。

于 2013-02-20T15:07:04.507 に答える