![]() |
Farben nach RGB unrechnen?
Hallo Alle!
Wie kann ich die Farben von Delphi nach RGB umrechnen? |
AW: Farben nach RGB unrechnen?
![]() meist kann man die Farben direkt übernehmen, ansonsten muss man Tabellenfunktionen bemühen. |
AW: Farben nach RGB unrechnen?
Zitat:
|
AW: Farben nach RGB unrechnen?
In der Code-Library hätten wir auch was:
![]() |
AW: Farben nach RGB unrechnen?
Delphi-Quellcode:
Soweit ohne Gewähr. Bitte vervollständigen ;-)
type TRGBColor = packed record
case Integer of 1 : (col: Cardinal); 2 : (chans: Array[0..3] of byte); end; function AsRGB(color: TColor; DC: HDC = 0): TRGBColor; var rgbc: TRGBColor absolute color; entry: PALETTEENTRY; const cpSystemPalette = $00; cpActingPalette = $01; cpLogicalPalette = $02; cpGenericPalette = $08; cpNoColor = $1F; cpDefaultColor = $20; cpSystemColor = $FF; begin case rgbc.chans[3] of cpGenericPalette, cpLogicalPalette: begin result.col := (rgbc.col and $00FFFFFF); end; cpNoColor, cpDefaultColor : begin result.col := rgbc.col; end; cpActingPalette : begin if (GetDeviceCaps(DC,RASTERCAPS) and RC_PALETTE) <> 0 then begin if 1 = GetPaletteEntries( GetCurrentObject(DC, OBJ_PAL), rgbc.chans[0], 1, entry) then begin result.col := $00000000; result.chans[0] := entry.peRed; result.chans[1] := entry.peGreen; result.chans[2] := entry.peBlue; end; end else result.col := PaletteIndex(rgbc.chans[0]); end; cpSystemPalette : begin result.col := PaletteIndex(rgbc.chans[0]); end; cpSystemColor : begin result.col := GetSysColor(rgbc.chans[0]); end; end; end; |
AW: Farben nach RGB unrechnen?
ich habe obiges noch etwas aufgeblasen, ich hoffe so stimmt es nun. Wahrscheinlich hab ich die Konstanten durcheinandergebracht... aber es sollte nun auch mit beliebigen Paletten funktionieren.
|
AW: Farben nach RGB unrechnen?
Vielen Dank an Euch!
|
AW: Farben nach RGB unrechnen?
Zitat:
wenn ich folgenden Code lese...
Delphi-Quellcode:
...wie auf der gelinkten Seite "hier stehts" zu lesen ist.
function xyz(myByte : byte):longint;
begin result:=myByte shl 8; end; Wer kann meine Zweifel ein für alle mal beerdigen? Ich bin der Meinung, daß es früher mal...
Delphi-Quellcode:
...so richtig gewesen ist.
...
result:=longint(myByte) shl 8; ... MfG mz23 |
AW: Farben nach RGB unrechnen?
Die Zweifel kann ich dir leider nicht nehmen, dazu müsste ich pauschal sagen können, als was das Byte im call stack angelegt wird. Zu meinen guten Zeiten waren das noch Vielfache von 32bit, demnach müsste das so glattgehen. Ich schau es mir eben mal an...
ps:
Delphi-Quellcode:
wird zu
result:=myByte shl 8;
Delphi-Quellcode:
Die Inhalte bleiben nach Standardaufrufkonvention (D7) in EAX...
and EAX,$000000FF;
shl EAX, 8 pps. wie ich deinem Profil entnehme, bist du eher bei C++ zuhause, da bin ich mit derlei castfreien Experimenten schon des öfteren auf die Schnauze gefallen, daher ist deine Skepsis verständlich |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz