Farbpalette / Farbspektrum erstellen
Übersicht

![]() |
UNZBetreff: Farbpalette / Farbspektrum erstellen |
![]() Antworten mit Zitat ![]() |
---|---|---|
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! ![]() 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. ![]() |
||
Das muss besser als perfekt! |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group