-1

所以基本上,我想添加两张图片。其中一个是大纲,另一个是卡片。

轮廓具有与卡片相同的表面像素数,但在轮廓实际所在的位置有一些额外的像素。所以基本上,它是一张带有轮廓的卡片,但它分为轮廓图片和卡片图片。

那么如何让轮廓图的中心部分透明,让卡片可以塞进去呢?

我无法将卡片的轮廓和卡片做成一张图片,因为我需要使用它的“可见”属性使轮廓闪烁。如果我使图像透明,它只会显示表单的背景。

以下是我想为那些还不明白的人做的事情:

在此处输入图像描述

这必须适合这个:

在此处输入图像描述

但是当我将卡片放在轮廓中时(即使轮廓的内部是透明的),卡片也会消失在其中,因为它进入了背景并且不会停留在表面上。我需要它正好适合大纲,但它不起作用。

4

2 回答 2

0

您可以编写一个方法来创建一个新的位图,其中两个图像相互叠加。像这样:

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如果您需要很快再次使用它,请存储结果,因为创建新位图并不是一项便宜的操作。例如,您可以在cardresult图像之间切换以模拟闪烁。

于 2013-02-20T15:07:04.507 回答
0

与您的 Z 订单一起工作。确保卡片位于大纲的顶部,并且卡片和轮廓的边距和填充都设置为 0。

或者...

使用 PictureBox 边框设置。您可以更改边框的粗细和颜色,并使用计时器打开和关闭边框。这样,您就可以直接打开图片框本身的轮廓,而不是绘制两个图像或使用单独的图片作为轮廓。

于 2013-02-20T19:46:26.300 回答