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
Namenloser

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

AW: 15Bit RGB in TBitmap32 konvertieren

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

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

AW: 15Bit RGB in TBitmap32 konvertieren

  Alt 7. Mai 2011, 15: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
 
#3

AW: 15Bit RGB in TBitmap32 konvertieren

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

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

AW: 15Bit RGB in TBitmap32 konvertieren

  Alt 7. Mai 2011, 16:01
Auf den zweiten Blick: Müsste es nicht AND sein statt OR?
Ja, müsste es. Tut mir Leid ^^
  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, 19:33
Ja, das wars ... Danke für Eure Hilfe. Hier nochmal die bereinigte Routine, falls ein anderer mal vor einem ähnlichen Problem steht.
Delphi-Quellcode:
var i: Integer; b: Word; TempMap: TBitmap32; ms: TMemoryStream; P: PColor32;
begin
  ms := TMemoryStream.Create; ms.LoadFromFile('Pic.raw'); ms.Position := 0;
  
  with TempMap do begin SetSize(150, 150); P := PixelPtr[0, 0];
   
    for i := 0 to Width * Height - 1 do begin ms.ReadBuffer(b, 2);
      P^ := Color32(b and $7C00 shr 7, b and $3E0 shr 2, b and $1F shl 3);
      Inc(P);
    end;

    DrawTo(FotosImage.Bitmap, 4, 4, Rect(0, 0, 150, 150));
  end;
end;
Dies dürfte wohl auch die schnellste Lösung sein. Im Anhang das korrigierte Bild.
Angehängte Grafiken
Dateityp: png SmileyOK.png (23,7 KB, 5x aufgerufen)
Ciao ... SittingDuck
iPhone Backup und mehr: iTwin v3.9 Beta ... Alternative Startleiste: Launcher v3.8 !
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#6

AW: 15Bit RGB in TBitmap32 konvertieren

  Alt 7. Mai 2011, 19:51
Dies dürfte wohl auch die schnellste Lösung sein. Im Anhang das korrigierte Bild.
Will zwar nicht kleinlich sein, aber wenn du die Funktion Color32() als Inline deklarierst, sparst du einen Call Befehl und somit dürfte das dann um einen Tick schneller sein
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#7

AW: 15Bit RGB in TBitmap32 konvertieren

  Alt 8. Mai 2011, 06:59
Delphi-Quellcode:
procedure Load15BitPicFromRawFile(Filename: String; W, H: integer;
  DestBitmap32: TBitmap32; PosX, PosY: integer);
var
  i: Integer;
  b: Word;
  P: PColor32;
begin
  with TMemoryStream.Create do
  try
    LoadFromFile(Filename);
    Position := 0;

    with TBitmap32.Create do
    try
      SetSize(W, H);
      P := PixelPtr[0, 0];

      for i := 0 to Width * Height - 1 do
      begin
        ReadBuffer(b, 2);
        P^ := $FF000000 or (b and $7C00 shr 7) or (b and $3E0 shr 2) or (b and $1F shl 3);
        Inc(P);
      end;

      DrawTo(DestBitmap32, PosX, PosY);
    finally
      Free;
    end;
  finally
    Free;
  end;
end;
Oder so ?
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser

Geändert von turboPASCAL ( 8. Mai 2011 um 07:13 Uhr)
  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 21:35 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-2025 by Thomas Breitkreuz