0

我正在尝试制作一个小恶作剧程序,通过在其上绘制 PNG 叠加层来模拟“破碎的屏幕”。我正在尝试使用 Windows 窗体(因为这是我最熟悉的),但到目前为止 - 没有运气。TransparencyKey我可以通过/技巧使表单透明BackgroundColor,但可以预见的是,当需要绘制 PNG 时它会分崩离析。还有其他想法吗?

更新:

为了澄清,我想要这个:

对 http://valts.21.lv/problem/CrackedRight.jpg

但目前我只得到这个:

错误 http://valts.21.lv/problem/CrackedWrong.jpg

Update2:我通过 Google 搜索从DeviantArt获得了叠加图像:

覆盖

4

1 回答 1

0

我不确定您到底想要什么,但是您可以绘制完整的不透明 PNG,例如,您可以将表单的 opacity 属性设置为 %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)

您可以在没有表格的情况下在屏幕上绘图。但是,您需要连续绘制,因为任何其他绘图都可能打破您的错觉。

于 2012-08-22T12:47:04.953 回答