; 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 = -