AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

SOAP TBytpeDynArray zum Bild

Ein Thema von arnof · begonnen am 12. Jul 2018 · letzter Beitrag vom 12. Jul 2018
Antwort Antwort
arnof

Registriert seit: 25. Apr 2013
1.139 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#1

SOAP TBytpeDynArray zum Bild

  Alt 12. Jul 2018, 16:39
Hallo,

ich bekomme via Soap Webservice ein Bild in einem

TByteDynArray mit bekannter länge geliefert.

Weis jemand wie ich daraus ein Bild anzeigen kann ohne auf die Platte zu Speichern
Mein Leitspruch: nur der wissende weiß, dass er nichts weiß ....
SEPA-Komponente für Delphi Banking für Entwickler
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
1.334 Beiträge
 
Delphi 2009 Professional
 
#2

AW: SOAP TBytpeDynArray zum Bild

  Alt 12. Jul 2018, 16:54
Hier ein JPEG Beispiel, zuerst zerlege ich das JPEG in Bytes, danach wandel ich alles wieder in ein JPEG um.
Füge an passender Stelle Deinen SOAP Code ein.
Delphi-Quellcode:
procedure TfrmMain.Button1Click(Sender: TObject);
var
  memStream : TMemoryStream;
  aByteArray : array of Byte;
  aGraphic1, aGraphic2 : TJPEGImage;
begin
  aGraphic2 := nil;
  aGraphic1 := TJPEGImage.Create;
  try
    aGraphic1.Assign(Image1.Picture.Graphic);

    // Konvertiere JPEG in ein array of byte
    memStream := TMemoryStream.Create;
    try
      aGraphic1.SaveToStream(memStream);
      memStream.Position := 0;
      SetLength(aByteArray, memStream.Size);
      memStream.ReadBuffer(Pointer(aByteArray)^, memStream.Size);
    finally
      FreeAndNil(memStream);
    end;

// Hier Dein Senden Code für aByteArray

// SuppeSendeBytes()

// Jetzt folgt Code um das ganze wieder zum laufen zu bringen

    // Konvertiere array of byte nach JPEG
    memStream := TMemoryStream.Create;
    try
      memStream.WriteBuffer(Pointer(aByteArray)^, Length(aByteArray));
      memStream.Position := 0;
      aGraphic2 := TJPEGImage.Create;
      aGraphic2.LoadFromStream(memStream);
    finally
      FreeAndNil(memStream);
    end;


    // Zeige das Bild
    Image2.Picture.Assign(aGraphic2);
  finally
    // aufräumen
    SetLength(aByteArray, 0);
    FreeAndNil(AGraphic2);
    FreeAndNil(AGraphic1);
  end;
end;
Gruß vom KodeZwerg

Geändert von KodeZwerg (12. Jul 2018 um 17:08 Uhr)
  Mit Zitat antworten Zitat
arnof

Registriert seit: 25. Apr 2013
1.139 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#3

AW: SOAP TBytpeDynArray zum Bild

  Alt 12. Jul 2018, 17:07
Format ist nicht bekannt, in der Doku steht Bilddaten ....

Delphi-Quellcode:
  try
   BlobStream := TMemoryStream.Create;
   BlobStream.Read(eccPic.Data[0],eccPic.DataLength);
   Blobstream.Position := 0;
   Jpg := TJPEGImage.Create;
   try
     Jpg.LoadFromStream(BlobStream);
     cxImage1.Picture.Assign(Jpg);
   finally
     Jpg.Free;
   end;
  finally
   BlobStream.Free;
  end;
das war mein Versuch, fliegt aber weg wenn das Bild angezeigt werden soll:

JPEG-FEHLER #42
Mein Leitspruch: nur der wissende weiß, dass er nichts weiß ....
SEPA-Komponente für Delphi Banking für Entwickler
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
1.334 Beiträge
 
Delphi 2009 Professional
 
#4

AW: SOAP TBytpeDynArray zum Bild

  Alt 12. Jul 2018, 17:10
Ohhh, dann nützt Dir mein Beispiel-Code auch nicht, oder doch? Ist halt auf JPEG zugeschnitten.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
arnof

Registriert seit: 25. Apr 2013
1.139 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#5

AW: SOAP TBytpeDynArray zum Bild

  Alt 12. Jul 2018, 17:16
ich weiss nicht genau, ob das

BlobStream.Read(eccPic.Data[0],eccPic.DataLength);

stimmt ?
Mein Leitspruch: nur der wissende weiß, dass er nichts weiß ....
SEPA-Komponente für Delphi Banking für Entwickler
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
1.334 Beiträge
 
Delphi 2009 Professional
 
#6

AW: SOAP TBytpeDynArray zum Bild

  Alt 12. Jul 2018, 17:29
Was bei Dir BlobStream heißt nennt sich bei mir MemStream, vergleiche das einfach.
Wenn dabei Fehler auftreten wäre es praktisch mal ein Beispiel Bild zu erhalten um das Bildformat zu bestimmen.
Wenn es Unterschiedliche Formate sein können muss man das dem Programm beibringen.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
arnof

Registriert seit: 25. Apr 2013
1.139 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#7

AW: SOAP TBytpeDynArray zum Bild

  Alt 12. Jul 2018, 17:30
ich habe es nun via FileStream als bild.jpg gespeichert. dann erscheint das Bild, wie es soll!

Delphi-Quellcode:
  fi:=TFileStream.Create('D:\test\bild.jpg',fmCreate);
  fi.Write(eccPic.Data[0],eccPic.DataLength);
  fi.Free;
Delphi-Quellcode:
  try
   BlobStream := TMemoryStream.Create;
   BlobStream.Read(eccPic.Data[0],eccPic.DataLength);
   Blobstream.Position := 0;

  fi:=TFileStream.Create('D:\test\bild.jpg',fmCreate);
  fi.Write(eccPic.Data[0],eccPic.DataLength);
  fi.Free;


   Jpg := TJPEGImage.Create;
   try
// Jpg.LoadFromStream(BlobStream);
// cxImage1.Picture.Assign(Jpg);
     cxImage1.Picture.LoadFromFile('D:\test\bild.jpg');
   finally
     Jpg.Free;
   end;
  finally
   BlobStream.Free;
  end;
weiss jemand wie das nur via memorystream geht ?
Mein Leitspruch: nur der wissende weiß, dass er nichts weiß ....
SEPA-Komponente für Delphi Banking für Entwickler
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
1.334 Beiträge
 
Delphi 2009 Professional
 
#8

AW: SOAP TBytpeDynArray zum Bild

  Alt 12. Jul 2018, 17:35
Delphi-Quellcode:
  try
   BlobStream := TMemoryStream.Create;
   BlobStream.WriteBuffer(eccPic.Data[0],eccPic.DataLength); // hier sollen wir schreiben und nicht lesen oder?
   Blobstream.Position := 0;
   Jpg := TJPEGImage.Create;
   try
     Jpg.LoadFromStream(BlobStream);
     cxImage1.Picture.Assign(Jpg);
   finally
     Jpg.Free;
   end;
  finally
   BlobStream.Free;
  end;
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
arnof

Registriert seit: 25. Apr 2013
1.139 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#9

AW: SOAP TBytpeDynArray zum Bild

  Alt 12. Jul 2018, 17:37
kaum macht man es richtig, funktionierst

Delphi-Quellcode:
try
   BlobStream := TMemoryStream.Create;
   BlobStream.Write(eccPic.Data[0],eccPic.DataLength);
   Blobstream.Position := 0;
   Jpg := TJPEGImage.Create;
   try
     Jpg.LoadFromStream(BlobStream);
     cxImage1.Picture.Assign(Jpg);
   finally
     Jpg.Free;
   end;
  finally
   BlobStream.Free;
  end;
wenn man Read und Write verwechselt, so wird das nichts

Danke für die Hilfe!
Mein Leitspruch: nur der wissende weiß, dass er nichts weiß ....
SEPA-Komponente für Delphi Banking für Entwickler
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
1.334 Beiträge
 
Delphi 2009 Professional
 
#10

AW: SOAP TBytpeDynArray zum Bild

  Alt 12. Jul 2018, 17:43
Danke für die Hilfe!
Gern geschehen
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 16:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2018 by Daniel R. Wolf