Announcement

Collapse
No announcement yet.

TImage, TBlobField und JPEG: Wie bekomme ich die nur zusammen?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • TImage, TBlobField und JPEG: Wie bekomme ich die nur zusammen?

    Nachdem ich mehrere Tage vergeblich div. Komponenten probiert, Source und Hilfedateien gelesen haben, weiß ich nicht mehr weiter.
    <p>
    Ich speichere in einer Paradox-DB Jpeg-Dateien (TWeinW_Etikett.LoadFromFile(OpenPictureDialog1.Fi leName).<br>
    Ich möchte Sie aus der Tabelle (OnDataChange) direkt in TImage wieder anzeigen:<p>
    <br>
    var MS : TMemoryStream;<br>
    SJpeg : TJpegImage;<br>
    FBmp : TBitmap;<br>
    begin<br>
    MS := TMemoryStream.Create;<br>
    SJPEG := TJpegImage.Create;<br>
    FBmp := TBitmap.Create;<br>
    <br>
    try<br>
    TWeinW_Etikett.SaveToStream(MS);<br>
    <br>
    // so funktionierts MS.SaveToFile('d:\test0.jpeg');<br>
    SJpeg.LoadFromFile('d:\test0.jpeg');<br>
    <br>
    // direkt aber nicht SJpeg.LoadFromStream(MS);<br>
    <br>
    FBmp.Width := SJpeg.Width;<br>
    FBmp.Height := SJpeg.Height;<br>
    FBmp.Canvas.Draw(0,0, SJpeg);<br>
    Image1.Picture.Bitmap := FBmp;<br>
    finally<br>
    MS.Free;<br>
    SJPEG.Free;<br>
    FBmp.Free;<br>
    end;<br>
    <br>
    Warum funktioniert der Austausch über SaveTo-/LoadFromFile und warum nicht über den TMemoryStream?<br>
    Die Infos im Forum basieren leider nur auf die LoadFromFile-Procedure (s. u.).<br>
    Über eure Hilfe (ggf. mit Code) wäre ich echt dankbar.<br>
    <br>
    <br>
    Vielen Dank im voraus Detlef<br>

  • #2
    hi,

    vielleicht hilft dir dies weiter <br>

    procedure THAAuftrag.TblBodenBildAfterScroll(DataSet: TDataSet); <br>
    var <br>
    JPeg : TJPegImage; <br>
    BS : TBlobStream; <br>
    begin <br>
    if not TBlobField(TblBodenBild.FieldByName('Bild')).IsNul l then //is There a picture? <br>
    begin <br>
    JPeg := TJpegImage.Create; <br>
    BS := TBlobStream.Create(TBlobField(TblBodenBild.FieldBy Name('Bild')),bmRead); <br>
    Try <br>
    JPeg.LoadFromStream(BS); <br>
    Image3.Picture.Bitmap.Assign(JPeg); <br>
    finally <br>
    JPeg.Free; <br>
    BS.Free; <br>
    end; <br>
    end <br>
    else <br>
    Image3.Picture.Bitmap.Assign(Nil); //there is no Image <br>
    end; <br>

    meik

    Comment


    • #3
      Hallo Meikl, ...;-)

      hat super toll funktioniert: der Code ist schnell und zuverlässig!<br>

      Herzlichen Dank, endlich konnte ich wieder ruhig schlafen.<br>

      Detle

      Comment


      • #4
        :-)) nice to hea

        Comment


        • #5
          Hallo meikl, Danke, hatte das gleiche Problem.
          Noch dazu: Bei gemischten Bildern (BMP, JPG) dann so:
          Beispiel: Daten sind in Query1 im Feld BILD
          Try
          try
          JPeg.LoadFromStream(BS);
          Image3.Picture.Bitmap.Assign(JPeg); // JPG
          except
          Image3.Picture.Bitmap.Assign(Query1BIL); // Für BMP
          end;
          finally
          JPeg.Free;
          BS.Free;
          end

          Comment


          • #6
            Hallo Detlef,

            Du hast zwar eine Lösung für Dein Problem, dennoch noch folgende Anmerkung zu Deinem Source. Wenn Du SaveToStream machst, mußt Du, vorm dem LoadFromStream erst die Position zurücksetzn mit Stream.Position := 0; Ansonsten steht der Positionszeiger am Ende und kann logischerweise nichts lesen.

            Ciao Torste

            Comment

            Working...
            X