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

正確に何が必要かはわかりませんが、たとえばフォームの不透明度プロパティを %75 に設定するよりも、完全に不透明な PNG を描画することができます。

編集:上記の答えがあなたが望んでいたものではない場合は、背景が透明な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 に答える