Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi 8 bit Color Byte zu 24 bit Farbe umrechnen (https://www.delphipraxis.net/54060-8-bit-color-byte-zu-24-bit-farbe-umrechnen.html)

Grishnak 27. Sep 2005 13:54

Re: 8 bit Color Byte zu 24 bit Farbe umrechnen
 
Ist zwar ein anderes Forum :!: , aber hier findest du genau, was du suchst! :thumb:

cyberblast 27. Sep 2005 13:59

Re: 8 bit Color Byte zu 24 bit Farbe umrechnen
 
Ja du hast recht, das war au käse von mir...Dachte ich habe eine Regel gesehen, das war leider nur bei dem Graustufen bild der fall.

Das Gif habe nicht ich erstellt, die waren als Vorschau da um zu sehen was in den KBM Dateien für bilder enthalten sind.

Das Format mit den 12 Bit Pixel ist für die Radios mit einem 4096-Farben Display. Diese habe ich bereits ausgelesen und umgerechnet, sind haargenau die selben Farben wie auf der Vorschau.

Daher denke ich, muss ich nur rausfinden wie sie die Pixel im 8bit modus errechnen. Das 8bit Format ist übrigens auch für den 4096-Farben Display.

DerDan 27. Sep 2005 13:59

Re: 8 bit Color Byte zu 24 bit Farbe umrechnen
 
Zitat:

Zitat von himitsu
@DerDan: "nichts Richtiges" :zwinker:

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


Solange die Kiste Rechnen muss!
Und um ein paar mal ein Bild anzusehen.
Eine mathe Formel ist anschaulicher als Bit Schiebe Operationen!

Und sowieso:

Bevor man irgendetwas optimiert muss es erst mal funktionieren.
Wird oft genug anderst gemacht-> das Ergebnis ist dann zwar assig schnell, funktioniert aber nicht!


DerDan

cyberblast 27. Sep 2005 14:00

Re: 8 bit Color Byte zu 24 bit Farbe umrechnen
 
@Grishnak

Das war die 12Bit Variante ;-)

Flocke 27. Sep 2005 14:19

Re: 8 bit Color Byte zu 24 bit Farbe umrechnen
 
Also auf den Wert 176 kommt man nur, wenn man den 8-Bit- in einen 12-Bit-Wert umwandelt und dann einfach x16 nimmt, also:

Delphi-Quellcode:
procedure TForm1.Button4Click(Sender: TObject);
var
  ab: byte;
  r, g, b: byte;
begin
  ab := $FF;
  r := 16 * ((( ab       and 7) * 15) div 7);
  g := 16 * ((((ab shr 3) and 7) * 15) div 7);
  b := 16 * ((((ab shr 6) and 3) * 15) div 3);

  showmessage(inttostr(r));
  showmessage(inttostr(g));
  showmessage(inttostr(b));
end;
Du solltest dann aber vielleicht mit einer CLUT (Color Lookup Table) arbeiten und diese bei der Initialisierung füllen.

Delphi-Quellcode:
var
  clut: array [byte] of TColor;

procedure InitClut;
var
  ab: byte;
  r, g, b: byte;
begin
  for ab := $00 to $FF do
  begin
    r := 16 * ((( ab       and 7) * 15) div 7);
    g := 16 * ((((ab shr 3) and 7) * 15) div 7);
    b := 16 * ((((ab shr 6) and 3) * 15) div 3);
    clut[ab] := RGB(r, g, b);
  end;
end;

himitsu 27. Sep 2005 14:22

Re: 8 bit Color Byte zu 24 bit Farbe umrechnen
 
@DerDan:
na funktionieren sollte es ja.

Und im Endefekt würde von den hier angebotenen Möglichkeiten wohl die mit dem Array, wo alle 256 Farben schon fertig umcodiert sind, wohl am schnellsten sein, da dort ja schließliech nur 1 bis 2 MOV-Operatioen nötig wären

Flocke 27. Sep 2005 14:25

Re: 8 bit Color Byte zu 24 bit Farbe umrechnen
 
... und wenn er's richtig schnell haben will und die Breite der Grafik glatt durch 4 teilbar ist, dann nimmt er einen TMemoryStream und schreibt

1. TBitmapFileHeader
2. TBitmapInfoHeader
3. die CLUT als Palette
4. die Bits seiner Bitmap

hinein, setzt Stream.Position wieder auf 0 und kann damit ein TBitmap.LoadFromStream machen :mrgreen:

cyberblast 27. Sep 2005 14:37

Re: 8 bit Color Byte zu 24 bit Farbe umrechnen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi Flocke

Bei deiner Berechnung werden folgende Bilder generiert: Siehe Anhang :-(

Flocke 27. Sep 2005 14:45

Re: 8 bit Color Byte zu 24 bit Farbe umrechnen
 
Sind Fehlfarben :(
Variier mal die Bitbreiten:

Delphi-Quellcode:
r := 16 * ((( ab       and 3) * 15) div 3);
g := 16 * ((((ab shr 2) and 7) * 15) div 7);
b := 16 * ((((ab shr 5) and 7) * 15) div 7);
Delphi-Quellcode:
r := 16 * ((( ab       and 7) * 15) div 7);
g := 16 * ((((ab shr 3) and 3) * 15) div 3);
b := 16 * ((((ab shr 5) and 7) * 15) div 7);

DerDan 27. Sep 2005 14:45

Re: 8 bit Color Byte zu 24 bit Farbe umrechnen
 
Zitat:

Zitat von himitsu
@DerDan:
na funktionieren sollte es ja.

Und im Endefekt würde von den hier angebotenen Möglichkeiten wohl die mit dem Array, wo alle 256 Farben schon fertig umcodiert sind, wohl am schnellsten sein, da dort ja schließliech nur 1 bis 2 MOV-Operatioen nötig wären

Was sicher stimmt, aber um die Tablle zu erstellen brauchst dann entweder ein extra Program
eine Routine die die Tabelle erstellt oder musst sie von hand ausrechnen.

kann man alles machen, sobald es funktioniert.

Und wehe man hat ein paar wenige Fehler in der Tabelle ...


mfg

Der Dan


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:50 Uhr.
Seite 2 von 3     12 3      

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-2025 by Thomas Breitkreuz