gnozal wrote:
Yes, good idea.
I have added a callback to refresh the window.
Thanks gonzal!

- I was to lazy to do this
Here is another one (in german) using a fast asm
BrightnessRGB(RGB_Color.l, Delta.w)
Code:
;/ RGB Farbhelligkeit korrigieren PB 3.92 / ASM
;/ Eine schnelle ASM-Routine zur "om the fly" Korrektur der RGB Farbhelligkeit
;/ BrightnessRGB(RGB_Color.l, Delta.w) Delta -255...255 - andere Werte sind sinnlos
;/ 02/2005 sverson
Enumeration
#DemoWindow
#DemoImage
#DemoImageGeaget
#ColorTrackBar
#BrightnesTrackBar
EndEnumeration
Structure SYSCOLORS
ColorConst.s
ColorNumber.l
EndStructure
NewList ColorList.SYSCOLORS()
Procedure InitColorList() ;/ Systemfarben
AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_3DDKSHADOW" : ColorList()\ColorNumber = GetSysColor_(#COLOR_3DDKSHADOW)
AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_3DFACE = #COLOR_BTNFACE" : ColorList()\ColorNumber = GetSysColor_(#COLOR_3DFACE)
AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_3DHILIGHT = #COLOR_BTNHIGHLIGHT" : ColorList()\ColorNumber = GetSysColor_(#COLOR_3DHILIGHT)
AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_3DHIGHLIGHT = #COLOR_BTNHIGHLIGHT" : ColorList()\ColorNumber = GetSysColor_(#COLOR_3DHIGHLIGHT)
AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_3DLIGHT" : ColorList()\ColorNumber = GetSysColor_(#COLOR_3DLIGHT)
AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_3DSHADOW = #COLOR_BTNSHADOW" : ColorList()\ColorNumber = GetSysColor_(#COLOR_3DSHADOW)
AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_ACTIVEBORDER" : ColorList()\ColorNumber = GetSysColor_(#COLOR_ACTIVEBORDER)
AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_ACTIVECAPTION" : ColorList()\ColorNumber = GetSysColor_(#COLOR_ACTIVECAPTION)
AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_APPWORKSPACE" : ColorList()\ColorNumber = GetSysColor_(#COLOR_APPWORKSPACE)
AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_BACKGROUND" : ColorList()\ColorNumber = GetSysColor_(#COLOR_BACKGROUND)
AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_BTNFACE" : ColorList()\ColorNumber = GetSysColor_(#COLOR_BTNFACE)
AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_BTNHIGHLIGHT" : ColorList()\ColorNumber = GetSysColor_(#COLOR_BTNHIGHLIGHT)
AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_BTNHILIGHT = #COLOR_BTNHIGHLIGHT" : ColorList()\ColorNumber = GetSysColor_(#COLOR_BTNHILIGHT)
AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_BTNSHADOW" : ColorList()\ColorNumber = GetSysColor_(#COLOR_BTNSHADOW)
AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_BTNTEXT" : ColorList()\ColorNumber = GetSysColor_(#COLOR_BTNTEXT)
AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_CAPTIONTEXT" : ColorList()\ColorNumber = GetSysColor_(#COLOR_CAPTIONTEXT)
AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_DESKTOP = #COLOR_BACKGROUND" : ColorList()\ColorNumber = GetSysColor_(#COLOR_DESKTOP)
AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_GRAYTEXT" : ColorList()\ColorNumber = GetSysColor_(#COLOR_GRAYTEXT)
AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_HIGHLIGHT" : ColorList()\ColorNumber = GetSysColor_(#COLOR_HIGHLIGHT)
AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_HIGHLIGHTTEXT" : ColorList()\ColorNumber = GetSysColor_(#COLOR_HIGHLIGHTTEXT)
AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_INACTIVEBORDER" : ColorList()\ColorNumber = GetSysColor_(#COLOR_INACTIVEBORDER)
AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_INACTIVECAPTION" : ColorList()\ColorNumber = GetSysColor_(#COLOR_INACTIVECAPTION)
AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_INACTIVECAPTIONTEXT" : ColorList()\ColorNumber = GetSysColor_(#COLOR_INACTIVECAPTIONTEXT)
AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_INFOBK" : ColorList()\ColorNumber = GetSysColor_(#COLOR_INFOBK)
AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_INFOTEXT" : ColorList()\ColorNumber = GetSysColor_(#COLOR_INFOTEXT)
AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_MENU" : ColorList()\ColorNumber = GetSysColor_(#COLOR_MENU)
AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_MENUTEXT" : ColorList()\ColorNumber = GetSysColor_(#COLOR_MENUTEXT)
AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_SCROLLBAR" : ColorList()\ColorNumber = GetSysColor_(#COLOR_SCROLLBAR)
AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_WINDOW" : ColorList()\ColorNumber = GetSysColor_(#COLOR_WINDOW)
AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_WINDOWFRAME" : ColorList()\ColorNumber = GetSysColor_(#COLOR_WINDOWFRAME)
AddElement(ColorList()) : ColorList()\ColorConst = "#COLOR_WINDOWTEXT" : ColorList()\ColorNumber = GetSysColor_(#COLOR_WINDOWTEXT)
AddElement(ColorList()) : ColorList()\ColorConst = "#COLORONCOLOR" : ColorList()\ColorNumber = GetSysColor_(#COLORONCOLOR)
;/ + 3 Demofarben
AddElement(ColorList()) : ColorList()\ColorConst = "Demo Blue" : ColorList()\ColorNumber = RGB(0,0,128)
AddElement(ColorList()) : ColorList()\ColorConst = "Demo Green" : ColorList()\ColorNumber = RGB(0,128,0)
AddElement(ColorList()) : ColorList()\ColorConst = "Demo Red" : ColorList()\ColorNumber = RGB(128,0,0)
EndProcedure
Procedure BrightnessRGB(RGB_Color.l, Delta.w);- RGB farbhelligkeit korrigieren
Protected ColorBack.l
!XOR Eax, Eax ;/ EAX-Register löschen
!XOR Ebx, Ebx ;/ EBX-Register löschen
!XOR Ecx, Ecx ;/ ECX-Register löschen
!MOV BX, Word [Esp+4] ;/ Delta-Wert in BX einlesen
!MOV Edx, dWord [Esp] ;/ RGB-Farbwert in EDX einlesen
!MOV AL, DL ;/ R-Wert nach AL
!CALL .adddelta ;/--> DELTA ZU AL (R) ADDIEREN ++
!MOV CL, AL ;/ R-Wert in CL zwischenspeichern
!MOV AL, DH ;/ G-Wert nach AL
!CALL .adddelta ;/--> DELTA ZU AL (G) ADDIEREN ++
!MOV ch, AL ;/ G-Wert in CH zwischenspeichern
!BSWAP Edx ;/ B-Wert via BYTESWAP in DH zugänglich machen
!MOV AL, DH ;/ G-Wert nach AL
!CALL .adddelta ;/--> DELTA ZU AL (B) ADDIEREN ++
!MOV DH, AL ;/ G-Wert nach DH zurückschreiben
!BSWAP Edx ;/ G-Wert via BYTESWAP wieder an richtige Position bringen
!MOV dx, cx ;/ R und G Wert aus Zwischenspeicher CX wieder in DX schreiben
!JMP .ready ;/==> FARBKORREKTUR BEENDET ++
!.adddelta: ;/ ++ DELTA ZU AL ADDIEREN ++
!ADD AX, BX ;/ Delta aus BX zu AX addieren
!BT AX, 15 ;/ auf Negativwert testen
!JC .negativ ;/==> NEUER WERT KLEINER NULL ++
!CMP AX, $FF ;/ auf Maximalwert testen
!JBE .inrange ;/==> NEUER ZWISCHEN 0 UND 255 ++
!.bigger: ;/ ++ NEUER WERT GRÖSSER 255 ++
!MOV AX, $00FF ;/ AX auf 255 begrenzen
!JMP .inrange ;/==> WERT IN DEN GRENZEN ++
!.negativ: ;/ ++ NEUER WERT KLEINER NULL ++
!XOR Eax, Eax ;/ AX auf 0 begrenzen
!.inrange: ;/ ++ WERT IN DEN GRENZEN ++
!RET ;/ Rücksprung aus Makro
!.ready: ;/ ++ FARBKORREKTUR BEENDET ++
!MOV [Esp+6], Edx ;/ Korrigierten RGB-Wert über ColorBack ausgeben
ProcedureReturn ColorBack
EndProcedure
Procedure UpdateImage(ITitle$,IColor.l,iDelta.w);/ Image aktualisieren
UseImage(#DemoImage)
StartDrawing(ImageOutput())
newColor = BrightnessRGB(IColor,iDelta)
Box(0,0,280,200,IColor)
Box(78,48,124,104,RGB(255,255,255))
Box(79,49,122,102,RGB(0,0,0))
Box(80,50,120,100,newColor)
DrawingMode(1)
FrontColor(255,255,255)
Locate(10, 10)
DrawText(ITitle$)
Locate(90, 65)
DrawText("R"+RSet(Str(Red(newColor)),3,"0")+"G"+RSet(Str(Green(newColor)),3,"0")+"b"+RSet(Str(Blue((newColor))),3,"0"))
Locate(90, 80)
DrawText("delta: "+Str(iDelta))
Locate(90, 100)
FrontColor(0,0,0)
DrawText("delta: "+Str(iDelta))
Locate(90, 115)
DrawText("R"+RSet(Str(Red(newColor)),3,"0")+"G"+RSet(Str(Green(newColor)),3,"0")+"b"+RSet(Str(Blue((newColor))),3,"0"))
Locate(10, 175)
DrawText(ITitle$)
StopDrawing()
EndProcedure
If OpenWindow(#DemoWindow,0,0,320,240,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"Helligkeitsregler") And CreateGadgetList(WindowID(#DemoWindow))
If CreateImage(#DemoImage, 280, 200)
InitColorList()
LastElement(ColorList())
UpdateImage(ColorList()\ColorConst,ColorList()\ColorNumber,0)
ImageGadget(#DemoImageGeaget,5,5,280,200,UseImage(#DemoImage),#PB_Image_Border)
TrackBarGadget(#BrightnesTrackBar, 5, 215, 280, 20,0,510)
SetGadgetState(#BrightnesTrackBar,255)
TrackBarGadget(#ColorTrackBar, 295, 5, 20, 200,1,CountList(ColorList()),#PB_TrackBar_Vertical)
SetGadgetState(#ColorTrackBar,CountList(ColorList()))
Repeat :
WinEvent = WaitWindowEvent()
Select WinEvent
Case #PB_EventGadget
SelectElement(ColorList(),GetGadgetState(#ColorTrackBar)-1)
UpdateImage(ColorList()\ColorConst,ColorList()\ColorNumber,GetGadgetState(#BrightnesTrackBar)-255)
SetGadgetState(#DemoImageGeaget,UseImage(#DemoImage))
EndSelect
Until WinEvent = #PB_Event_CloseWindow
EndIf
EndIf
End

sverson