; German forum: http://www.purebasic.fr/german/archive/viewtopic.php?t=718&highlight=
; Author: Danilo (updated for PB4.00 by blbltheworm)
; Date: 22. April 2003
; OS: Windows
; Demo: No
Declare LoadTransparentImage(Number,FileName$,TransColor,NewColor)
;Lädt ein Bild mit einer transparenten Hintergrundfarbe,
;so dass man es quasi transparent in einem ImageGadget()
;darstellen kann.
;Erklärung/Anwendung:
;--------------------
; Anwendung 1:
; lade Bild 1 aus der Datei "name.bmp",
; nimm die Farbe des ersten Pixels des
; Bildes (links,oben) als Transparenz-Farbe
; und ersetze diese mit der Farbe die PB
; auch für Gadgets als Hintergrund nimmt:
;image1 = LoadTransparentImage(1,"name.bmp",-1,-1)
; Anwendung 2:
; lade Bild 2 aus der Datei "name.bmp",
; nimm die Farbe des ersten Pixels des
; Bildes (links,oben) als Transparenz-Farbe
; und ersetze diese mit der Farbe die mit
; RGB(rot,grün,blau) bestimmt wurde (gelb):
;image2 = LoadTransparentImage(2,"name.bmp",-1,RGB($FF,$FF,$00))
; Anwendung 3:
; lade Bild 3 aus der Datei "name.bmp",
; nimm die Farbe RGB($00,$FF,$00), also grün
; als Transparenz-Farbe und ersetze diese
; mit der Farbe die PB auch für Gadgets als
; Hintergrund nimmt:
;image3 = LoadTransparentImage(3,"name.bmp",RGB($00,$FF,$00),-1)
; Anwendung 4:
; lade Bild 4 aus der Datei "name.bmp",
; nimm die Farbe RGB($00,$00,$FF), also blau
; als Transparenz-Farbe und ersetze diese
; mit der Farbe RGB($00,$00,$00), also schwarz:
;image4 = LoadTransparentImage(4,"name.bmp",RGB($00,$00,$FF),RGB($00,$00,$00))
; LoadTransparentImage(Nummer,DateiName$,TransparenzFarbe,NeueFarbe)
; ------------------------------------------------------------------
; by Danilo, 22.04.2003 - german forum
;
Procedure LoadTransparentImage(Number,FileName$,TransColor,NewColor)
;>
;> Number = ImageNumber
;> FileName$ = File Name
;> TransColor = RGB: Transparent Color, -1 = First Color in Picture
;> NewColor = RGB: New Color for TransColor, -1 = System Window Background
;>
Structure _LTI_BITMAPINFO
bmiHeader.BITMAPINFOHEADER
bmiColors.RGBQUAD[1]
EndStructure
Structure _LTI_LONG
l.l
EndStructure
hBmp = LoadImage(Number,FileName$)
If hBmp
hDC = StartDrawing(ImageOutput(Number))
If hDC
ImageWidth = ImageWidth(Number) : ImageHeight = ImageHeight(Number)
mem = GlobalAlloc_(#GMEM_FIXED|#GMEM_ZEROINIT,ImageWidth*ImageHeight*4)
If mem
bmi._LTI_BITMAPINFO
bmi\bmiHeader\biSize = SizeOf(BITMAPINFOHEADER)
bmi\bmiHeader\biWidth = ImageWidth
bmi\bmiHeader\biHeight = ImageHeight
bmi\bmiHeader\biPlanes = 1
bmi\bmiHeader\biBitCount = 32
bmi\bmiHeader\biCompression = #BI_RGB
If GetDIBits_(hDC,hBmp,0,ImageHeight(Number),mem,bmi,#DIB_RGB_COLORS) <> 0
If TransColor = -1
*pixels._LTI_LONG = mem+((ImageHeight-1)*ImageWidth*4)
TransColor = *pixels\l
Else
TransColor = RGB(Blue(TransColor),Green(TransColor),Red(TransColor))
EndIf
If NewColor = -1
NewColor = GetSysColor_(#COLOR_BTNFACE) ; #COLOR_WINDOW
EndIf
NewColor = RGB(Blue(NewColor),Green(NewColor),Red(NewColor))
*pixels._LTI_LONG = mem
For a = 1 To ImageWidth*ImageHeight
If *pixels\l = TransColor
*pixels\l = NewColor
EndIf
*pixels + 4
Next a
If SetDIBits_(hDC,hBmp,0,ImageHeight(Number),mem,bmi,#DIB_RGB_COLORS) <> 0
Result = hBmp
EndIf
EndIf
GlobalFree_(mem)
EndIf
EndIf
StopDrawing()
EndIf
ProcedureReturn Result
EndProcedure
image1 = LoadTransparentImage(1,"..\Gfx\Map.bmp",-1,-1)
If image1
OpenWindow(0,0,0,ImageWidth(1),ImageHeight(1),"Image",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
CreateGadgetList(WindowID(0))
ImageGadget(0,0,0,ImageWidth(1),ImageHeight(1),image1)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
Else
MessageRequester("ERROR","Cant load image!",#MB_ICONERROR)
EndIf
; IDE Options = PureBasic v4.00 (Windows - x86)
; Folding = -