1

FileUpload コントロールを介して画像のサイズを変更するためにメモリ ストリームを使用しています。サイズを変更した後、ファイルシステムに保存します"~/images/2012/" + filename

メモリストリームから画像を保存するにはどうすればよいですか?

System.Drawing.Image imageLarge = System.Drawing.Image.FromStream(stream);
System.Drawing.Image imageLarge1 = ResizeImage(imageLarge, 200, 300);

MemoryStream memolarge = new MemoryStream();
imageLarge1.Save(memolarge, System.Drawing.Imaging.ImageFormat.Jpeg);
System.Drawing.Image returnImage = System.Drawing.Image.FromStream(memolarge);

Encoder myEncoder;
EncoderParameter myEncoderParameter;
EncoderParameters myEncoderParameters;
myEncoder = Encoder.Quality;
myEncoderParameter = new EncoderParameter(myEncoder, 100L);
myEncoderParameters.Param[0] = myEncoderParameter;

string convertedImage = returnImage.ToString();
returnImage.Save("~/images/2012/" + filename, 
    ImageFormat.Jpeg, myEncoderParameters);

これは、オーバーロードされたメソッド エラーと一緒に発生しているエラーです。

「System.Drawing.Imaging.ImageFormat」から System.Drawing.Imaging.ImageCodecInfo に変換できません

4

3 に答える 3

4

のオーバーロードを見てくださいImage.Save

最後の2つだけがを受け入れEncoderParameters、どちらも受け入れませんImageFormat-両方ともを受け入れますImageCodecInfo

この種の問題を自分で診断できることは非常に重要です。

  • コンパイラエラーを注意深く見てください
  • ドキュメントを読む
  • 発信している通話に意味があるかどうかを確認します

これはMemoryStream、特にへの保存とは関係ありません。実際、を保存してImageすぐImageに同じストリームからロードする理由は明確ではありません。(Position本当にこれを続けたい場合は、とにかくそうする前に0に設定することをお勧めします。)

于 2012-10-03T18:52:58.033 に答える
2

代わりに次の行を試してください。

returnImage.Save(
    "~/images/2012/" + filename,
    ImageCodecInfo.GetImageEncoders()
        .Where(i => i.MimeType == "image/jpeg")
        .First(),
    myEncoderParameters);
于 2012-10-03T18:51:54.747 に答える
0

c# でメモリストリームから jpeg として保存する投稿を参照 してください。探しているものと非常によく似た処理が行われます。

また、コーデックを適切に変更するには http://msdn.microsoft.com/en-us/library/ytz20d80.aspx

于 2012-10-03T18:59:14.467 に答える