Farbpalette / Farbspektrum erstellen

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

UNZ

Betreff: Farbpalette / Farbspektrum erstellen

BeitragSa, Okt 23, 2010 17:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich brauchte für einen ColorPicker ein Farbspektrum.
Ich habe deswegen eine Function geschrieben, die eine Farbpalette in beliebiger Größe erstellt.

OK ich hätte auch ein Bild nehmen können, das ich lade, aber... NEEEE! Cool

Hier der Code:

Code: [AUSKLAPPEN]

Graphics 640,480
SetBuffer BackBuffer()

bild= FarbpaletteErstellen( Rand(256,GraphicsWidth()),Rand(256,GraphicsHeight()) )
MidHandle bild

ClsColor 64,0,64

;----------------------------------------------SCHLEIFE--------------------------------
Repeat
   Cls

   DrawBlock bild,GraphicsWidth()/2,GraphicsHeight()/2

   GetColor(MouseX(),MouseY())
   Text 0,0, "R: " + ColorRed() + " G: " + ColorGreen() + " B:" + ColorBlue()

   Flip

Until KeyHit(1)

End

;--------------------------------------FARBPALETTE ERSTELLEN-----------------------------------
Function FarbpaletteErstellen(breit,hoch)
   
   bild= CreateImage(breit,hoch)
   buffer= ImageBuffer(bild)
   xDiv#= 256./breit
   yDiv#= 256./hoch
   
   xDiv2#= breit/6
   
   num= 1
   LockBuffer buffer
   For y= 0 To hoch-1
      For x= 0 To breit-1
         r= 0
         g= 0
         b= 0

         ;R
         i= 0
            x01= breit*(i-2)/6: x02= breit*(i+1)/6
            ;Steigen innerhalb von  1/6 der Bildbreite und halten von 2/6 der Bildbreite
            If x >= x01 And x <= (x01+breit*3/6) r= 255*((x-x01)/XDiv2)
            ;Fallen innerhalb von 1/6 der Bildbreite
            If x >= x02 And x <= (x02+breit*1/6) r= 255*(1-(x-x02)/XDiv2)
         ;G
         i= 2
            x01= breit*(i-2)/6: x02= breit*(i+1)/6
            If x >= x01 And x <= (x01+breit*3/6) g= 255*((x-x01)/XDiv2)
            If x >= x02 And x <= (x02+breit*1/6) g= 255*(1-(x-x02)/XDiv2)
         ;B
         i= 4
            x01= breit*(i-2)/6: x02= breit*(i+1)/6
            If x >= x01 And x <= (x01+breit*3/6) b= 255*((x-x01)/XDiv2)
            If x >= x02 And x <= (x02+breit*1/6) b= 255*(1-(x-x02)/XDiv2)
         ;R
         i= 6
            x01= breit*(i-2)/6: x02= breit*(i+1)/6
            If x >= x01 And x <= (x01+breit*3/6) r= 255*((x-x01)/XDiv2)
            If x >= x02 And x <= (x02+breit*1/6) r= 255*(1-(x-x02)/XDiv2)

         If r > 255 r= 255
         If g > 255 g= 255
         If b > 255 b= 255
         If r < 0 r= 0
         If g < 0 g= 0
         If b < 0 b= 0

         If y < hoch/2;Richtung mitte volle Helligkeit entwickeln
            r= r*y/hoch*2
            g= g*y/hoch*2
            b= b*y/hoch*2
         EndIf
         If y > hoch/2;ab mitte Helligkeit dazu
            y0= hoch/2
            yDiv2#= Float(y-y0)/hoch*2
            r= r+(255-r)*yDiv2
            g= g+(255-g)*yDiv2
            b= b+(255-b)*yDiv2
         EndIf
         ;z.B.
         ;  0,  0,  0
         ;255, 92,  0
         ;255,128, 56
         ;255,255,255

         If r > 255 r= 255
         If g > 255 g= 255
         If b > 255 b= 255
         
         WritePixelFast x,y,$FF000000+r*$10000+g*$100+b, buffer
      Next
   Next
   UnlockBuffer buffer

   Return bild

End Function


Übrigens:
ich habe versucht die Formeln in eine "For i= 0 to 6 Step 2"-Schleife zu packen und zu sagen:
"if i= 0 r= farbe
if i= 2 g= farbe"
usw. aber das hat nicht funktioniert?!

kann man mal tüfteln... muss man aber nicht. Very Happy
Das muss besser als perfekt!

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group