Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   ARGB nach Interger (https://www.delphipraxis.net/122118-argb-nach-interger.html)

EWeiss 9. Okt 2008 19:35


ARGB nach Interger
 
Wie ist die Formel um einen ARGB wert nach Interger zu konvertieren ?

Delphi-Quellcode:
function RGB(R,G,B: Byte): Cardinal;
begin
  Result := $00000000 shl 24 or B shl 16 or G shl 8 or R;
end;
von turboPASCAL

brauche das gleiche für ARGB ..

Beispiel : "255,250,250,255"
Hab das hier gefunden aber wo ist hier der A wert ?
Zitat:

int argb = (0xFF << 24) + (r << 16) + (g << 8) + b;
gruss Emil

Dust Signs 9. Okt 2008 19:41

Re: ARGB nach Interger
 
Alpha wird um 24 geshiftet, also einfach in deinem oberen Code statt
Delphi-Quellcode:
$00000000 shl 24
Delphi-Quellcode:
A shl 24
schreiben.

Dust Signs

EWeiss 9. Okt 2008 19:47

Re: ARGB nach Interger
 
Zitat:

Zitat von Dust Signs
Alpha wird um 24 geshiftet, also einfach in deinem oberen Code statt
Delphi-Quellcode:
$00000000 shl 24
Delphi-Quellcode:
A shl 24
schreiben.

Dust Signs

Ahh Danke schön ;)

Habs mal versucht stimmt der wert ?
255,255,255,255 := -1 ? als ARGB


Gruss Emil

turboPASCAL 9. Okt 2008 19:54

Re: ARGB nach Interger
 
Delphi-Quellcode:
function ARGB(A, R, G, B: Byte): COLORREF; // COLORREF = DWORD = Cardinal;
begin
  Result := B or (G shl 8) or (R shl 16) or (A shl 24);
end;

EWeiss 9. Okt 2008 19:57

Re: ARGB nach Interger
 
Zitat:

Zitat von turboPASCAL
Delphi-Quellcode:
function ARGB(A, R, G, B: Byte): COLORREF; // COLORREF = DWORD = Cardinal;
begin
  Result := B or (G shl 8) or (R shl 16) or (A shl 24);
end;

Danke dachte mir schon das da was nicht stimmt
hatte seltsame werte bei

255,250,250,255 := -1281

gruss Emil

Dust Signs 9. Okt 2008 20:06

Re: ARGB nach Interger
 
Klar, weil ja ein Bit für's Vorzeichen reserviert war. Dadurch sind alle Werte größer binär 01111111111111111111111111111111 (31 1-Bits). Bei einem Überlauf werden die 32 Bit als 2er-Komplement interpretiert (wegen dem gesetzten Vorzeichenbit) - und damit als negative Zahl. Wie bereits von turboPASCAL erwähnt schafft der Wechsel auf einen vorzeichenenlosen Typen Abhilfe, da dieser kein Vorzeichenbit hat und damit auch dieses Bit zur Größe des Wertebereichs beiträgt.

Dust Signs

EWeiss 9. Okt 2008 20:18

Re: ARGB nach Interger
 
Zitat:

Zitat von Dust Signs
Klar, weil ja ein Bit für's Vorzeichen reserviert war. Dadurch sind alle Werte größer binär 01111111111111111111111111111111 (31 1-Bits). Bei einem Überlauf werden die 32 Bit als 2er-Komplement interpretiert (wegen dem gesetzten Vorzeichenbit) - und damit als negative Zahl. Wie bereits von turboPASCAL erwähnt schafft der Wechsel auf einen vorzeichenenlosen Typen Abhilfe, da dieser kein Vorzeichenbit hat und damit auch dieses Bit zur Größe des Wertebereichs beiträgt.

Dust Signs

Danke für die Infos es funktioniert ja nun :)

gruss Emil


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:28 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz