Announcement

Collapse
No announcement yet.

Image.Save: Überschreiben

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

  • Image.Save: Überschreiben

    Wie schon im Subject gesagt:<br>
    Wenn ich mit der Methode<br>
    <code>Image.Save(string, ImageCodecInfo, EncoderParameters)</code><br>
    eine größere Datei mit einer kleineren überschreibe, bleibt die Dateigröße unverändert auf dem Wert der größeren Datei.<br>
    Wie kann man das vermeiden?<br>
    Gruß, Marc-A.

  • #2
    Wie überprüfdt Du die Größe der Datei programmtechnisch oder mit Windowswerkzeugen

    Comment


    • #3
      Beides... sowohl im Datei-Explorer als auch programmtechnisch.<br> Speichere ich die Datei unter einem neuen Namen ab, dann hat sie die richtige Größe.<br>
      Wenn das kein Bug ist, so ist's doch ein sehr seltsames Verhalten, dessen Sinn sich mir nicht erschließt.
      Ein Beispiel (Konsolen-Anwendung):<br>
      <pre>
      using System;
      using System.Drawing;
      using System.Drawing.Imaging;

      namespace ConsoleApplication1
      {
      class Class1
      {
      [STAThread]
      static void Main(string[] args)
      {
      Bitmap myBitmap1 = new Bitmap(1000,1000);
      myBitmap1.Save(".\\bitmap1.jpg", ImageFormat.Jpeg);
      myBitmap1.Dispose();
      Bitmap myBitmap2 = new Bitmap(10,10);
      myBitmap2.Save(".\\bitmap2.jpg", ImageFormat.Jpeg);
      System.IO.FileInfo fileInfo1 = new System.IO.FileInfo(".\\bitmap1.jpg");
      Console.WriteLine("File '{0}' created of size {1} bytes", ".\\bitmap1.jpg", fileInfo1.Length);
      System.IO.FileInfo fileInfo2 = new System.IO.FileInfo(".\\bitmap2.jpg");
      Console.WriteLine("File '{0}' created of size {1} bytes", ".\\bitmap2.jpg", fileInfo2.Length);
      // save the small bitmap with the filename of the larger one:
      myBitmap2.Save(".\\bitmap1.jpg", ImageFormat.Jpeg);
      myBitmap2.Dispose();
      fileInfo1.Refresh();
      Console.WriteLine("File '{0}' is still of size {1} bytes...", ".\\bitmap1.jpg", fileInfo1.Length);
      }
      }
      }
      </pre&gt

      Comment


      • #4
        Ich habe inzwischen Antwort von John Hornick von Microsoft:<br>
        <br>
        'Yes, this is expected behavior. When you Save(), only the<br>
        "interesting" bytes in the file are overwritten, and the<br>
        file is not truncated. You can delete or truncate the file<br>
        yourself if you want to alter this behavior.'<br>
        <br>
        Ich versteh' zwar immer noch nicht den tieferen Sinn... aber nun gut

        Comment


        • #5
          <p>Der Grund, warum derart verschwenderisch mit Speicherplatz umgegangen wird, ist Performanz. Falls die Datei wächst, steht der notwendige Platz bereits zur Verfügung. Zusätzliche Aktionen für Allokationen und byte-Transfers müssen zunächst nicht stattfinden oder werden so reduziert. <br>
          Hiermit möchte ich aber nicht ausdrücken, ob und inwieweit diese Vorgehensweise sinnvoll ist.
          </p&gt

          Comment


          • #6
            Ich hab' inzwischen festgestellt, dass dieses Verhalten unter XP nicht auftritt. Ich programmiere und teste bislang noch unter NT4, und dort passiert's. Was mit 9x/ME/2000 ist kann ich leider nicht sagen...<br>
            Habe mal Screenshots davon online gestellt:<br>
            <a href="http://www.virtuelle-maschine.de/site/demo/dotnet_image/">http://www.virtuelle-maschine.de/site/demo/dotnet_image</a><br>
            Gruß, Marc-A

            Comment


            • #7
              Tja, das Problem hatte ich auch.......ohne Erfolg

              Comment

              Working...
              X