【问题标题】:Transparency in compact framework紧凑框架中的透明度
【发布时间】:2011-04-09 05:28:19
【问题描述】:

我需要在 .NETCF 中创建一个具有透明背景的图像,我使用洋红色作为我希望使其透明的背景。我尝试这样做的方法是覆盖 onPaint()。但是我不能让背景透明?这是我所拥有的:

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

    ImageAttributes imageAttributs = new ImageAttributes();
    imageAttributs.SetColorKey(Color.FromArgb(255, 0, 255), 
        Color.FromArgb(255, 0, 255));
    g.DrawImage(cross, crossRect, 200, 10, cross.Width, cross.Height,
        GraphicsUnit.Pixel, imageAttributs);

    base.OnPaint(e);
}

但是当我尝试包含 ImageAttributes 时,我的图像根本没有绘制?

【问题讨论】:

    标签: c# .net windows-mobile compact-framework


    【解决方案1】:

    紧凑的框架不支持透明性——不过,您可以通过 COM 互操作实现对它的支持。 Chris Lorton 有一个 very good blog post 在紧凑框架上进行 alpablending。

    【讨论】:

      【解决方案2】:

      看起来 OpenNETCF 也已经对此进行了管理包装。我相信 Chris Tacke 可以对此发表更多评论。他似乎在这个网站上很活跃,但看起来比他更胜一筹:)

      【讨论】:

        【解决方案3】:

        啊,CF 中的透明度。人们可以(并且确实)浪费在这上面的时间和时间。首先,您可能会向我们提供有关您正在使用的图像(位图、png 等)的更多信息,但我们可能可以从您的帖子中推断出一些信息。我们还需要知道这是否在子容器中(例如在框架、面板等内部)。

        肯定支持 Colorkey 透明度(从 2.0 开始 - 甚至可能更早)。这里的问题是,如果你在孩子身上,你会让父母“流血”。这似乎是您正在尝试的,但这对我来说并不完全明显,所以我有一些后续问题需要澄清。

        • OnPaint 是表单覆盖还是自定义控件?
        • 为什么在工作之后调用基础 OnPaint()(而不是之前或根本不调用)?
        • 您是否覆盖了 OnPaintBackground?

        我现在的猜测是,你调用一切的方式有一些错误,但我们没有足够的代码来发现它。

        这里还有一些关于绘画和透明度的资源:

        关于 alpha 通道的东西有更多资源(这在 CF 中远非简单),但既然您似乎在尝试 colorkey,这些应该就足够了。

        【讨论】:

        • 在简单的情况下,为什么不直接使用 this.pnlMyPanel.BackColor = this.BackColor ?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多