Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

RGB-Wert aus Farbe berechnen

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Paul
aka ICC, HV-Freak


Anmeldungsdatum: 11.09.2004
Beiträge: 588
Wohnort: Uelzen

BeitragVerfasst am: 11.06.2005, 00:08    Titel: RGB-Wert aus Farbe berechnen Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 11.06.2005, 04:42    Titel: Antworten mit Zitat

ö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 zwinkern )

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
Benutzer-Profile anzeigen Private Nachricht senden
Paul
aka ICC, HV-Freak


Anmeldungsdatum: 11.09.2004
Beiträge: 588
Wohnort: Uelzen

BeitragVerfasst am: 11.06.2005, 09:28    Titel: Antworten mit Zitat

Moin,

ne ich möchte einen normalen Zahlenwert von 0-255 umrechen. Also die Farben im SCREEN 13
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 11.06.2005, 11:43    Titel: Antworten mit Zitat

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 Zunge rausstrecken

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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz