AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Bild aus pByte speichern

Ein Thema von Graw · begonnen am 27. Jul 2017 · letzter Beitrag vom 27. Jul 2017
Antwort Antwort
Graw

Registriert seit: 26. Apr 2017
77 Beiträge
 
Delphi 11 Alexandria
 
#1

Bild aus pByte speichern

  Alt 27. Jul 2017, 07:24
Guten Morgen,

ich habe eine µEye Kamera von IDS.
Wie folgt kann ich das aktuelle Livebild in einem Panel anzeigen:
Code:
If (pImgMem <> nil) then is_RenderBitmap (hC, FrameId, pnuEye.Handle, DisplayMode)
pnuEye ist das Panel.

Die Bilddaten liegen in: pImgMem : pByte;

Das aktuelle Bild würde ich nun gerne speichern...
In dem pImgMem liegt ein Bild mit einer FullHD Auflösung, weshalb ich nicht einfach einen "Screenshot" von dem Panel amchen kann.
Hier würde ich dann zu viel Auflösung verlieren.
Leider weiß ich nicht wie ich das machen kann.
Über eure Hilfe wäre ich sehr Dankbar.
  Mit Zitat antworten Zitat
CarlAshnikov

Registriert seit: 18. Feb 2011
Ort: Erfurt
108 Beiträge
 
Delphi XE5 Enterprise
 
#2

AW: Bild aus pByte speichern

  Alt 27. Jul 2017, 07:57
Hallo,

kann man das Bild auf den Canvas eines TBitmap rendern lassen?

Delphi-Quellcode:
var
  bm: TBitMap;
begin
  bm := TBitMap.Create();
  try
    is_RenderBitmap (hC, FrameId, bm.Canvas.Handle, DisplayMode);
    bm.SaveToFile('test.bmp');
  finally
    bm.Free();
  end;
end;
Sebastian
Das kann ja wohl nicht var sein!
  Mit Zitat antworten Zitat
Graw

Registriert seit: 26. Apr 2017
77 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Bild aus pByte speichern

  Alt 27. Jul 2017, 08:24
Dann kommt beim öffnen des Bildes:
Das Bild kann nicht angezeigt werden, da die Datei leer ist.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: Bild aus pByte speichern

  Alt 27. Jul 2017, 08:27
Setz mal vorher die Höhe und Breite des Bitmaps.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Graw

Registriert seit: 26. Apr 2017
77 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Bild aus pByte speichern

  Alt 27. Jul 2017, 08:36
Dann ist das erzeugte Bild nur weiß.
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.908 Beiträge
 
Delphi 12 Athens
 
#6

AW: Bild aus pByte speichern

  Alt 27. Jul 2017, 09:34
Vielleicht geht es ja mit einem unsichtbaren TImage, statt des TBitmap.
Das ist ein echtes Control und hat womöglich einen Canvas-Handle vom System.
Könnte aber sein das unsichtbare Controls gar nicht erst gezeichnet werden.

Rollo
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: Bild aus pByte speichern

  Alt 27. Jul 2017, 09:38
Wenn du weißt wie groß das Bild hinter pImgMem ist, kannst du auch einfach die Daten hinter pImgMem in einen Stream packen und abspeichern.
Das wäre dann wahrscheinlich das einfachste.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
CarlAshnikov

Registriert seit: 18. Feb 2011
Ort: Erfurt
108 Beiträge
 
Delphi XE5 Enterprise
 
#8

AW: Bild aus pByte speichern

  Alt 27. Jul 2017, 09:59
Wenn man nur die rohen Bilddaten hat, muss man sich den passenden bitmap header generieren um das korrekt speichern zu können. Hier im Forum suchenbitmap header

Edit:

Wie wäre es die Funktionen direkt von IDS zu nehmen: is_saveimage oder is_imagefile?
Sebastian
Das kann ja wohl nicht var sein!

Geändert von CarlAshnikov (27. Jul 2017 um 10:12 Uhr) Grund: neue Erkenntnisse
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.060 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Bild aus pByte speichern

  Alt 27. Jul 2017, 11:06
Was sagt denn die Doku genau zu pImgMem? Ist das schon ein fertiges Bitmap, also mit den erforderlichen Headern, oder der reine Bildbuffer?
Wieviele Bits sind denn pro Bildpunkt vorhanden? 8-, 16-, 24-, 32-Bit? Kennst du die Größe des Buffers in Bytes? In der Regel bei Bitmap wäre das Höhe mal Breite mal 4.
Ist es wirklich unkomprimiertes Material oder muss man das erst einer JPEG-Dekodierung unterziehen?

Hier mal ein kleines Beispiel. Das Array MyBytes, die per Zufall gefüllt wird, entspricht dann deinen Bildbuffer, wo pImgMem drauf zeigt:

Delphi-Quellcode:
var
  MyStream: TStream;
  MyBitmap: TBitmap;
  MyBytes: TBytes;
  BitmapSize: Integer;
  I: Integer;
  BitmapInfo: TBitmapInfo;
  BitmapFileHeader: TBitmapFileHeader;
  pImgMem: PByte;
  BitmapHeight, BitmapWidth: Integer;
begin
  BitmapWidth := 1 * 1920;
  BitmapHeight := 1 * 1080;
  BitmapSize := BitmapWidth * BitmapHeight * 4;
  SetLength(MyBytes, BitmapSize);

  for I := Low(MyBytes) to High(MyBytes) do
  begin
    MyBytes[I] := RandomRange(Low(Byte), High(Byte));
  end;

  FillChar(BitmapInfo, SizeOf(BitmapInfo), 0);
  BitmapInfo.bmiHeader.biSize := SizeOf(BitmapInfo.bmiHeader);
  BitmapInfo.bmiHeader.biHeight := -BitmapHeight;
  BitmapInfo.bmiHeader.biWidth := BitmapWidth;
  BitmapInfo.bmiHeader.biPlanes := 1;
  BitmapInfo.bmiHeader.biBitCount := 32;

  FillChar(BitmapFileHeader, SizeOf(BitmapFileHeader), 0);
  BitmapFileHeader.bfType := $4D42;

  MyStream := TMemoryStream.Create;
  MyStream.Write(BitmapFileHeader, SizeOf(BitmapFileHeader));
  MyStream.Write(BitmapInfo, SizeOf(BitmapInfo));

  pImgMem := @MyBytes[0];
  MyStream.Write(pImgMem^, BitmapSize);
  MyStream.Position := 0;

  MyBitmap := TBitmap.Create;
  MyBitmap.LoadFromStream(MyStream);

  ForceDirectories('C:\Test');
  MyBitmap.SaveToFile('C:\Test\Test1.bmp');

  MyStream.Free;
  MyBitmap.Free;
end;
  Mit Zitat antworten Zitat
Graw

Registriert seit: 26. Apr 2017
77 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Bild aus pByte speichern

  Alt 27. Jul 2017, 13:50

Die Lösung kann so einfach sein...
Vielen dank an alle, besonders an CarlAshnikov...
Mit is_saveimage hat es nun wunderbar geklappt.

  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:17 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