|
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Paul aka ICC, HV-Freak
Anmeldungsdatum: 11.09.2004 Beiträge: 588 Wohnort: Uelzen
|
Verfasst am: 11.06.2005, 00:08 Titel: RGB-Wert aus Farbe berechnen |
|
|
Moin, kann mir zufällig jemand sagen, wie ich aus einer Farbe die r, g und b Werte berechnen kann ? Ich weiß nur wie man das Gegenteil davon tut, nämlich mit RGB()..
danke schonmal _________________
|
|
Nach oben |
|
|
MisterD
Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 11.06.2005, 04:42 Titel: |
|
|
öhm also je nach dem, du hast ja irgendwie rgb = r + 256*g + 65536*b
Dann kannste das ja eigentlich auch zurückrechnen:
Code: | b = rgb \ 65536
g = (rgb - 65536*b) \ 256
r = (rgb - 65536*b - 256*g) | oder Code: | temp=rgb
b = temp \ 65536
while temp > 65526
temp = temp - 65536
wend
g = temp \ 256
while temp > 256
temp = temp - 256
wend
r = temp |
Letzterer Code ist umständlicher, hat aber den vorteil, dass man die Werte auch separat ausrechnen kann, die ersten drei Zeilen funktionieren nur in dieser Kombination (wenn sie denn funktionieren )
Brain-Coding, keine Garantie. _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
|
Paul aka ICC, HV-Freak
Anmeldungsdatum: 11.09.2004 Beiträge: 588 Wohnort: Uelzen
|
Verfasst am: 11.06.2005, 09:28 Titel: |
|
|
Moin,
ne ich möchte einen normalen Zahlenwert von 0-255 umrechen. Also die Farben im SCREEN 13 _________________
|
|
Nach oben |
|
|
Dusky_Joe
Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 11.06.2005, 11:43 Titel: |
|
|
Sowas könnte schwierig werden...
Am besten erstellst du erst mal ein Array, in dem du alle Farbwerte des Screen 13 speicherst. Das Eintragen kannst du dir durch INP/OUT sparen. Die Befehle haben zwar den Ruf, etwas buggy zu sein, aber es ist die einzige möglichkeit, die 256 Farben zu bekommen, ohne sie durch ausprobierren zu finden...
Außer, du hättest irgendwo ein schlaues buch, in dem die RGB's dieses Screens stehen
Danach musst du einfach die Teilfarben vergleichen.
Achte darauf, dass Screen 13 18bit zur Farbdarstellung verwendet. 63 in Scr13 entspricht also 255 in einem Truecolor-Modus.
Den Vergleich könntest du über die Differenz der einzelnen Farbwerte durchführen.
Code: | SCREEN 13
TYPE RGB
r AS INTEGER
g AS INTEGER
b AS INTEGER
END TYPE
DIM OrigColors(255) AS RGB
'Code, der das Array befüllt
'farbe soll umgerechnet werden:
NeuColor = &HF0A3F0
NeuB = NeuColor \ 65536
NeuG = (NeuColor - 65536 * NeuB) \ 256
NeuR = (NeuColor - 65536 * NeuB - 256 * NeuG)
MaxDifR = 255
MaxDifG = 255
MaxDifB = 255
For i = 0 To 255
DifR = NeuR - OrigColors(i).r
DifG = NeuG - OrigColors(i).g
DifB = NeuB - OrigColors(i).b
If ABS(DifR) < MaxDifR Then MaxDifR = ABS(DifR)
If ABS(DifG) < MaxDifG Then MaxDifR = ABS(DifG)
If ABS(DifB) < MaxDifB Then MaxDifR = ABS(DifB)
NEXT |
Dadurch bekommst du immerhin schon mal die Differenz. Irgendwie musst du dann eben noch einbauen, dass der Index gespeichert werden soll, wenn die Differenz am kleinsten ist.
Problem an der Sache: Du musst die kleinste Differenz bei 3 Variablen ermitteln...
Du könntest einfach die Dif's Addieren, und dann eine Variable MaxDifAdd benutzen. Wenn die ein Minimum erreicht, wird der Index zwischengespeichert.... _________________ fully biological degradable
Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet. |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|