重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

ASP.NET、フレームワークは.net4.0環境です。
言語はc sharpです。
FileUploadコンロールを使って、POSTした画像を保存するような
ものを作りたいと考えています。
想定は4MB以内のファイルなのですが、4MB以内でも、色数が多いと
うまくいかないようで悩んでいます。

以下のようなコードを書きました。
--
HttpPostedFile imageData = FileUpload1.PostedFile; //投稿ファイル
byte[] buffer = new byte[imageData.InputStream.Length];
imageData.InputStream.Read(buffer, 0, Convert.ToInt32(imageData.InputStream.Length));
ImageConverter ImgConv = new ImageConverter();
Bitmap bitmapSave = (System.Drawing.Bitmap)ImgConv.ConvertFrom(buffer);
bitmapSave.Save(temp_path, ImageFormat.Jpeg);
//temp_pathには保存先のパスが入っています。
--

bitmapSave.Saveで、以下のようなエラーが出てしまいます。
--
ExternalExceptionがキャッチされました。
GDI+ で汎用エラーが発生しました。
--

再現性がイマイチで、色数が少なければうまくいくようです。
ただ、たとえば以下のような色数の多い広告画像だとエラーに
なってしまいます。
http://www.tsukumo.co.jp/shop/tirashi/akiba_02.h …

画像のwidth、heightを見たいのと、pngやgifであってもjpegに
変換したいので、bitmap.Saveを使う形式でうまく保存できるように
直したいのですが、ご教授いただけないでしょうか。

A 回答 (1件)

現象確認しました。


大サイズのbitmap(jpeg約3MB -> 展開後約45MB)でjpeg保存エラー。

これ、ASP.NETというよりも、GDI+の一般的なエラーのようで、入出力に問題がなければ、内部リソースの欠乏とか、そんな原因でも起きているようですね。

GDI+のエラーは事例が多数ありますが、入出力のパスに問題がないとすると、内部リソースの確保とか。

http://www.codeproject.com/Questions/52709/C-Bit …
のSolution4/5あたりを試してみられればと。

自分は最初から、GDI+は大量メモリを多用する処理はNGのような気がして、外部コンポーネントで画像処理しています。
有償製品はGraphicMill、LeadToolsなどいっぱいありますが、無償のものでは、ImageResizer
http://imageresizing.net/docs/howto/upload-and-r …

あたりどうでしょう。

この回答への補足

ありがとうございます。
無料のコンポーネントを使う方向で考えてみます…。

補足日時:2014/07/10 18:50
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!