Früher war für viele solcher Anwendungen der Zugriff über Terminaldienste (Citrix, Terminalserver, u.ä.) oftmals ein K.O.-Kriterium, da in diesen Umgebungen aus Geschwindigkeitsgründen eine Farbtiefe von 8 Bit (=256 Farben) eingestellt war. Die aktuellen Versionen dieser Serverumgebungen unterstützen mittlerweile auch höhere Farbtiefen, denn um ein Foto in allen Details betrachten zu können sind 256 Farben definitiv nicht ausreichend.
Auch heute kommt es vor, dass Anwender (bspw. wegen Updates des Grafikkartentreibers) plötzlich wieder vor einer 8 oder 16 Bit Farbdarstellung sitzen, ohne dies überhaupt zu bemerken. Eine andere Möglichkeit ist, dass wir in unserer Applikation, je nach eingestellter Farbtiefe, andere Grafiken einblenden.
Der folgende Mustercode gibt uns Aufschluss über die aktuelle Farbtiefe, die verfügbaren Paletten und die darstellbare Anzahl an Farben die unserer Applikation zur Verfügung stehen.
CLEAR
? [verfügbare Paletten: ]
??GetBitsPerPixel(1)
? [Farbtiefe in Bit : ]
??GetBitsPerPixel(2)
? [Anzahl Farben : ]
??GetBitsPerPixel(3)
FUNCTION GetBitsPerPixel as Integer
LPARAMETERS vVersion as Integer
* // Mögliche Parameterwerte:
* // 1 = Verfügbare Paletten
* // 2 = Farbtiefe in Bit
* // 3 = Anzeigbare Farben
* // Wenn kein Parameter übergeben wurde, dann mit
* // Defaultwert vorbesetzen...
vVersion = EVL(vVersion,2)
* // liBitsPerPixel beinhaltet die Farbtiefe
* // 8 = 8 Bit = 256 Color
* // 16 = 16 Bit = High Color
* // 24 / 32 = 24/32 Bit = TrueColor
* // Es gibt noch weitere Wertmöglichkeiten, die o.a.
* // aufgezählten stellen jedoch die üblichen
* // Varianten dar.
* // Um die Farbtiefe festzustellen benötigen wir
* // mehrere API-Funktionen
DECLARE INTEGER GetDC IN WIN32API AS GetDCHandle INTEGER hWnd
DECLARE INTEGER GetActiveWindow IN WIN32API
DECLARE INTEGER GetDeviceCaps IN WIN32API INTEGER hDC, INTEGER nIndex
DECLARE INTEGER ReleaseDC IN WIN32API INTEGER hWnd, INTEGER hDC
#DEFINE PLANES 14
#DEFINE BITSPIXEL 12
LOCAL liDChandle as Integer, liReturn as Integer
* GetDeviceCaps Handle erzeugen + Returnwert vorbesetzen
liDChandle = GetDCHandle( GetActiveWindow() )
liReturn = 0
DO CASE
CASE vVersion = 1
* // Anzahl der verfügbaren Paletten feststellen
liReturn = GetDeviceCaps( liDChandle , PLANES )
CASE vVersion = 2
* // Farbtiefe in Bits feststellen
liReturn = GetDeviceCaps( liDChandle , BITSPIXEL )
OTHERWISE
* // Anzahl darstellbarer Farben feststellen
* // Formel: 2 ^ (AnzahlPaletten * BitsProPixel)
liReturn = INT( 2 ^ ( GetDeviceCaps( liDChandle , PLANES ) * GetDeviceCaps( liDChandle , BITSPIXEL ) ) )
ENDCASE
* // GetDeviceCaps Handle freigeben
=ReleaseDC( GetActiveWindow() , liDChandle )
RETURN liReturn
ENDFUNC
Keine Kommentare:
Kommentar veröffentlichen