AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia 15Bit RGB in TBitmap32 konvertieren
Thema durchsuchen
Ansicht
Themen-Optionen

15Bit RGB in TBitmap32 konvertieren

Ein Thema von SittingDuck · begonnen am 7. Mai 2011 · letzter Beitrag vom 8. Mai 2011
Antwort Antwort
SittingDuck

Registriert seit: 11. Jan 2006
Ort: Leverkusen
159 Beiträge
 
Delphi 2010 Professional
 
#1

15Bit RGB in TBitmap32 konvertieren

  Alt 7. Mai 2011, 13:11
Moin zusammen ...

Ich versuche 16Bit RGB(555) Raw-Daten in ein TBitmap32 zu bekommen, aber irgendwas stimmt hier nicht ... Bit-Schieben ist nicht so meine Stärke. Wer kann helfen? Dieses Format wird hier ganz gut beschrieben.

Delphi-Quellcode:
 

var i: Integer; Ptr: Pointer; RawMS: TMemoryStream;

  RawMS.CopyFrom(SourceMS, 50560); // RawDaten holen (158 * 158 * 2)
   
  bmp := TBitmap.Create;
  TempMap := TBitmap32.Create;

  bmp.Width := 158; bmp.Height := 158;
  bmp.PixelFormat := pf15bit; // so stimmen zumindestens die Farben

  for i := 0 to 157 do begin
    Ptr := bmp.ScanLine[i];
    RawMS.Read(Ptr^, bmp.Width * 2);
  end;

  TempMap.Assign(bmp);
  TempMap.DrawTo(FotosImage.Bitmap, 4, 4); // Ausgeben auf einem TImageView32
Das Ergebnis ist irgendwie verschoben. (siehe Bild im Anhang ... soll ein grinsender Smiley sein)
Auch gefällt mir der Umweg über das TBitmap nicht. Kann man das nicht direkt in ein TBitmap32 einlesen?
Angehängte Grafiken
Dateityp: png Smiley.png (24,2 KB, 12x aufgerufen)
Ciao ... SittingDuck
iPhone Backup und mehr: iTwin v3.9 Beta ... Alternative Startleiste: Launcher v3.8 !

Geändert von SittingDuck ( 7. Mai 2011 um 13:23 Uhr) Grund: Format-Beschreibung hinzugefügt
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

AW: 15Bit RGB in TBitmap32 konvertieren

  Alt 7. Mai 2011, 14:31
TBitmap32 müsste doch eine setpixel Methode oder so haben.
Dann einfach immer 2 byte aus dem Stream lesen, umwandeln und die Farbe zuweisen.
Das umwandeln kannst du gut in eine kleine Funktion auslagern die die Bits shiftet und einen TColor32 zurückgibt.
Ungefähr so:
Delphi-Quellcode:
function Convert15bitToColor32(x: Word): TColor32;
begin
  Result.B := (x or $1F) shl 3;
  Result.G := (x or $3E0) shr 2;
  Result.R := (x or $7C00) shr 7;
end;
  Mit Zitat antworten Zitat
SittingDuck

Registriert seit: 11. Jan 2006
Ort: Leverkusen
159 Beiträge
 
Delphi 2010 Professional
 
#3

AW: 15Bit RGB in TBitmap32 konvertieren

  Alt 7. Mai 2011, 16:21
Super Idee ... Danke schonmal für Deine Hilfe. Trotzdem, irgenwas mache ich noch falsch.
Delphi-Quellcode:
var i: Integer; Buf: Word; col32: TColor32; RawMS: TMemoryStream;

begin
  RawMS.CopyFrom(SourceMS, 50560); // RawDaten holen (158 * 158 * 2)
   
  TempMap := TBitmap32.Create; TempMap.SetSize(158, 158);

  for j := 0 to 157 do
    for i := 0 to 157 do begin
      RawMS.ReadBuffer(Buf, 2);
      
      TColor32Entry(col32).A := 255;
      TColor32Entry(col32).R := Byte(Buf or $7C00);
      TColor32Entry(col32).G := Byte(Buf or $3E0 );
      TColor32Entry(col32).B := Byte(Buf or $1F );
      
      TempMap.SetPixelT(i, j, col32);
    end;
  end;
  
  TempMap.DrawTo(FotosImage.Bitmap, 4, 4); // Ausgabe auf einem TImageView32
end;
Das Bitmap ist danach einfach nur weiss ...
Ciao ... SittingDuck
iPhone Backup und mehr: iTwin v3.9 Beta ... Alternative Startleiste: Launcher v3.8 !

Geändert von SittingDuck ( 7. Mai 2011 um 16:22 Uhr) Grund: Ergebnis fehlte ...
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#4

AW: 15Bit RGB in TBitmap32 konvertieren

  Alt 7. Mai 2011, 16:26
Du musst schon bitshiften...
  Mit Zitat antworten Zitat
SittingDuck

Registriert seit: 11. Jan 2006
Ort: Leverkusen
159 Beiträge
 
Delphi 2010 Professional
 
#5

AW: 15Bit RGB in TBitmap32 konvertieren

  Alt 7. Mai 2011, 16:38
Stimmt, habe ich vergessen hinzuschreiben ... (Copy/Paste-Fehler von mir)
Delphi-Quellcode:
    TColor32Entry(col32).A := 255;
    TColor32Entry(col32).R := Byte(Buf or $7C00) shr 7;
    TColor32Entry(col32).G := Byte(Buf or $3E0 ) shr 2;
    TColor32Entry(col32).B := Byte(Buf or $1F ) shl 3;
So hatte ich es auch gemacht ... der Effekt (weißes Bild) bleibt aber.
Ciao ... SittingDuck
iPhone Backup und mehr: iTwin v3.9 Beta ... Alternative Startleiste: Launcher v3.8 !
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#6

AW: 15Bit RGB in TBitmap32 konvertieren

  Alt 7. Mai 2011, 16:43
Auf den zweiten Blick: Müsste es nicht AND sein statt OR?
  Mit Zitat antworten Zitat
Antwort Antwort


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 08:46 Uhr.
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 by Thomas Breitkreuz