ユーザがアップロードした大きな画像のサイズを変更しようとしていて、サムネイルサイズに縮小しようとしています。大きな画像のサイズを変更すると、Image.FromStream()を呼び出すときに「パラメータが無効です」がスローされます
私はread that memory issues can cause problems with very large filesです。連続したメモリが必要ですが、my test image is only 5.78MBが必要です。
私はこのようなルックスを使用しているコード:
public static byte[] GetThumbnailImage(Stream imageStream, ImageFormat format, int thumbnailWidth)
{
using (var thumbnailStream = new MemoryStream())
{
imageStream.Position = 0;
using (var image = Image.FromStream(imageStream))
{
var thumbnailSize = GetThumbnailSize(image, thumbnailWidth);
using (var thumbnail = image.GetThumbnailImage(
thumbnailSize.Width,
thumbnailSize.Height,
null,
IntPtr.Zero))
{
thumbnail.Save(thumbnailStream, format);
return thumbnailStream.ToArray();
}
}
}
}
をそれはこのように呼ばれています:
var thumbnailBytes = ImageHelper.GetThumbnailImage(imageStream, ImageFormat.Jpeg, 150);
他の小さいサイズの画像は、この正確なコードを使用してエラーなしで動作します。大きな画像をサポートするためにこのコードを変更する方法はありますか?
更新:追加されました@ハンスアンパッサンにより示唆されるように使用するには、マティアス・キケロと@Plutonix
「imageStream」には有効な画像が含まれていますか? –
あなたがリンクした画像をダウンロードしたところ、 'Image.FromStream'をちょうど良いものと呼ぶことができました。 –
あなたはDispose()を呼び出すのにうんざりしています。 **サムネイルや画像の変数には常に* **使用する必要がありますので、*使用*ステートメントを使用して、きれいで例外的に安全であるようにしてください。使い捨ての使い方は簡単で、長時間働くことができます。しかし、ImageクラスとBitmapクラスでは、管理されていないメモリがたくさん必要になることがあり、**非常に**許しません。 –