Farb-Verlauf RGB

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

Farb-Verlauf RGB

Beitrag von AUGE_OHR »

Farb-Verlauf RGB
moin,

ich versuche Farbe in meine Buttons zu bekommen.
leider komme ich nicht auf die RGB Farb-Kombinationen wo ich "mehr" Farben bekomme :banghead:

Code: Alles auswählen

Local aColor  := {255,0,0} 
LOCAL aSize := ::drawingArea:CurrentSize()

   //::aLayout := {8,6}  // 48
   IF ::nLayout = XBP_ORIENT_HORIZONTAL
      xSize := aSize[1]/::aLayout[1]
      ySize := aSize[2]/::aLayout[2]
   ELSE
      xSize := aSize[1]/::aLayout[2]
      ySize := aSize[2]/::aLayout[1]
   ENDIF

   FOR yPos := aSize[2]-ySize TO -1 STEP ySize *-1
*      aColor[2]  := (256/(aSize[2]/yPos))+48
*      aColor[2]  := (256/(aSize[2]/yPos))+96
       aColor[2]  := (256/(aSize[2]/yPos))+64

      FOR xPos := 0 TO aSize[1]-1 STEP xSize
         aColor[3]  := (256/(aSize[1]/(xPos+xSize)))
         aColor[1]  := (256/(aSize[2]/(yPos+ySize)))
48Farb_Button.jpg
48Farb_Button.jpg (79.56 KiB) 3858 mal betrachtet
wie bekomme ich für so ein X,Y Array das "volle Farbspektrum" :?:
gruss by OHR
Jimmy
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Farb-Verlauf RGB

Beitrag von Tom »

Dir fehlt die dritte Dimension. R/G/B, das sind drei, deshalb hat das Array auch drei Elemente, Wertebereich jeweils zwischen 0 und 255.
Herzlich,
Tom
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: Farb-Verlauf RGB

Beitrag von AUGE_OHR »

Tom hat geschrieben: Mo, 30. Apr 2018 10:49 Dir fehlt die dritte Dimension. R/G/B, das sind drei, deshalb hat das Array auch drei Elemente, Wertebereich jeweils zwischen 0 und 255.
JA ... was könnte man den als 3-Dim nehmen :idea:

deshalb bin ich am testen mit aColor[2] während ich bei

Code: Alles auswählen

         aColor[3]  := (256/(aSize[1]/(xPos+xSize)))
         aColor[1]  := (256/(aSize[2]/(yPos+ySize)))
die X,Y Koordinaten nutzen kann.

---

in \SOURCE\SYS\GraSys.prg gibt es ja GraMakeRGBColor() und GraGetRGBIntensity()

Code: Alles auswählen

FUNCTION GraMakeRGBColor( aRGB )
...
RETURN (aRGB[1] + (aRGB[2] * 256) + (aRGB[3] * 65536) + 16777216) 

FUNCTION GraGetRGBIntensity( nRGBColor )
...
   aRGB[1] := nRGBColor - 16777216     
   aRGB[3] := Int(aRGB[1] / 65536)

   aRGB[1] -= aRGB[3] * 65536    
   aRGB[2] := Int(aRGB[1] / 256)  

   aRGB[1] -= aRGB[2] * 256 
RETURN aRGB
kommt man vielleicht numerisch an einen Farb-Verlauf :?:
gruss by OHR
Jimmy
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Farb-Verlauf RGB

Beitrag von Martin Altmann »

Jimmy,
du verwechselst das was!
Einfach drei ineinander geschachtelte FOR-NEXT-Schleifen die jeweils von 0 bis 255 laufen (und für einen der drei Farbwerte stehen). In der innersten malst Du jeweils ein Pixel (oder ein Quadrat in deiner gewünschten Größe) mit den jeweiligen Laufvariablen als entsprechendem Farbwert.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Farb-Verlauf RGB

Beitrag von Tom »

RBG ist ein Farbraum, hat drei Dimensionen (es gibt auch vierdimensionale Farbmodelle). Das lässt sich auf einem Monitor nicht ohne weiteres darstellen. Deshalb gibt es so krude Ansätze für Colorpicker, die dann in Schattierungsdialoge verzweigen oder so. Du müsstest eine dritte (gelbe) Ebene schaffen, durch die man quasi hindurchblättern kann, während in der Tabelle die Rot- und Grünwerte iterieren und der Gelbwert steht. Aber wer will schon 255 Mal blättern?
Herzlich,
Tom
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: Farb-Verlauf RGB

Beitrag von AUGE_OHR »

moin,

ich habe weiter verschiedene RGB Versuche gemacht und nur so was raus bekommen
Color2_128.jpg
Color2_128.jpg (73.91 KiB) 3806 mal betrachtet
Color2_128_plus.jpg
Color2_128_plus.jpg (73.37 KiB) 3806 mal betrachtet
dann habe ich so was ausprobiert

Code: Alles auswählen

LOCAL aSize  := AppDesktop():CurrentSize()
LOCAL nColor := GraMakeRGBColor({255,255,255}) // 33554431
LOCAL nZero  := GraMakeRGBColor({  0,  0,  0}) // 16777216
LOCAL nStep  := (nColor-nZero) / (aSize[1]*aSize[2])

   FOR nX := 1 TO aSize[1] STEP 1
      FOR nY := 1 TO aSize[2] STEP 1
         nColor := nColor -nStep

         // verschiedene Versuche 
      NEXT
      nY := 0
   NEXT
aber das war nur Mist und langsam :angry4:

also dann ein andere Weg. ich habe einen Farbverlauf als Bitmap Vorgabe genommen ;-)

Code: Alles auswählen

LOCAL nhDC
   nhDC   := @user32:GetDC(hWnd)
   ...   
         nColor := @Gdi32:GetPixel(nhDC,nX,nY)
   ...
   @user32:ReleaseDC(hWnd,nhDC)
   @Gdi32:DeleteDC(nhDC)
grob gesagt : ich hole mir einen Pixel / Farbe relative zu meiner Position aus der Vorlage

das klappt auch sehr gut aber da ich gegen 0 (zero) zähle erhalte ich unten {0,0,0} -> Weiss
Full_Color_48.jpg
Full_Color_48.jpg (72.95 KiB) 3806 mal betrachtet

Code: Alles auswählen

   nXSize := oBMP:xSize
   nYSize := oBMP:ySize

   FOR yPos := aSize[2]-ySize TO -1 STEP ySize *-1
      FOR xPos := 0 TO aSize[1]-1 STEP xSize
         ... 
         // x-Achse kein Problem
         nX := ROUND(nXSize/aSize[1]*(xPos),0)

         // Workaround ... na ja 
         IF yPos+1 < ySize 
            nY := ROUND(nYSize/aSize[2]*(yPos+1),0)
         ELSE
            nY := ROUND(nYSize/aSize[2]*(yPos),0)
         ENDIF
         nColor := @Gdi32:GetPixel(nhDC,nX,nY)

      NEXT
      xPos := 0
   NEXT
wer hilft mir mal auf die Sprünge wie ich eine Zeile "mehr" als Farb Unterteilung bekomme sprich Farbe in die unterste Zeile :idea:
gruss by OHR
Jimmy
Antworten