サムネイルを作成してからバイト配列に変換するのに苦労しています。3 つの方法を試しましたが、3 回ともエラーが発生しました。
1 つ目は、Bitmap.GetThumbnailImage を使用することでした。これは過去に使用したもので、Response.OutputStream に直接保存しました。
2 番目は、DrawImage() で System.Drawing.Graphics を使用していました。まだ行きません。
3 つ目は、新しいビットマップを作成し、古いビットマップを渡し、新しいサイズを設定するだけでした。同じエラー。
値を null にすることはできません。
パラメーター名: エンコーダー
説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。
例外の詳細: System.ArgumentNullException: 値を null にすることはできません。
パラメーター名: エンコーダー
ソース エラー:
現在の Web 要求の実行中に未処理の例外が生成されました。例外の発生元と場所に関する情報は、以下の例外スタック トレースを使用して特定できます。
スタック トレース:
[ArgumentNullException: 値を null にすることはできません。
パラメータ名:エンコーダ】
System.Drawing.Image.Save(ストリームストリーム、ImageCodecInfoエンコーダ、EncoderParameters、encoderParams) +615244
これが私のメソッドのコードです。多分誰かが私が間違っていることを見るでしょう。GetThumbSize についてよくわからない場合のために説明すると、これは画像サイズと最大サム サイズを取得し、アスペクト比を維持するために実際のサイズを計算する単純なメソッドです。
public static System.Drawing.Image.GetThumbnailImageAbort thumbnailCallback = new System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallback);
public static bool ThumbnailCallback()
{
return false;
}
/// <summary>
///
/// </summary>
/// <param name="image"></param>
/// <param name="size"></param>
/// <remarks>
/// This method will throw a AccessViolationException when the machine OS running the server code is windows 7.
/// </remarks>
/// <returns></returns>
public static byte[] CreateThumbnail(byte[] imageData, Size size)
{
using (MemoryStream inStream = new MemoryStream())
{
inStream.Write(imageData, 0, imageData.Length);
using (System.Drawing.Image image = Bitmap.FromStream(inStream))
{
Size thumbSize = GetThumbSize(new Size(image.Width, image.Height), size);
//do not make image bigger
if (thumbSize.Equals(image.Size) || (image.Width < size.Width || image.Height < size.Height))
{
//if no shrinking is ocurring, return the original bytes
return imageData;
}
else
{
using (System.Drawing.Image thumb = image.GetThumbnailImage(thumbSize.Width, thumbSize.Height, thumbnailCallback, IntPtr.Zero))
{
using (MemoryStream outStream = new MemoryStream())
{
thumb.Save(outStream, thumb.RawFormat);
return outStream.ToArray();
}
}
}
}
}
}
この行はエラーをスローしています:
thumb.Save(outStream, thumb.RawFormat);
何か案は?助けてくれてありがとう!