我有一个分层窗口(使用SetLayeredWindowAttributes)。如果我将整个窗口上的alpha设置为128并在其上绘制黑色矩形,它将按预期工作(黑色矩形以不到50%的透明度显示)。
但是,如果我在整个窗口上设置aplha(当我将SetLayeredWindowAttributes调用为255时)然后使用设置为50%的画笔绘制黑色矩形,则它们的黑色矩形纯粹是实心的,没有任何半透明效果。 / p>
我的印象是,一旦我以这种方式拥有一个分层窗口,我可以使用不同级别的每像素alpha绘制它,这样这两个将绘制两个不透明度级别:
User32.SetLayeredWindowAttributes(this.Handle, (uint) TransparentColorKey.ToArgb(), 255, User32.LWA_ALPHA | User32.LWA_COLORKEY);
e.Graphics.FillRectangle( new SolidBrush(Color.FromArgb(200, 40, 40, 40)), myRect);
e.Graphics.FillRectangle( new SolidBrush(Color.FromArgb( 25, 40, 40, 40)), myRect);
但这两个矩形都具有相同的不透明度(我希望一个在200,一个在25)。我只控制整个窗口的不透明度(SetLayeredWindowAttributes中的255)。
我在这里缺少什么才能在不同的alpha半透明度下绘制不同的元素,甚至只是矩形?
BTW,我想要SetLayeredWindowAttributes(而不是UpdateLayeredWindow),因为我正在使用设备上下文进行活动绘图。后一种方法需要绘制一个位图并一次性提供。 谢谢! 戴夫
答案 0 :(得分:1)
我不知道你在哪里认为SetLayeredWindowAttributes应该允许你直接将alpha数据绘制到你的窗口。从MSDN文档中,它似乎只允许持续的alpha或颜色键控。获取每像素alpha的唯一方法是使用UpdateLayeredWindow。