Ant Moore
Ant Moore

Reputation: 123

VB.NET Winforms: Overlay two transparent images

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?

Upvotes: 4

Views: 10506

Answers (3)

CrazyTim
CrazyTim

Reputation: 7316

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))

Upvotes: 1

Blue0500
Blue0500

Reputation: 725

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

Upvotes: 4

OneFineDay
OneFineDay

Reputation: 9024

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.

Upvotes: 0

Related Questions