我正在尝试制作一个小恶作剧程序,通过在其上绘制PNG覆盖来模拟“破碎屏幕”。我正在尝试使用Windows Forms(因为这是我最熟悉的),但到目前为止 - 没有运气。我可以通过TransparencyKey
/ BackgroundColor
技巧使表单透明,但是当需要绘制PNG时,它可以预见地分崩离析。还有其他想法吗?
更新
澄清一下,我想要这个:
Right http://valts.21.lv/problem/CrackedRight.jpg
但目前我只是得到了这个:
Wrong http://valts.21.lv/problem/CrackedWrong.jpg
更新2:我通过Google搜索从DeviantArt获得了叠加图片:
Overlay http://fc05.deviantart.net/fs70/f/2010/117/a/2/Broken_Screen_Overlay_by_window7.png
答案 0 :(得分:0)
我不确定你想要什么,但是你可以绘制完全不透明的PNG,而不是你可以将表格的不透明度属性设置为%75。
编辑:如果上面的答案不是你想要的,你可以创建一个带有透明背景的PictureBox,设置它的底座填充,不要把那个控件带到前面。当您想要显示图像时,您将把它带到前面。然后通过以下方式设置图像的不透明度(如果需要)
Public Function SetImgOpacity(ByRef imgPic As Image, ByVal imgOpac As Single) As Image
Dim bmpPic As New Bitmap(imgPic.Width, imgPic.Height)
Dim gfxPic As Graphics = Graphics.FromImage(bmpPic)
Dim cmxPic As New ColorMatrix()
Dim iaPic As New ImageAttributes()
cmxPic.Matrix33 = imgOpac
iaPic.SetColorMatrix(cmxPic, ColorMatrixFlag.[Default], ColorAdjustType.Bitmap)
gfxPic.DrawImage(imgPic, New Rectangle(0, 0, bmpPic.Width, bmpPic.Height), 0, 0, imgPic.Width, imgPic.Height, GraphicsUnit.Pixel, iaPic)
gfxPic.Dispose()
iaPic.Dispose()
Return bmpPic
End Function
现在您可以将PictureBox的图像设置为新的半透明图像。
编辑2:这是一个很好的技巧
使您的表单不可见,并使用计时器使用此资源中的“a”是您的图像:
Dim x As Graphics = Graphics.FromHwnd(IntPtr.Zero)
x.DrawImage(My.Resources.a, 0, 0)
您可以在没有表格的情况下在屏幕上绘图。但是,您需要连续绘制,因为任何其他绘图都可能会打破您的错觉。