Buchempfehlung
Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API
Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API
"Der" Petzold, das über 1000 Seiten starke Standardwerk zum Win32-API - besonders nützlich u. a. bei der GUI-Programmierung in FreeBASIC! [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Code-Beispiel

Code-Beispiele » Grafik und Fonts

RGB-Konvertierung

Lizenz:Erster Autor:Letzte Bearbeitung:
k. A.RedakteurJojo 22.02.2011

FreeBasic hat die vordefinierten Makros BefehlsreferenzeintragRGB und BefehlsreferenzeintragRGBA zum Erstellen von RGB-Farben. Aber wie kommt man wieder an die Komponenten der einzelnen Farben ran?

Wer schon mal mit Externer Link!HTML-Farbcodes gearbeitet hat, weiß sicherlich, wie diese aufgebaut sind: Sie bestehen aus drei Hex-Komponenten für R, G und B. Jede Komponente reicht von 00 bis FF, also 0 bis 255 dezimal. Ganz ähnlich speichert FreeBASIC auch Farbwerte (allerdings mit einer zusätzlichen Alpha-Komponente). Der Farbton weiß entspricht zum Beispiel dem Code &HFFFFFF. Wenn man also diese Zahl in drei Komponenten zerlegen könnte...

Der folgende Code ist langsamer und länger, aber verständlicher. Er legt ein logisches UND auf den Farbcode und filtert so die drei Komponenten heraus. Dabei werden Codes noch so geteilt, dass sie Werte zwischen 0 und 255 ergeben. Die führenden Nullen dienen lediglich zum Verständnis und können weggelassen werden.

Dim As UInteger farbe = RGBA(255, 254, 253, 128)

Print "alpha = ", (farbe And &HFF000000) \ &H01000000
Print "rot = ", (farbe And &H00FF0000) \ &H00010000
Print "gruen = ", (farbe And &H0000FF00) \ &H00000100
Print "blau = ", farbe And &H000000FF

Wesentlich eleganter und schneller geht das mit Bitshiften:

Dim As UInteger farbe = RGBA(255, 254, 253, 128)

Print "alpha = ", (farbe Shr 24) And &HFF
Print "rot = ", (farbe Shr 16) And &HFF
Print "gruen = ", (farbe Shr 8) And &HFF
Print "blau = ", farbe And &HFF

oder auch:

Dim As UInteger farbe = RGBA(255, 254, 253, 128)

'   HiWord         LoWord
'HiByte LoByte HiByte LoByte
'alpha   rot   gruen   blau
Print "alpha = ", HiByte (HiWord (farbe))
Print "rot = ",   LoByte (HiWord (farbe))
Print "gruen = ", HiByte (LoWord (farbe))
Print "blau = ",  LoByte (LoWord (farbe))

und für die Pointer-Freaks:

Dim As UInteger farbe = RGBA(255, 254, 253, 128)

Print "alpha = ", Cast(UByte Ptr, @farbe)[3]
Print "rot = ",   Cast(UByte Ptr, @farbe)[2]
Print "gruen = ", Cast(UByte Ptr, @farbe)[1]
Print "blau = ",  Cast(UByte Ptr, @farbe)[0]

Linktipp: Externer Link!Online-Mischtool für RGB-Farbwerte


Zusätzliche Informationen und Funktionen
  • Das Code-Beispiel wurde am 08.12.2008 von RedakteurJojo angelegt.
  • Die aktuellste Version wurde am 22.02.2011 von RedakteurJojo gespeichert.
  Bearbeiten Bearbeiten  

  Versionen Versionen