RGB / HSV / Hue / Saturation

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

RGB / HSV / Hue / Saturation

Beitrag von AUGE_OHR »

hi,

ich hatte doch das zitiert
http://stackoverflow.com/questions/3560 ... lass-color
First step is to parse AARRGGBB. Then take the resulting RGB and convert to HSV. The pure Hue plus Saturation at full brightness is the base color. Now overlay Value as a grayscale at Alpha over top of pure Hue and Saturation to get the Aero color. Then overlay that color over the frame color: rgb(235, 235, 235) at Intensity to get the final Composite Aero color result.
also AARRGGBB habe ich nun als 4 x HEX und mit den RRGGBB bekomme ich unter Xbase++ "fast" dir richtige Farbe.
XB_DWM_Color.PNG
XB_DWM_Color.PNG (54.54 KiB) 2176 mal betrachtet
nun verstehe ich aber leider nicht wie das (mathematisch) weiter gehen soll mit dem "Overlay" ?
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: RGB / HSV / Hue / Saturation

Beitrag von AUGE_OHR »

so ich bin wieder ein Schritt weiter aber noch nicht ganz am Ziel
ich hatte es unter Win10 probiert ( Aero 3D von Win7 funktioniert nicht(?) virtuell ) und das erhalten
DWM_Render.PNG
DWM_Render.PNG (70.11 KiB) 2167 mal betrachtet
unter Win 8.1 Theme
DWM81_Render.PNG
DWM81_Render.PNG (47.46 KiB) 2167 mal betrachtet
und irgendwie stellte ich nun fest das die Lösung für die gesuchte Farbe (ohne Areo) ja schon im DWM Demo enthalten war.

Code: Alles auswählen

STATIC DLLFUNCTION DwmExtendFrameIntoClientArea( nHwnd, @sMargin) USING STDCALL FROM dwmapi.dll

METHOD AeroDialog:Create(oP,oO,aP,aS,aPP,lV)
  LOCAL cRect
  SUPER:Create(oP,oO,aP,aS,aPP,lV)

  // dialogs drawing area must be transparent
  ::drawingArea:SetColorBG( -1 )

  // extend DWM frame over the entire dialog
  cRect := L2Bin(-1) + L2Bin(-1) + L2Bin(-1) + L2Bin(-1)
  DwmExtendFrameIntoClientArea(::GetHwnd(), cRect )
RETURN(SELF)
das ist natürlich wesentlich eleganter ( und wohl schneller ) als lange die Farbwerte hin und her zu rechnen.

Nachteil der Lösung : unter Win7 erhält man damit ja Transparenz ... was nicht immer gewünscht ist ;)
gruss by OHR
Jimmy
Antworten