gpt4 book ai didi

c# - 使图片框透明,每个框都与一个角重叠?

转载 作者:行者123 更新时间:2023-11-30 20:36:38 24 4
gpt4 key购买 nike

TL;DR:看下图

所以我想拍一张小照片,但我和我周围的人有点没主意。

我在中间有一张 table (坐着+吃饭的 table )(从上面看),周围坐着人。那些人是圆的, table 也是圆的。

每个人都有自己的图片框,我只是用一张图片,旋转它,然后将其设置为下一个框中的图像。

现在的问题是:角上的人的PictureBox与空角的 table 重叠,图像中有透明。它应该显示其下方的表格,但它显示的是表格的背景 :(

编辑:所有背景都设置为透明,窗体将大理石作为背景,白色(“窗口”)作为背景色。

我把一个人放在后面,一个人放在前面,这样很容易看到:

Here's what's going on

编辑 2(与 ocmment 相同):

在过去的两天里,我阅读了大约 10 次这个问题,但没有一个描述这个确切问题的人有一个实际的答案。当试图插入其中之一时,我被告知我应该发布一个新问题。

示例:How to make picturebox transparent?

最佳答案

Winforms 中的透明度有点误导,因为它不是真正的透明度。
Winforms 控件通过绘制它们将隐藏的父控件部分而不是它们自己的背景来模拟透明度。
但是,它们不会绘制可能被它们部分覆盖的其他控件。
这就是最上面的图片框隐藏大图片框的原因。

您可以通过创建一个继承自 PictureBox 的自定义控件并覆盖其 OnPaintBackground 来解决这个问题方法(取自this code project article,稍作调整):

protected override void OnPaintBackground(PaintEventArgs e)
{
base.OnPaintBackground(e);
Graphics g = e.Graphics;

if (this.Parent != null)
{
var index = Parent.Controls.GetChildIndex(this);
for (var i = Parent.Controls.Count - 1; i > index; i--)
{
var c = Parent.Controls[i];
if (c.Bounds.IntersectsWith(Bounds) && c.Visible)
{
using (var bmp = new Bitmap(c.Width, c.Height, g))
{
c.DrawToBitmap(bmp, c.ClientRectangle);
g.TranslateTransform(c.Left - Left, c.Top - Top);
g.DrawImageUnscaled(bmp, Point.Empty);
g.TranslateTransform(Left - c.Left, Top - c.Top);
}
}
}
}
}

Microsoft 已发布 Knowledge base article很久以前就解决了这个问题,但是它有点过时了,它的代码示例在 VB.Net 中。

另一种选择是使用 Graphics.DrawImage 自己绘制图像,无需使用图片框来容纳它们。方法。
最好的地方可能是在 OnPaint表格的方法。

关于c# - 使图片框透明,每个框都与一个角重叠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36710701/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com