2009-07-28 7 views
0

アップロードした画像のサイズを変更しようとしています。私がオンラインで見つけたことから、これを行う方法は、あなたが望む大きさの新しいイメージを作成し、Graphicsを使ってイメージをより小さなイメージに描画することです。 Nikon D90カメラの画像を除いて、アップロードされるすべての画像で動作するようです。これらの画像をアップロードしてサイズを変更しようとするたびに、以下の行にOutOfMemoryExceptionが表示されます。誰でも私が間違っていることを教えてもらえますか?OutOfMemoryExceptionを引き起こすDrawImage

'Create the new image as a blank bitmap 
Dim resized As Image = New Bitmap(newWidth, newHeight) 

'Create a new graphics object from the new image 
Dim g As Graphics = Graphics.FromImage(resized) 

'Resize graphics object to fit onto the resized image 
g.DrawImage(originalImage, New Rectangle(0, 0, resized.Width, resized.Height)) <-- Exception 

g.Dispose() 

答えて

2

イメージをどのように読み込みますか? System.Drawing.Image.FromFile? .Net Developer Centerによれば、画像ファイルが壊れているか、GDI +が認識できない形式であれば、OutOfMemoryExceptionがスローされます。

Paint.Netのような画像編集プログラムで画像を開くことはできますか?その場合は、JPEGなどで保存し、アプリケーションで保存したプログラムを開こうとします。

この問題が解決された場合、元のイメージにはイメージエディタでは処理できますが、DrawImageでは処理できないような種類やフォーマットがあります。壊れた画像を画像エディタで渡して修正する必要があります。あなたはあなたのアプリから呼び出すことができるコマンドラインやスクリプトインターフェースを使って画像編集アプリケーションを見つけなければならないでしょう。

+0

私はFromFileを使用しています。私はFromStreamで同じエラーが発生しますが、理由は同じであると推測しています。画像がPaint.Netで開き、Paint.Netでサイズを変更してアップロードしてもうまくいきます。これは私のエンドユーザのための不必要なステップのようです。 BinaryReaderソリューションには何が関係していますか? – BLeB

+0

また、例外はDrawImageのFromFileでは発生しません – BLeB

+0

Paint.Netでイメージを開いて再保存するだけです。エンドユーザーにこれをさせたくない場合は、アプリからそれを行う必要があります。 DrawImageのドキュメントではそうは言いませんが、FromFileと同じ問題があると思われます。 –

0

私は、変数のサイズを変更して 画像が正しく設定されている場合は、このコードの意志が正常に動作と思います。

ゼロサイズのイメスまたは長方形がありますか?

+0

これは私が最初に考えたことですが、新しい画像の幅と高さがゼロでないことを確認しました。私がアップロードした他の画像は正常に動作します。 – BLeB

関連する問題