amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > 32Bit Farbwert in 16Bit Farbwert umwandeln ? [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

15.12.2003, 16:22 Uhr

JensB
Posts: 193
Nutzer
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

[ - Antworten - Zitieren - Direktlink - ]

15.12.2003, 17:31 Uhr

thomas
Posts: 7717
Nutzer

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/

[ - Antworten - Zitieren - Direktlink - ]

15.12.2003, 18:45 Uhr

JensB
Posts: 193
Nutzer
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

[ - Antworten - Zitieren - Direktlink - ]

15.12.2003, 21:06 Uhr

mrbbc
Posts: 101
Nutzer
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;

[ - Antworten - Zitieren - Direktlink - ]

15.12.2003, 21:50 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von JensB:
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 .

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.

[ - Antworten - Zitieren - Direktlink - ]

15.12.2003, 21:53 Uhr

thomas
Posts: 7717
Nutzer
@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. ]

[ - Antworten - Zitieren - Direktlink - ]

15.12.2003, 22:01 Uhr

JensB
Posts: 193
Nutzer
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

[ - Antworten - Zitieren - Direktlink - ]

15.12.2003, 22:11 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von JensB:
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

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.

[ - Antworten - Zitieren - Direktlink - ]

15.12.2003, 22:39 Uhr

JensB
Posts: 193
Nutzer
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. ]

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > 32Bit Farbwert in 16Bit Farbwert umwandeln ? [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.