Drawing transparent images to windows

Windows specific forum
BackupUser
PureBasic Guru
PureBasic Guru
Posts: 16777133
Joined: Tue Apr 22, 2003 7:42 pm

Post by BackupUser »

Restored from previous forum. Originally posted by Shagwana.

Right, been a while since i last run pure :(. But here I am trying to code my 2d map editor init!. I have figured out how to draw images using the drawimage() command and how to have them inverted with the drawingmode() command. The next problem i have is;

How do I draw transparent images to windows? nb : not alfa images!. Say for example I have a game sprite on a blue background (0,0,255). I want to be able to draw the said image to a window, and not have the blue colour drawn at all!.

I have tryed setting the background color to 0,0,255 (using backcolour())then drawing the image using a drawingmode(1), which should in theroy work :), but dont!.

What follows is some example code of my problem, what i am trying to do is to get the blue circle to be see through - so that i can see the text that is behind in the circle.

Code: Select all

 
If OpenWindow(0, 100, 100, 300, 200, $10CF0000, "2D Drawing Test")

  ; Create an offscreen image, with a green circle in it.
  ; It will be displayed later
  ;
  If CreateImage(1, 100, 100)
;  If LoadImage(1,"image1.bmp")     
    If StartDrawing(ImageOutput())
      BackColour(0,0,255)
      FrontColour(255,255,255)   ;White colour 
      Box(0,0,100,100)
      FrontColour(0,0,255)       ;Blue that i want to make see-through
      Circle(50, 50, 30)
      StopDrawing()
    EndIf
  EndIf
  
  ;
  ; This is the 'event loop'. All the user actions are processed here.
  ; It's very easy to understand: when an action occurs, the EventID
  ; isn't 0 and we just have to see what have happened...
  ;
  
  Repeat

    Repeat
      EventID.l = WaitWindowEvent()
    Until EventID  0

    If EventID = #PB_EventRepaint   ; If the user has resized the window or anything, we will repaint our graphic
      Gosub SomeGraphics
    EndIf

  Until EventID = #PB_EventCloseWindow  ; If the user has pressed on the close button
  
EndIf

End   ; All the opened windows are closed automatically by PureBasic


;
; Some 2D graphics functions...
;

SomeGraphics:

  StartDrawing(WindowOutput())

  BackColour(0,0,255) ; Change the text back and front colour
  FrontColour(255,255,255) 

  Locate(10, 10)
  DrawText("Hello, background drawn")
  DrawingMode(1)
  Locate(10, 30)
  DrawText("Hello, only text")
  
  Locate(10, 90)
  DrawText("THIS SHOULD BE VISABLE")  
      
  DrawingMode(1) 

  DrawImage(ImageID(), 50, 50) ; Display our image !

  StopDrawing() ; This is absolutely needed when the drawing operations are finished !!! Never forget it !

Return  
http://www.sublimegames.com