我有一个名为的图像数组 image__trans.png 所有这些图像都有透明区域。 这个想法是,当把它们放在一起时,它们将形成一个漂亮的图像。 但我得到了一个奇怪的GDI +相关错误(“GDI +中发生了一般错误”),我一直在发疯。 我现在使用的代码可以看作如下; number_of_photos = 30; Bitmap temp = new Bitmap(“background.png”);//some white background 640×480 pixels temp.Save(“temp.png”, ImageFormat.Png); temp.Dispose(); for (int photo_no = 0; photo_no < number_of_photos; photo_no++) { Bitmap temp1 = new Bitmap("temp.png"); Graphics gra = Graphics.FromImage(temp1); Bitmap new_layer = new Bitmap("image_" + photo_no + "_trans.png"); //the images image__trans.png are […]
我需要一种快速的方法来在支持透明度的屏幕上绘制叠加层。 我做了很多搜索,找到了一个可能的解决方案(有自己的问题)和另一个不符合我要求的解决方案; 特别是透明支持。 我将从后者开始,然后触摸前者。 解决方案1 使用带有TransparencyKey的无边框表单,这是我发现的最有用的解决方案之一。 这个解决方案的工作原理是使用一个新的Form,让它无边框,将背景设置为类似Colour.White ,并将TransparencyKey设置为相同的颜色,将其设置为全屏和最顶层,并可能设置一些其他选项以使其不可见鼠标和键盘。 该解决方案的问题在于它不支持透明度; 它只会“剔除”与TransparencyKey 完全相同的颜色,因此,即使是最微小的差异,也会显示出在屏幕外面有半透明物体的想法。 解决方案2 使用P / Invoke和GDI +获取( GetDC & Graphics.FromHdc ),实际绘制,然后释放( ReleaseDC )桌面。 它的function很好,不幸的是,但是存在一些问题。 首先; 调用它一次显然只会画一次,因此如果画面完全刷新后它会消失,我不明白如何解决这个问题,如果这是最好的解决方案,我肯定需要帮助这个问题。 第二; 使用半透明的Brush和FillRectangle这种方法GDI +非常慢,我老实说不能怪它,但我要求它做得很快; GDI +显然无法满足的要求。 结论; 我需要一种在具有透明度支持的屏幕上绘制叠加层的方法,如果第二种方法是我应该使用的方法,我怎么能用半透明刷子绘制得足够快以至于它不是问题我怎么能让它更新呢屏幕刷新后它不会消失,如果不是我应该使用的方法,请指定我应该使用的方法。
看起来这个问题在不同的背景下被多次询问过,我在为游戏制作叠加层方面取得了一些进展(这是用于信息数据等)。 我也想让它像Steam和XFire一样可以互动。 我已经设法获得了一个直接游戏的叠加,而它在窗口模式…有点。 我已经看了遍布堆栈溢出和谷歌没有很多运气。 如果需要,我可以用C ++而不是C#来尝试。 我知道C#,但我不认为自己是一个专业人士。 只需要更好的解释。 如果我能够正常工作,我会愿意整理一个精彩的截屏/教程。 注意:我真的想用本机代码而不是库来做这个,但是如果那里有一个好的免费库,我想查看它。 示例: 如何在Windows游戏上叠加图形? http://www.gamedev.net/community/forums/topic.asp?topic%5Fid=359794 C#将重叠forms“锁定”到另一个窗口的位置 更多信息:我确实设法获得一个窗体覆盖游戏窗口,并将其父设置为使用SetParent。 然而,这并不能很好地工作,因为它根本无法全屏工作,并且透明度不起作用。 (基本上有一个透明度键,TopMost设置为TRUE。)我真的想找到一个不同的方法。
谁能告诉我如何在C#中挂钩/覆盖DirectX游戏? 我已经尝试使用全屏C#窗口来重叠游戏,但它不会。 经过一番研究后,我发现我需要挂钩游戏,然后显示C#窗口。 任何人都可以解释我会怎么做? 我可以在DirectX游戏上显示C#表单吗?