紧凑框架中的透明度

我需要在.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时,我的图像根本没有被绘制?

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

当然支持Colorkey透明度(自2.0以来 – 甚至可能更早)。 这里的问题是,如果你还是个孩子,你会让父母“流血”。 这似乎是你正在尝试的,但对我来说并不是很明显,所以我有一些后续问题需要澄清。

  • OnPaint是窗体覆盖还是自定义控件?
  • 为什么在工作之后调用基础OnPaint()(而不是之前或根本不调用)?
  • 你重写了OnPaintBackground吗?

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

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

  • 操作方法:绘制透明图像
  • 透明按钮,面板和控件
  • 复制时保持位图透明度
  • Bitmap.Clear bug

有更多的资源用于alpha通道的东西(在CF中远非简单),但由于看起来你正在尝试使用colorkey,这些应该足够了。

紧凑的框架不支持透明度 – 您可以通过COM互操作实现支持。 克里斯·洛顿(Chris Lorton)有一篇关于紧凑框架的关于alpablending的非常好的博文 。

看起来OpenNETCF已经在这方面管理了包装器。 我相信Chris Tacke可以对此发表更多评论。 他似乎在这个网站上相当活跃,但看起来像是打败了他这个:)