edel kann hier bestimmt weiterhelfen, der kennt sich mit sowas aus.
Hier wäre mal ne Ausgangsbasis:
http://www.purearea.net/pb/CodeArchiv/W ... ndColor.pb
Jetzt brauchen wir nur noch ne Möglichkeit, dem Brush ein Bild zuzuweisen (oder so in der Art).
//EDIT: Ich habs:
Code: Alles auswählen
; German forum:
; Author: Unknown (updated for PB4.00 by blbltheworm), modified by hardfalcon
; OS: Windows
; Demo: No
hWnd = OpenWindow(0, 100, 200, 250, 260, "Image brush", #PB_Window_SystemMenu )
UsePNGImageDecoder()
UseJPEGImageDecoder()
hImage = LoadImage(#PB_Any,"Z:\usr\share\pixmaps\backgrounds\gnome\background-default.jpg")
Debug ImageDepth(hImage)
ExamineDesktops()
Debug DesktopDepth(0)
If ImageDepth(hImage) <> DesktopDepth(0) ;sonst gehts nicht, Farbtiefe des Bildes MUSS der Desktopfarbtiefe entsprechen!
hImage2 = CreateImage(#PB_Any,ImageWidth(hImage),ImageHeight(hImage),#PB_Image_DisplayFormat)
Debug ImageDepth(hImage2)
StartDrawing(ImageOutput(hImage2))
Debug DrawImage(ImageID(hImage),0,0)
StopDrawing()
FreeImage(hImage)
hImage = hImage2
EndIf
hBrush = CreatePatternBrush_(ImageID(hImage))
SetClassLong_(hWnd, #GCL_HBRBACKGROUND, hBrush)
InvalidateRect_(hWnd, #Null, #True)
Repeat
EventID.l = WaitWindowEvent()
If EventID = #PB_Event_CloseWindow
Quit = 1
EndIf
Until Quit = 1
DeleteObject_(hBrush) ; Brush löschen/freigeben!
FreeImage(hImage)
End
//EDIT2: Beinahe Credits vergessen: Den Trick, mit CreatePatternBrush ein Brush aus nem Image zu erstellen, hab ich aus
nem Code von Seymour Clufley ausm englischen Forum.
//EDIT3: Die Farbtiefe des Bildes muss der Desktopfarbtiefe entsprechen (d.h. JPGs funktionieren nicht, weil die nur max. 24bit haben können, da es keinen Alpha-Channel gibt).
//EDIT4: So, der Code funktioniert jetzt mit Bildern von beliebiger Farbtiefe, falls nötig, wird das geladene Image einfach auf ein neues Image mit der richtigen Farbtiefe gemalt, und dieses 2. Image als Brush verwendet.