1

画像を保存するために savefiledialog を使用しています。キャンバスはピクチャーボックスで、読み込まれた画像はビットマップです。保存しようとすると、ファイルは作成されますが、何らかの理由で破損しています。画像を再度読み込もうとしたり、別のビューアで表示したりしてもうまくいきません。つまり、保存したファイルが壊れているということです。画像を保存する方法があります。

 private void saveFileDialog1_FileOk(object sender, CancelEventArgs e)
        {

           System.IO.FileStream fs =
                (System.IO.FileStream)saveFileDialog1.OpenFile();

           try
           {
               switch (saveFileDialog1.FilterIndex)
               {
                   case 1:
                       canvas.Image.Save(saveFileDialog1.FileName, System.Drawing.Imaging.ImageFormat.Bmp);
                       break;
                   case 2:
                       canvas.Image.Save(saveFileDialog1.FileName, System.Drawing.Imaging.ImageFormat.Jpeg);
                       break;
                   case 3:
                       canvas.Image.Save(saveFileDialog1.FileName, System.Drawing.Imaging.ImageFormat.Png);
                       break;
                   case 4:
                       canvas.Image.Save(saveFileDialog1.FileName, System.Drawing.Imaging.ImageFormat.Tiff);
                       break;
               }

           }
           catch (Exception ex) 
           {
               System.Console.WriteLine("Exception " + ex);
           }

プロパティ Filter についても言及する必要があります。saveFileDialog1.Filter には次の値があります:

bmp (*.bmp)|*.bmp|jpeg (*.jpeg)|*.jpeg|png (*.png)|*.png|tiff (*.tiff)|*.tiff
4

1 に答える 1

1

私はあなたがラインを持っている理由を尋ねるつもりでした

System.IO.FileStream fs =
    (System.IO.FileStream)saveFileDialog1.OpenFile();

しかし、結局のところ、それがまさにあなたの問題を引き起こしている線です。ファイルをに開いていますFileStream。開いている間canvas.Image.Save、同じファイルに画像を書き込むために使用します。

例外がスローされますが、コンソールに例外を書き込むだけなので、表示されません。

私が言及した行を削除するだけで、コードは機能します。

于 2012-06-15T17:58:38.113 に答える