Announcement

Collapse
No announcement yet.

TBitmap aus einem TMemoryStream

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

  • TBitmap aus einem TMemoryStream

    Hallo,
    folgende Situation:

    Ich habe einen Stream vom Typ "TMemoryStream". In diesem sind die Daten für ein Bitmap enthalten. Ich prüfe die Gültigkeit dieser Daten zum Testen mittels:

    memStream.SaveToFile('c:\load_stream.bmp');

    Als Ergebnis erhalte ich ein korrekte Bitmap-Datei, welche sich mit gängiger Standard-Softweare behandeln lässt. Wenn ich aber aus diesen Stream-Daten ein TBitmap erzeugen will, erhalte ich kein korrektes Bitmap mehr:

    aBitmap:= TBitmap.Create;
    aBitmap.LoadFromStream( memStream );
    aBitmap.SaveToFile('c:\rekonstruiert.bmp');

    Die jetzt erzeugte Datei ist zwar gleicher Grösse, lässt sich nicht mehr fehlerfrei öffnen. Ein Binärvergleich zeigt Unterschiede an. Könnte mir bitte einer erklären, wo der Fehler liegt? [Ich nutze Delphi 6.01 unter Windows XP]

    Danke und beste Grüße aus Hamburg,

    Daniel R. Wolf

  • #2
    <font face="Arial">
    Hi&nbsp;Daniel,<br>
    <br>
    Du&nbsp;solltest&nbsp;das&nbsp;Bitmap&nbsp;so&nbsp ;erzeugen:<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;aBitmap&nbsp;: =&nbsp;TBitmap.Create;<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;aBit map&nbsp;do&nbsp;try<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;HandleType&nbsp;:=&nbsp;bmDIB;&nbsp;//&nbsp;oder&nbsp;bmDDB<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;PixelFormat&nbsp;:=&nbsp;pf24Bit;<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;except<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;aBitmap.Free;<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>
    <br>
    Wichtig&nbsp;ist&nbsp;das&nbsp;PixelFormat.&nbsp;< br>
    Das&nbsp;solltest&nbsp;Du&nbsp;immer&nbsp;setzen&n bsp;<br>
    <br>
    Gru&szlig;<br>
    Harald&nbsp;Binder<br>
    </font&gt

    Comment


    • #3
      Hallo Harald,

      vielen Dank für Deine Antowrt; geholfen hat sie leider nicht. Mein Code sieht jetzt folgendermassen aus:

      aBitmap:= TBitmap.Create;<BR>
      aBitmap.HandleType:= bmDIB;<BR>
      aBitmap.PixelFormat:= pf24bit;<BR>
      aBitmap.LoadFromStream( memStream );<BR>
      aBitmap.SaveToFile('c:\rekonstruiert.bmp');<BR>

      Die erzeugte Datei lässt sich immer noch nicht öffnen. Wenn ich mir die Methode "TBitmap.LoadFromStream" ansehe, dann habe ich den Verdacht, dass die Eigenschaften Pixelformat und HandleType sowieso neu gesetzt werden...

      Comment


      • #4
        <font face="Arial">
        Hi&nbsp;Daniel,<br>
        welche&nbsp;Farbtiefe&nbsp;hat&nbsp;den&nbsp;Dein& nbsp;BitmapStream??<br>
        Du&nbsp;musst&nbsp;nat&uuml;rlich&nbsp;auch&nbsp;d ie&nbsp;richtige&nbsp;Farbtiefe<br>
        einstellen.&nbsp;Schau&nbsp;doch&nbsp;mal&nbsp;in& nbsp;der&nbsp;Delphihilfe<br>
        unter&nbsp;&quot;PixelFormat&quot;&nbsp;nach.<br>
        <br>
        Gru&szlig;<br>
        <br>
        Harald&nbsp;Binder<br>
        <br>
        </font&gt

        Comment


        • #5
          24 Bit sind schon völlig richtig. Und auch der Wechsel von DDB zu DIB und zurück bringt leider keinen Gewinn

          Comment


          • #6
            oder einfach MemoryStream.SaveToFile(

            Comment

            Working...
            X