AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi 8 bit Color Byte zu 24 bit Farbe umrechnen
Thema durchsuchen
Ansicht
Themen-Optionen

8 bit Color Byte zu 24 bit Farbe umrechnen

Ein Thema von cyberblast · begonnen am 27. Sep 2005 · letzter Beitrag vom 27. Sep 2005
Antwort Antwort
Seite 1 von 3  1 23      
cyberblast

Registriert seit: 17. Jun 2005
19 Beiträge
 
Delphi 7 Enterprise
 
#1

8 bit Color Byte zu 24 bit Farbe umrechnen

  Alt 27. Sep 2005, 10:36
Hallo Zusammen

Ich bin kurz vor der Verzweiflung. Versuche schon seit Stunden ein Byte zu einem 24 bit Farbwert umzurechnen.

Folgende Ausgangslage:

Ich habe ein Byte, sagen wird mal
b := $FF; //Weiss In Wikipeida stand, es gibt 2 Varianten von 8 Bit Farbe, entweder mit Palette oder "True Color" durch umrechnung. In mienem Fall wird keine Palette benutzt.
Bei der Variante ohne Palette werden 3 Bits für Red, 3 Bits für Green und 2 Bits für Blau benutzt.

Kann mir jemand bei der Umrechnung helfen?

Hier einige weitere Beispiele:

Delphi-Quellcode:
// B G R
b0 := $AD; //10 101 101
b1 := $F6; //11 110 110
b2 := $FF; //11 111 111
b3 := $09; //00 001 001
b4 := $00; //00 000 000
Beim Beispiel für $FF müsste ich demnach für R 255, B 255 und G 255 erhalten.

Grüsse Martin
  Mit Zitat antworten Zitat
Benutzerbild von Kroko1999
Kroko1999

Registriert seit: 21. Apr 2005
Ort: Spremberg
455 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: 8 bit Color Byte zu 24 bit Farbe umrechnen

  Alt 27. Sep 2005, 10:41
Delphi-Quellcode:
function ColorByteTo24Bit (const AColor: Byte): TColor;
begin
  Result := Rgb ((AColor and $07) shl 5,
                 (AColor and $38) shl 2,
                 (AColor and $C0));
end;
wird zwar nicht ganz weiß, aber bei 3-3-2-Bit
Da sprach der Stumme zum Blinden: "Du wirst sehen ..."
oder
Wer lesen kann, ist klar im Vorteil!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.136 Beiträge
 
Delphi 12 Athens
 
#3

Re: 8 bit Color Byte zu 24 bit Farbe umrechnen

  Alt 27. Sep 2005, 10:52
hmmm, mit der Berechnung wird dat nicht's Richtiges:
Delphi-Quellcode:
R := (C and $07) * 36.428571;
G := ((C shr 3) and $07) * 36.428571;
B := ((C shr 5) and $03) * 85;

Also bleibt dann noch der einfache Weg über 'ne Tabelle.

Entwerde du nimmst alle 256 Farbwerte in Eine auf, oder du erstellst nur kleine Tabellen, womit du dann jeden Farbwert inzeln berechnen kannst:
Delphi-Quellcode:
T3: Array[0..7] of Byte = (0, 36, ..., 219, 255);
T2: Array[0..3] of Byte = (0, 85, 170, 255);


R := T3[C and $07];
G := T3[(C shr 3) and $07];
B := T2[(C shr 5) and $03];

C24 := T3[C8 and $07]
  or (T3[(C8 shr 3) and $07] shl 8)
  or (T2[(C8 shr 5) and $03] shl 16);


[add]
@Kroko: andersrum gehts auch ... dann wird's aber net mehr ganz Schwarz ^^

Delphi-Quellcode:
Result := Rgb ((((AColor + 1) and $07) - 1) shl 5,
               (((AColor + 1) and $38) - 1) shl 2,
               ((AColor + 1) and $C0) - 1);
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

Re: 8 bit Color Byte zu 24 bit Farbe umrechnen

  Alt 27. Sep 2005, 11:08
Normalerweise löst man das über Bitwiederholungen:
Delphi-Quellcode:
function ColorByteTo24Bit (const AColor: Byte): TColor;
var
  R, G, B: Byte;
