VB.NET Winforms: Overlay two transparent images

痞子三分冷 提交于 2019-12-14 03:46:46

问题


I am attempting to overlay two transparent images within a winform, but it keeps rendering the form's background image behind the top transparent image, as opposed to the second image...

My basic set up is I have two panels and in each panel is a picturebox. Each image in the picture boxes have some transparent areas. I've set the BackColor of the panels to color.transparent.

When I make one panel overlay the other I'm seeing the form's backcolor come through as opposed to the underlaying image.

Am I missing a property that I can set?


回答1:


You only need one picture box. The overlay can be done with graphics.

Imports System.Drawing

Dim OverlayImage As New Bitmap("Some Path", True)
Dim BackImage As New Bitmap("Some Path", True)
g As Graphics = Graphics.FromImage(BackImage)

g.DrawImage(OverlayImage, 0, 0)
pictureBox1.Image = BackImage


If you want to have the timer move the overlayed image, then first, make a variable
Dim posX As Integer = 0
then use
g.DrawImage(OverlayImage, posX, 0)
Now when your timer ticks, increment posX by 10


回答2:


Here's a complete function to overlay two images (adapted from Blue0500's answer):

''' <summary> Return a new image with one superimposed over the other. </summary>
Function OverlayImgs(ByVal BackgroundImg As System.Drawing.Bitmap, ByVal OverlayImg As System.Drawing.Bitmap, Position As System.Drawing.Point) As System.Drawing.Bitmap
    Dim g = System.Drawing.Graphics.FromImage(BackgroundImg)
    g.DrawImage(OverlayImg, Position)
    Return BackgroundImg
End Function

Usage:

lblTest.Image = OverlayImgs(Img1, Img2, New Point(16, 16))



回答3:


You don't need a PictureBox for this unless you are using it for the canvas. You can draw all images to a Rectangle structure and move them around. Personally I would create a class object that has a Rectangle, Image and other properties and hold them in a collection. Then you simply draw the class objects by there properties including location. If there images contain transparencies they will overlay for you. This also gives you a method to check for collisions via the Rectangle.IntersectsWith function.



来源:https://stackoverflow.com/questions/20180200/vb-net-winforms-overlay-two-transparent-images

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!