Farbpaletten - Aber wie?
Übersicht

![]() |
GeeeckoBetreff: Farbpaletten - Aber wie? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich stehe gerade vor einem Problem.
Undzwar wie soll ich eine Farbpalette darstellen? Also sowas wie bei Paint. Sowas: ![]() Oder Rund oder so, das ist egal. Hauptsache das alle Farben da sind. Aber ich weiß gerade nicht, wie ich das anstellen soll. Kann mir jmd. einen kleinen Denkanstoß geben?^^ Ob BMax BlitzBasic oder sonst was, das ist egal. Danke. mfg MD |
||
![]() |
Nexhmije |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wo ist denn da das Problem?
Wie du hoffentlich weißt sind Farben am PC aus 3 Grundfarben aufgebaut. Rot, Grün und Blau, RGB. Die können, im Dezimalsystem jedenfalls, jeweils einen Wert von 0 - 255 haben. 255, 0, 0 wäre also knallrot. 255, 0, 255 wäre Pink und 128, 128, 128 so ein mittel-grau. Aber das weißt du bestimmt ![]() Ich weiß jetzt ich nur nicht, wie deine Frage gemeint war. Wenn du eine Palette angezeigt haben willst, aus der man sich eine Farbe aussuchen kann, dann würde das ja ganz einfach gehen, indem du jede Farbkombination anzeigst und in einem, ich sag' jetzt mal, "dreidimensionalem" Auswahldialog auswählbar machst. Bei dem Bild das du gepostet hat kann man zum Beispiel (ich hab' mir jetzt nur die ersten paar Zeilen angesehen) sehr schön sehen, wie das gemacht wird. Der erste Wert ist 000000, schwarz (0, 0, 0 in dezimal). Das zweite Feld ist, sagen wir mal 0, 0, 10. Das dritte 0, 0, 20 usw bis 0, 0, 255. Dann geht's weiter, mit z.B 10, 0, 255. Dann wieder 20, 0, 255. Bis man halt alle Kombinationen (naja nicht alle, vll in 10ner-Sprüngen) bis 255, 255, 255 durch hat. Sorry, ich habe das jetzt vll nicht so verständlich geschrieben, ist ja auch spät. Aber ich hoffe ich konnte dir einen kleinen Denkanstoss geben. Du brauchst halt nur eine Funktion die dir alle Kombinationen liefert und eine, die sie anzeigen tut. |
||
![]() |
mas93 |
![]() Antworten mit Zitat ![]() |
---|---|---|
wenn du nur sone farbauswahl machen möchtest, kannst dus dir auch ganz einfach machen.
Du holst dir einfach son Bild von sonem Farbkreis(screenshot) und zeigst es in deinem Prog an. Dann kannst du ja die Pixelfarbe an der Mausposition abfragen [url]siehe: https://www.blitzforum.de/help/ReadPixel[/url] war es das was du wolltest??? Formulier mal deine Frage noch etwas genauer^^ |
||
www.lpbase.de
Meine Linkin Park Fanseite[Noch im Aufbau] |
![]() |
Rone |
![]() Antworten mit Zitat ![]() |
---|---|---|
moin,
ich hatte gerade langeweile... Code: [AUSKLAPPEN] SuperStrict Type TColor Field _r:Int, _g:Int, _b:Int Method Create:TColor(r:Int, g:Int, b:Int) _r = r; _g = g; _b = b Return Self End Method Function Fade:TColor(value1:Float, c1:TColor, value2:Float, c2:TColor) Return New TColor.Create(c1._r * value1 + c2._r * value2, c1._g * value1 + c2._g * value2, c1._b * value1 + c2._b * value2) End Function EndType Graphics 800, 600 Local colorMap:TColor[][] = InitColorMap() Local black:TColor = New TColor.Create(0, 0, 0) ; Local white:TColor = New TColor.Create(255, 255, 255) ; Repeat Cls Local cx:Int = MouseX() / 10 Local cy:Int = MouseY() / 10 If cx > 65 Then cx = 65 ElseIf cx < 0 Then cx = 0 EndIf If cy > 54 Then cy = 54 ElseIf cy < 0 Then cy = 0 EndIf For Local ix:Int = 0 Until 66 For Local iy:Int = 0 Until 55 SetColor colorMap[ix][iy]._r, colorMap[ix][iy]._g, colorMap[ix][iy]._b DrawRect ix * 10, iy * 10, 10, 10 Next Next For Local i:Int = 27 To 0 Step - 1 Local color:TColor = TColor.Fade(Float(i) / 27.0, colorMap[cx][cy], Float(27 - i) / 27.0, white) SetColor color._r, color._g, color._b DrawRect 670, 10 * i, 30, 10 Next For Local i:Int = 27 To 0 Step - 1 Local color:TColor = TColor.Fade(Float(i) / 27.0, black, Float(27 - i) / 27.0, colorMap[cx][cy]) SetColor color._r, color._g, color._b DrawRect 670, 280 + 10 * i, 30, 10 Next SetColor colorMap[cx][cy]._r, colorMap[cx][cy]._g, colorMap[cx][cy]._b DrawRect 10, 560, 30, 30 Flip Until KeyHit(KEY_SPACE) End Function InitColorMap:TColor[][] () Local colors:TColor[7] colors[0] = New TColor.Create(255, 0, 0) colors[1] = New TColor.Create(255, 255, 0) colors[2] = New TColor.Create(0, 255, 0) colors[3] = New TColor.Create(0, 255, 255) colors[4] = New TColor.Create(0, 0, 255) colors[5] = New TColor.Create(255, 0, 255) colors[6] = New TColor.Create(255, 0, 0) Local grey:TColor = New TColor.Create(127, 127, 127) Local colorMap:TColor[][] colorMap = colorMap[..66] For Local i:Int = 0 Until 66 colorMap[i] = colorMap[i][..56] Next For Local i:Int = 0 to 5 For Local f:Int = 10 To 0 Step - 1 Local color:TColor = TColor.Fade(Float(f) / 10.0, colors[i], Float(10 - f) / 10.0, colors[i + 1]) For Local f2:Int = 55 To 0 Step - 1 Local color2:TColor = TColor.Fade(Float(f2) / 55.0, color, Float(55 - f2) / 55.0, grey) colorMap[i * 11 + (10 - f)][(55 - f2)] = color2 Next Next Next Return colorMap End Function gute nacht |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hab sowas auch mal gemacht. Hier der Code: [AUSKLAPPEN] Graphics 384,256,32,2
SetBuffer BackBuffer() Local R#=0 ;Rot Local G#=0 ;Grün Local B#=0 ;Blau Local X# Local Y# LockBuffer BackBuffer() For X#=0 To 384 For Y#=0 To 255 R=0 G=0 B=0 ;Rotanteil If X>256 And X<384 Then R=X-256 If X>000 And X<128 Then R=128-X ;Grünanteil If X>000 And X<128 Then G=X If X>127 And X<256 Then G=64-(X-192) ;Blauanteil If X>128 And X<256 Then B=X-128 If X>255 And X<384 Then B=64-(X-320) ;Überschuss abschneiden R=R*4:If R>255 Then R=255 G=G*4:If G>255 Then G=255 B=B*4:If B>255 Then B=255 ;Schwarzverlauf If Y<128 Then R=R*Y/128 G=G*Y/128 B=B*Y/128 End If ;Weißverlauf If Y>127 Then R=256-R:R=256-R*(256-Y)/128:If R>255 Then R=255 G=256-G:G=256-G*(256-Y)/128:If G>255 Then G=255 B=256-B:B=256-B*(256-Y)/128:If B>255 Then B=255 End If WritePixel X,Y,Int(R)*65536+Int(G)*256+Int(B) Next Next UnlockBuffer BackBuffer() Flip FlushKeys WaitKey End Ich hab grad leider kein BlitzMax installiert, dass ich ausprobieren könnte ob die Lösung von Rone eventuell die selbe ist. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bei B+ mit RequestColor ![]() |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
![]() |
Geeecko |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey!
Danke Leute ![]() Jetzt weiß ich wie ichs machen soll. Und genau sowas meinte ich, Rone´s Beispiel funktioniert perfekt. *Allendiehandschüttel* lg MD EDIT: Habs doch nicht verstanden :-@ ![]() Kann das mal wer mit Text erklären? ODer am besten mit Code und kommentaren ![]() lg MD |
||
- Zuletzt bearbeitet von Geeecko am So, Jul 20, 2008 15:18, insgesamt einmal bearbeitet
![]() |
DAK |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich würd die blitzsys.dll verwenden, falls du bb/b+/b3d hast... da is der windows-colorpicker und noch einige andere echt coole sachen drin... | ||
Gewinner der 6. und der 68. BlitzCodeCompo |
![]() |
Triton |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ist doch relativ einfach. Es gibt 3 Farben Rot, Grün, Blau.
Jede kann werte von 0 bis 255 annehmen, und die zwischenfarben entstehen durch Kombinationen aus diesen Farben. Es sind also 256³ = 16777216 Um diesen Farbraum darzustellen wäre eben ein Würfel am besten, auf dessen 3 Achsen die Farben abgetragen werden. Da man aber nicht die 256 Schichten eines solchen Würfels angemessen darstellen kann auf einem flachen Bildschirm, stellt man eben nur eine da und zusätzlich einen Regler von 0-255 für die 3. Farbe und schon kann man alle seine Farben darstellen ![]() |
||
Coding: silizium-net.de | Portfolio: Triton.ch.vu |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also praktisch so :
Code: [AUSKLAPPEN] Graphics 340,255,16,2
SetBuffer BackBuffer() Global R#,G#,B#,RGB Repeat Cls R=0:G=0 LockBuffer BackBuffer() For xx = 1 To 256 R = R + 1 G = 0 For yy = 1 To 256 G = G + 1 RGB = 1*$1000000+R*$10000+G*$100+B WritePixelFast(xx,yy,RGB,BackBuffer()) Next Next UnlockBuffer BackBuffer() Text 260,0,"B:"+B B = B + MouseZSpeed() If B > 255 Then B = 255 If B < 0 Then B = 0 Flip Until KeyHit(1) End |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
Willi die Rübe |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du kannst auch einfach die richtige Windows Funktion verwenden, habe mal aus Langeweile dir schnell nen kleinen "Wrapper" geschrieben: Download
1. Userlib erstellen: Code: [AUSKLAPPEN] ;--------------------------- ; choosecolor.decls ;--------------------------- .lib "choosecolor.dll" ChooseColor%():"ChooseColor" GetColorRed%():"GetColorRed" GetColorGreen%():"GetColorGreen" GetColorBlue%():"GetColorBlue" 2. Die Datei in choosecolor.dll umbennen und in dein Projektverzeichnis kopieren. 3. Nun ist alles ganz einfach: Code: [AUSKLAPPEN] ChooseColor()
Print GetColorRed() Print GetColorGreen() Print GetColorBlue() WaitKey() 4. Spaß haben ![]() Mfg Willi Edit: Neue Version mit GetColor Befehlen Edit2: Ich mach noch Sachen wie FileRequester und Fontrequester dazu und stell die DLL ins Dll und Userlibs Forum. |
||
Ich habe keine Lösung, aber ich bewundere das Problem.
Tehadon Q6600, MSI Neo2-FR, 4GB Ram, nVidia 7800 GTX At the Farewell Party visit: MySpace | Homepage |
![]() |
d-bug |
![]() Antworten mit Zitat ![]() |
---|---|---|
BlitzSys.dll hat das schon alles, Willi. Spar dir die Mühe. ![]() |
||
![]() |
Geeecko |
![]() Antworten mit Zitat ![]() |
---|---|---|
So, jetzt klappts aber echt xD
Danke nochma :] lg MD |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group