Farbverlauf über alle Farben...
Übersicht

![]() |
EPSBetreff: Farbverlauf über alle Farben... |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi zusammen, ich suche nach einer Funktion die mir ein Bild erzeugen kann in welchem ein Farbverlauf quer durch alle Farben dargestellt wird.
so wie auf diesem Bild hier: ![]() Die Routine sollte an eine beliebige Bildgröße anpassbar - also ein wenig variabel - sein. Ausser auf BlitzBase.de hab ich nirgends eine solche Routine gefunden und mit der genannten komme ich irgendwie nicht klar, sprich ich bekomme es nicht hin das ganze in ein kleineres Bild reinzuwurschteln. Für Tipps wäre ich echt dankbar. Eine prinipielle Routine die mir erklärt wie man sowas macht würde mir auch schon helfen. Vielen Dank...EPS |
||
![]() |
Chester |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] for x = 0 to ende Color r,g,b line x,0,x,50 if r < 255 and status = 0 then r = r +1 if r= 255 and g < 255 and status = 0 then g = g +1 if g = 255 and b < 255 and status = 0 then b=b+1 if r = 255 and g = 255 and b = 255 then status = 1 if status = 1 then if r > 0 then r = r -1 if g > 0 and r = 0 then g = g - 1 if b > 0 and g = 0 then b = b -1 exit endif x = x +1 next Weiß nich obs funtzt is schnell dahin gecodet |
||
![]() |
EPS |
![]() Antworten mit Zitat ![]() |
---|---|---|
nein, tut es nicht
noch jemand anders mit nem Tipp? |
||
![]() |
Travis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nicht ganz das geforderte Format, aber wenigstens schon mal ein breites Spektrum.
Code: [AUSKLAPPEN] Graphics 800,600,16,2 For x = 0 To 255 For y = 0 To 255 r = y g = x b = 255-y Color r,g,b Plot x,y Next Next WaitKey |
||
www.funforge.org
Ich hasse WASD-Steuerung. Man kann alles sagen, man muss es nur vernünftig begründen können. |
![]() |
EPS |
![]() Antworten mit Zitat ![]() |
---|---|---|
hmmm...auch recht hübsch,
ist aber leider nicht ganz das gewünschte sowohl das nicht alle Farben enthalten sind, als auch das es nicht an beliebige Bildgrößen anpassbar ist. Trotzdem danke |
||
![]() |
Travis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wirklich alle Farben kannst du sowieso nicht darstellen. Das sind immerhin etwa 16,5 Mio. | ||
www.funforge.org
Ich hasse WASD-Steuerung. Man kann alles sagen, man muss es nur vernünftig begründen können. |
![]() |
EPS |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das ist mir auch klar, aber man kann mittels eines Steps doch irgend wie die Abstände zwischen den Farben errechnen und dann trotzdem solch ein Bild erzeugen.
Es geht halt nur darum das komplette Farbspektrum gleichmäßig in einem Bild abzudecken . |
||
![]() |
Travis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Man müsste sich erstmal überlegen, wie das Beispielbild überhaupt funktioniert. Gehen wir es mal Spaltenweise von oben nach unten durch. Betrachten wir auch erstmal nur die Mitte.
Zuerst haben wir nur Rot(255). Dann wird schrittweise Grün hinzugefügt, bis unsere Farbe schließlich gelb wird. Jetzt wird der Rotanteil schrittweise entfernt, bis nur Grün übrig bleibt. Dann wird der Blauanteil erhöht, bis wir einen Hellblauen Farbton haben. Jetzt wird der Grünanteil entfernt, bis wir ein sattes Blau haben. Anschließend wird der Rotanteil schrittweise erhöht - wir haben jetzt Mangenta. Nun entfernen wir den Blauanteil und es bleibt Rot übrig. Jetzt müssen wir nur noch die Streifen in den Griff kriegen. Im unteren Bildbereich, können wir ja einfach schrittweise die Intensität der Farbtöne (bei gleichem RGB-Verhältnis) abschwächen. Im oberen Teil müssten wir der Farbe schrittweise die Fehlenden Farbanteile hinzufügen, bis wir einen reinen weisston haben. |
||
www.funforge.org
Ich hasse WASD-Steuerung. Man kann alles sagen, man muss es nur vernünftig begründen können. |
![]() |
EPS |
![]() Antworten mit Zitat ![]() |
---|---|---|
das hast du schön gesagt und nun noch einmal in BlitzBasic ![]() |
||
![]() |
Travis |
![]() Antworten mit Zitat ![]() |
---|---|---|
EDIT:
Ich habe es jetzt mal umgesetzt. Allerdings fehlt noch der obere Rand. Und die Formeln für den unteren Rand sind noch nicht ganz korrekt. Außerdem spinnt die Scalierung etwas. Für heute reicht's aber erstmal. Hoffentlich kommt morgen jemand mit einer 'simpleren' Lösung für die man nicht fast 2000 Byte Code braucht. Ich kann mir einfach keine andere Methode denken als dieses logische stufenweise anpassen der Farbwerte. Ich werde es dann morgen aber noch etwas optimieren ![]() Die mittlerweile 4. Version: Code: [AUSKLAPPEN] ; entfernt, weil veraltet ; neue Version siehe weiter unten |
||
www.funforge.org
Ich hasse WASD-Steuerung. Man kann alles sagen, man muss es nur vernünftig begründen können. |
- Zuletzt bearbeitet von Travis am Do, Dez 30, 2004 15:46, insgesamt einmal bearbeitet
![]() |
EPS |
![]() Antworten mit Zitat ![]() |
---|---|---|
stimmt, ist in der Tat etwas umfangreich ![]() Aber trotzdem vielen Dank für deine Mithilfe...ich hab mich jetzt doch dazu hinreißen lassen mein kleines Köpfchen zum Glühen zu bringen und hab die Funktion selber geschrieben. Das Verfahren basiert auf dem Beispiel von BlitzBase, jedoch ist meine Version mathematisch korrekter und halt an jede Bildgröße anpassbar. Vielleicht kann es ja mal jemand brauchen... Code: [AUSKLAPPEN] Graphics 800,600,32,2
;--> Die exakte größe der Dimension wird in der Funktion eingestellt Dim col(2,2) ;--> Beispiel image = CreateImage(630,278) create_spectrum(image) ClsColor 80,80,80 SetBuffer BackBuffer() Cls DrawBlock image,50,150 Flip WaitKey() FreeImage image Function create_spectrum(img) ;================================================================= ; Diese Funktion erzeugt ein komplettes Farbspektrum in einem Bild ;================================================================= w = ImageWidth(img) h = ImageHeight(img) buffer = ImageBuffer(img) Dim col(w,h) h = h/2 w6# = w / Float(6) col_stepx# = 255 / w6 col_stepy# = 1 / Float(h) For x = 0 To w6 - 1 col(x,0) = 255 col(x,1) = x * col_stepx col(x,2) = 0 col(x+w6,0) = 255 - x * col_stepx col(x+w6,1) = 255 col(x+w6,2) = 0 col(x+w6*2,0) = 0 col(x+w6*2,1) = 255 col(x+w6*2,2) = x * col_stepx col(x+w6*3,0) = 0 col(x+w6*3,1) = 255 - x * col_stepx col(x+w6*3,2) = 255 col(x+w6*4,0) = x * col_stepx col(x+w6*4,1) = 0 col(x+w6*4,2) = 255 col(x+w6*5,0) = 255 col(x+w6*5,1) = 0 col(x+w6*5,2) = 255 - x * col_stepx Next LockBuffer buffer For x = 0 To w For y = 0 To h r = col(x,0) * y * col_stepy# g = col(x,1) * y * col_stepy# b = col(x,2) * y * col_stepy# rgb = r*$10000 + g*$100 + b WritePixelFast x, y, rgb, buffer r = 255 - (255 - col(x,0)) / Float(h) * y g = 255 - (255 - col(x,1)) / Float(h) * y b = 255 - (255 - col(x,2)) / Float(h) * y rgb = r*$10000 + g*$100 + b WritePixelFast x, 2*h-y, rgb, buffer Next Next UnlockBuffer buffer End Function |
||
![]() |
Chester |
![]() Antworten mit Zitat ![]() |
---|---|---|
so jetzt funtzt meine Version:
Graphics 800,600,16,1 SetBuffer backbuffer() For x = 0 to 255*6 Color r,g,b Line x,y,x,y+10 if r < 255 and status = 0 then r = r +1 if r= 255 and g < 255 and status = 0 then g = g +1 if g = 255 and b < 255 and status = 0 then b=b+1 if r = 255 and g = 255 and b = 255 then status = 1 if status = 1 then if r > 0 then r = r -1 if g > 0 and r = 0 then g = g - 1 if b > 0 and g = 0 then b = b -1 If r = 0 And g = 0 And b = 0 Then status = 2 EndIf If status = 2 Then If r<255 Then r = r + 1 If b<255 Then b = b + 1 If r = 255 And b = 255 Then status = 3 : r=0:g=0:b=0 EndIf If status = 3 Then If r<255 Then r=r+1 If g<255 Then g=g+1 If b<255 Then b=b+1 If r=255 And g=255 And b=255 Then exit EndIf x = x +0.0000001 If x = 150 Then x = 0 : y = y +11 If KeyHit(1) Then End Flip Next WaitKey() |
||
![]() |
Travis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jetzt auch meine fertige Version:
Code: [AUSKLAPPEN] ; RGB Farbspektrum ; Copyright (C) Dez 2004, Travis AppTitle "RGB Spectrum by Travis" Graphics 800,600,32,2 Const Size# = .5 ; Größe mal 255 Pixel (0.5 = * 2 / 2 = * .5) Const StepX# = 6*Size ; Step für X-Skalierung (kleiner heisst größer) Const StepY# = 1*Size ; Step für Y-Skalierung (kleiner heisst größer) ; spectrum DrawSpectrum() ; main loop Repeat mx = MouseX() my = MouseY() GetColor mx,my r = ColorRed() g = ColorGreen() b = ColorBlue() Color 200,200,200 Text 560,85, "Press mousebutton to grap" Text 610,15, "Selected color" Color r,g,b Rect 600, 35, 135, 30, 1 Color gr,gg,gb Rect 600, 120, 135, 30, 1 If MouseHit(1) Then Color 0,0,0 Rect 590, 110, 155, 70, 1 gr = r gg = g gb = b Color r,g,b Text 630, 160, r + " " + g + " " + b EndIf Until KeyHit(1) End Function DrawSpectrum() For ty# = 0 To 255 Step StepY y = y + 1 x = 0 p# = ty/255 ; Y-Zeile in Prozent (Faktor) b = 0 r = 255 For g = 0 To 255 Step StepX x = x + 1 If p# <= .50 Then TempR = r TempG = g + ((0.5-p) * (255 - g)*2) TempB = b + ((0.5-p) * (255 - b)*2) Color Limit(TempR), Limit(TempG), Limit(TempB) Else TempR = r*(2.0-p*2.0) TempG = g*(2.0-p*2.0) TempB = b*(2.0-p*2.0) Color Limit(TempR), Limit(TempG), Limit(TempB) EndIf Rect x,y, 1, 1 Next g = 255 For r = 255 To 0 Step - StepX x = x + 1 If p# <= .50 Then TempR = r + ((0.5-p) * (255 - r)*2) TempG = g TempB = b + ((0.5-p) * (255 - b)*2) Color Limit(TempR), Limit(TempG), Limit(TempB) Else TempR = r*(2.0-p*2.0) TempG = g*(2.0-p*2.0) TempB = b*(2.0-p*2.0) Color Limit(TempR), Limit(TempG), Limit(TempB) EndIf Rect x,y, 1, 1 Next r = 0 g = 255 For b = 0 To 255 Step StepX x = x + 1 If p# <= .50 Then TempR = r + ((0.5-p) * (255 - r)*2) TempG = g TempB = b + ((0.5-p) * (255 - b)*2) Color Limit(TempR), Limit(TempG), Limit(TempB) Else TempR = r*(2.0-p*2.0) TempG = g*(2.0-p*2.0) TempB = b*(2.0-p*2.0) Color Limit(TempR), Limit(TempG), Limit(TempB) EndIf Rect x,y, 1, 1 Next b = 255 For g = 255 To 0 Step - StepX x = x + 1 If p# <= .50 Then TempR = r + ((0.5-p) * (255 - r)*2) TempG = g + ((0.5-p) * (255 - g)*2) TempB = b Color Limit(TempR), Limit(TempG), Limit(TempB) Else TempR = r*(2.0-p*2.0) TempG = g*(2.0-p*2.0) TempB = b*(2.0-p*2.0) Color Limit(TempR), Limit(TempG), Limit(TempB) EndIf Rect x,y, 1, 1 Next g = 0 b = 255 For r = 0 To 255 Step StepX x = x + 1 If p# <= .50 Then TempR = r + ((0.5-p) * (255 - r)*2) TempG = g + ((0.5-p) * (255 - g)*2) TempB = b Color Limit(TempR), Limit(TempG), Limit(TempB) Else TempR = r*(2.0-p*2.0) TempG = g*(2.0-p*2.0) TempB = b*(2.0-p*2.0) Color Limit(TempR), Limit(TempG), Limit(TempB) EndIf Rect x,y, 1, 1 Next r = 255 For b = 255 To 0 Step - StepX x = x + 1 If p# <= .50 Then TempR = r TempG = g + ((0.5-p) * (255 - g)*2) TempB = b + ((0.5-p) * (255 - b)*2) Color Limit(TempR), Limit(TempG), Limit(TempB) Else TempR = r*(2.0-p*2.0) TempG = g*(2.0-p*2.0) TempB = b*(2.0-p*2.0) Color Limit(TempR), Limit(TempG), Limit(TempB) EndIf Rect x,y, 1, 1 Next Next ; ty End Function Function Limit(col) If col < -255 Then col = -255 If col > 255 Then col = 255 col = Abs(col) Return col End Function |
||
www.funforge.org
Ich hasse WASD-Steuerung. Man kann alles sagen, man muss es nur vernünftig begründen können. |
- Zuletzt bearbeitet von Travis am Do, Dez 30, 2004 15:38, insgesamt 2-mal bearbeitet
![]() |
TheShadowModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
du musst HSB/HSL nach RGB konvertieren, dann erhälst du do einen Verlauf
H=Farbton 0-359 S=Sättigung B/L=Helligkeit |
||
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group