-1

これが取引です。標準コードを使用してノートブックカメラから画像を圧縮する関数を使用しようとしています:

    public static byte[] EncodeImage(this Image image)
    {
        using (MemoryStream ms = new MemoryStream())
        {
            ImageCodecInfo jpegCodec = GetEncoderInfo("image/jpeg");
            EncoderParameter qualityParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 80);
            EncoderParameters encoderParams = new EncoderParameters(1);
            encoderParams.Param[0] = qualityParam;

            image.Save(ms, jpegCodec, encoderParams);
            return ms.ToArray();
        }
    }

圧縮が完了したら、データベースに保存します。うまく機能し、十分な量の圧縮が得られます (500 000 バイト対 32 000 バイト)。しばらくして、winforms アプリケーションでユーザーに画像を表示する必要があります。

using (MemoryStream ms = new MemoryStream(entity.Photo))
    fotoPictureBox.Image = Image.FromStream(ms);

繰り返しますが、これは素晴らしい画像を表示します。ただし、ユーザーが画像をダウンロードして、適切と思われる場所に保存できるようにしたいと考えています。そして、これがすべての問題が発生するときです。

このコードを使用する場合:

fotoPictureBox.Image.Save(imageSaveFileDialog.FileName);

典型的なgeneric GDI+エラーが表示されます。エンコードしたコードを使用して画像を保存しようとすると、

     public static void SaveEncodedImage(this Image image, string targetPath)
    {
        ImageCodecInfo jpegCodec = Pomocne.GetEncoderInfo("image/jpeg");
        EncoderParameter qualityParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 80);
        EncoderParameters encoderParams = new EncoderParameters(1);
        encoderParams.Param[0] = qualityParam;

        image.Save(targetPath, jpegCodec, encoderParams);
    }

このエラーが発生します(行を指していますimage.Save(targetPath, jpegCodec, encoderParams);):

An unhandled exception of type System.ArgumentException occurred in System.Drawing.dll Additional information: Parameter is not valid.

誰か助けてください。急ぎです、よろしくお願いします。

おそらく最初にいくつかの質問/回答に対処するために-このコードで画像を圧縮しない場合、問題なく選択したパスに画像を保存できます。したがって、デコードなどに明らかに問題があります。十分な権限があるかどうかを聞かないでください。

4

1 に答える 1

0

何らかの理由で、このコードはうまく機能します:

File.WriteAllBytes(targetPath, byteArray);

最も簡単な解決策が正しい解決策である場合もあると思います。正確な説明についてはわかりませんが(提供できます。必ず投票します)、これは解決されています。とにかくありがとう。

于 2012-11-29T08:56:56.670 に答える