begin
  R := (AColor and $07) shl 5;
  G := (AColor and $38) shl 2;
  B := (AColor and $C0);
  Result := RGB(R or (R shr 3) or (R shr 6),
                G or (G shr 3) or (G shr 6),
                B or (B shr 2) or (B shr 4) or (B shr 6));
end;
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
DerDan

Registriert seit: 15. Nov 2004
Ort: Donaueschingen
251 Beiträge
 
Delphi XE3 Professional
 
#5

Re: 8 bit Color Byte zu 24 bit Farbe umrechnen

  Alt 27. Sep 2005, 11:12
Wieso wirds mit einer Berechnung nix?

dass muss doch einwandfrei gehen!


einen 3 Bit Wert mit (255 / 7) zu multipizieren ergibt den entsprechenden 8 Bit wert !

DerDan
nichts ist so schön wie man es sich vorstellt
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.136 Beiträge
 
Delphi 12 Athens
 
#6

Re: 8 bit Color Byte zu 24 bit Farbe umrechnen

  Alt 27. Sep 2005, 11:17
@DerDan: "nichts Richtiges"

klar wird dat was ... aber der "rechenaufwand" ist meiner Meinung nach nicht gerade angemessen.



@Flocke:
hmmm ... Bitwiederholung klingt och net schlecht
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
cyberblast

Registriert seit: 17. Jun 2005
19 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: 8 bit Color Byte zu 24 bit Farbe umrechnen

  Alt 27. Sep 2005, 12:49
Herzlichen Dank für all eure Vorschläge!

Wie ich sehe geht dies auf Verschiedene X-Arten.
Ich habe ein Referenz-Bild angehängt, das erste Bild das ihr auf dem Gif sieht, beginnt mit $AD. Wenn ich den Colorpicker nehme, erhalte ich für diesen Wert 176, 176, 176

Diese Bilder befinden sich in einem Bildformat für Kenwood Autoradios. Leider haben die diverse Formate, eines davon ist dieses 8bit Bildformat. Leider kann ich auf dem Gerät nicht "Debuggen" und muss nun herausfinden wie dieses diese Pixel berechnet
Miniaturansicht angehängter Grafiken
5graphic_169.gif  
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

Re: 8 bit Color Byte zu 24 bit Farbe umrechnen

  Alt 27. Sep 2005, 13:01
In welchem Format schiebst du das Bild denn auf das Gerät? GIFs haben übrigens Paletten.
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
cyberblast

Registriert seit: 17. Jun 2005
19 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: 8 bit Color Byte zu 24 bit Farbe umrechnen

  Alt 27. Sep 2005, 13:23
Das Format heisst KBM und wird wohl ein Kenwood eigenes Format sein.
Es hat einen 16-Bit grossen Header und ein paar Frames. Die einen Formate enthalten eine Palette, aber zu denen bin ich noch nicht gekommen.
Bin nun an dem Formaten die ohne Palette arbeiten. Bei einem anderen warens 1.5 Byte pixel, also 12bit, da musste ich einfach 0.5 bytes mal 16 rechnen und ich hatte den richtigen wert.
Aus den 8-bit Werten bin ich noch nicht ganz schlau geworden, sieht aber schon sehr ähnlich aus mit dem eurem Algorhytmus.

Und so siehts noch ein wenig besser aus:

Delphi-Quellcode:
procedure TForm1.Button4Click(Sender: TObject);
var
   ab : byte;
   r, g, b : byte;
begin
     ab := $FF;
     //10 101 101
     r := ab and $07 shl 5;
     g := ab and $38 shl 2;
     b := ab and $C0 + (ab and $01 shl 5);
     showmessage(inttostr(r));
     showmessage(inttostr(g));
     showmessage(inttostr(b));
end;
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

Re: 8 bit Color Byte zu 24 bit Farbe umrechnen

  Alt 27. Sep 2005, 13:44
Ich wollte eigentlich nur wissen, wie du das GIF-Bild erstellt hast - dafür hast du die Farben doch schon umwandeln müssen.


So kommst du nicht auf den vollen Wertebereich (bei deinen 4-Bit-Pixel übrigens auch nicht).

Code:
Gewollt:
0000 -> 00000000
1111 -> 11111111

Einfach x 16
0000 -> 00000000
1111 -> 11110000
Versuche mal den Vorschlag von DerDan oder die Bit-shr-or-Operation von mir oben, dann ist Weiß auch weiß!
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:18 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