DEUTSCHE VERSION |
|
Links | | | Forums | | | Comments | | | Report news |
Chat | | | Polls | | | Newsticker | | | Archive |
amiga-news.de Forum > Programmierung > 32Bit Farbwert in 16Bit Farbwert umwandeln ? | [ - Search - New posts - Register - Login - ] |
-1- | [ - Post reply - ] |
2003-12-15, 16:22 h JensB Posts: 193 User |
Hi, ich möchte einen 32bit Farbwert in einen 16bit Farbwert umwandeln .Ich habe schon ein wenig gesucht und auch was gefunden nun meine Frage ob das so Richtig ist weil mit printf() wieder ne nage zahl rauskommt. // --- Code --- #include <stdio.h> #include <string.h> #include <stdout.h> #define shiftrgb(farbe) ((ULONG) (farbe)<<24) void main(void) { printf("0x%x",shiftrgb(0xa0a0a0a0); // Ergibt : 0xa0000000 return; } // --- Ende --- Muss da nicht 0xa0 rauskommen oder ist das das gleich ? Oder muss ich die Nullen noch abschneiden bzw. stören die überhaupt. Es is doch eigentlich eine ganz andere Zahl oder ? Mfg JensB [ - Answer - Quote - Direct link - ] |
2003-12-15, 17:31 h thomas Posts: 7718 User |
Du solltest nochmal genau schreiben, was du eigentlich willst. Im Moment schiebst du ein Byte um 24 Bits nach links, sodaß es in einem 32bit-Integer ganz links steht. Das ist nichts, was irgendwie mit Farbe zu tun hat. Wenn ich genau darüber nachdenke, möchtest du vermutlich aus 0x12345678 0x12 machen, oder ? Dafür mußt du nach rechts schieben, nicht nach links. Außerdem hat das Ergebnis 8 Bits und nicht 16. Bei dir wird aus 0x12345678 0x78000000. Gruß Thomas -- Email: thomas-rapp@web.de Home: home.t-online.de/home/thomas-rapp/ [ - Answer - Quote - Direct link - ] |
2003-12-15, 18:45 h JensB Posts: 193 User |
Also, ich möchte aus einem ColorWheel Gadget den Farbwert herausfinden aber der liegt ja ,wenn ich das richtig verstanden habe in 32bit format vor. Z.b.0x0000000 für Rot ,0x11111111 für Blau und 0xFFFFFFFF für Grün ich möchte das ganze aber in 0x00 für Rot und 0x11 für blau und 0xFF für Grün haben . Ich habe hier im Forum gesucht und etwas gefunden für BASIC. Da hat aber jemand was von C erwähnt und das mit verschieben ala <<24 geschrieben ,ddurch bin darauf gekommen . Mfg JensB [ - Answer - Quote - Direct link - ] |
2003-12-15, 21:06 h mrbbc Posts: 101 User |
So weit ich weiss, gibt es keine 32-Bit-Farben; nur 24Bit mit einem ungenutzten Byte, das IIRC noch in Texturen gegf. für Alphablending oder so was genutzt wird. Wenn das Highbyte 0 ist, dann müsste die Formel in etwa so aussehen: r=color&0xF8; g=color&0xFC00; /* für ECHTE 16 Bit, sonst F8 für 15 Bit */ b=color&0xF80000; r>>=3; g>>=5; /* für ECHTE 16 Bit, sonst 6 für 15 Bit */ b>>=8; /* bzw. 9 für 15 Bit */ color=r+g+b; Rot und Blau könnten auch vertauscht sein, das Ergebnis stimmt dann aber trotzdem. Liegt color im Little Endian Format vor (was für Grafiken eher typisch ist), wird's komplizierter: r=color&0xF8000000; g=color&0xFC0000; b=color&0xF800; g<<=3; b<<=5; color=r+g+b; [ - Answer - Quote - Direct link - ] |
2003-12-15, 21:50 h Holger Posts: 8116 User |
Zitat:Rot, Grün und Blau sind Farbkomponenten, das bedeutet wenn die Farbe aus drei Farbkomponenten zu je 32 Bit besteht, handelt es sich um einen 96Bit Farbwert. Das hat dann mit 32/24 Bit Farbwerten überhaupt nichts zu tun. Die Umwandlung einer 32Bit Farbkomponente in eine 8-bittige erfolgt demzufolge durch shiften um 24 Bit nach rechts, denn Du willst ja die höchstwertigsten Bit behalten. mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Answer - Quote - Direct link - ] |
2003-12-15, 21:53 h thomas Posts: 7718 User |
@mrbbc: lies doch bitte erst die Frage, bevor du was schreibst. @Jens: du möchtest aus den 32 Bits die höchstwertigen 8 benutzen. Ganz einfach, du mußt 24 Bits nach rechts verschieben, nicht nach links. Also rot8 = rot32 >> 24; gruen8 = gruen32 >> 24; blau8 = blau32 >> 24; umgekehrt sieht es so aus: rot32 = (rot8 << 24) | (rot8 << 16) | (rot8 << 8) | rot8; usw. Gruß Thomas -- Email: thomas-rapp@web.de Home: home.t-online.de/home/thomas-rapp/ [ Dieser Beitrag wurde von thomas am 15.12.2003 editiert. ] [ - Answer - Quote - Direct link - ] |
2003-12-15, 22:01 h JensB Posts: 193 User |
Guckst du Autodoc von MUI_Colorfield.doc dort stehen : . . . NAME MUIA_Colorfield_Blue FUNCTION Set or get the 32-bit blue component of the fields color . . Den wert, den das ColorfiledObject über MUIA_Colorfield_RGB zurückgibt möchte ich in das Format von HTML bringen ,also #AA(Rot)BB(Grün)CC(Blau) . Das jetzige Format ist ja rgb[3]={0xa0000000,0xdeafcdea,0c42424242} ( Jetzt mal mit MUI ausgelesen) Oder bin ich da jetzt vollkommen aufn falsche Dampfer ? Mfg [ - Answer - Quote - Direct link - ] |
2003-12-15, 22:11 h Holger Posts: 8116 User |
Zitat:Auf dem falschen Dampfer kann man nur sein, wenn man eine Vermutung äußert, nicht wenn man im Prinzip gar nichts sagt. Daß der RGB-Wert nicht nur aus dem Blau-Wert besteht, weißt Du hoffentlich. Was ist an der Erklärung von thomas dann nicht zu verstehen? mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Answer - Quote - Direct link - ] |
2003-12-15, 22:39 h JensB Posts: 193 User |
Ups hab das von Thomas nicht gesehen ,sorry ! War ich wohl gerade beim schreiben das letzte was ich las war von mrbbc ! Mfg JensB [ Dieser Beitrag wurde von JensB am 15.12.2003 editiert. ] [ Dieser Beitrag wurde von JensB am 15.12.2003 editiert. ] [ - Answer - Quote - Direct link - ] |
-1- | [ - Post reply - ] |
amiga-news.de Forum > Programmierung > 32Bit Farbwert in 16Bit Farbwert umwandeln ? | [ - Search - New posts - Register - Login - ] |
Masthead |
Privacy policy |
Netiquette |
Advertising |
Contact
Copyright © 1998-2024 by amiga-news.de - all rights reserved. |