

VC++2010ExpressのWindows Applicationで画像のサムネールを作るプログラムを作っています。
概略、つぎの様なコーディングです(細部は気にしないで下さい)。
for filePath in dlg->Files{
try{
String^ FileName = Path::GetFileName(filePath);
Image^ img = Image::FromFiles(filePath);
Bitmap^ bmp = gcnew Bitmap(Image, 48, 48);
bmp->Save(FolderPath + "\\Thumbnails\\" + FileName);
}
chactch(System::Exception^ err){
Debug::Print("{0}", err->Massages);
}
}
問題は、数万件の画像を処理したときに、数千件までは順調に処理が進むのに、そのあと「OutofMemory」とか「メモリー不足」とか「GDI+で汎用エラー」といった例外が続発してしまうことです。マネージコードなのでリソースは自動的に解放されると思うのですが、それでも間に合わないのでしょうか?何か対処方法があれば、ご教示ください。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
>リソースは自動的に解放されると思うのですが
この文章に引っかかりました。
Cでは確保したメモリーは自動開放はしないと記憶しています。
bmpを開放してみてください。
有難うございます。
自己解決しました。
画像を一枚処理するごとに、下のPumpMesage()を実行したら、例外が発生しなくなりました。
やはり、リソース開放がOSに伝わるのに時間が掛っていたのが原因かと思っています。
なお、マネージコードなのでbmpの解放を明示的に行うことはできないのではないでしょうか。
#pragma comment(lib, "User32.lib")
void PumpMessage()
{
MSG msg;
while( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) ){
TranslateMessage( &msg );
DispatchMessage( &msg );
}
}
No.1
- 回答日時:
マニュアルより
http://msdn.microsoft.com/ja-jp/library/stf701f5 …
> 例外
> OutOfMemoryException
> ファイルのイメージ形式が有効ではありません。
> または
> GDI+ はファイルのピクセル形式をサポートしません。
> 解説
> ファイルのイメージ形式が有効でない場合、または、そのファイルのピクセル形式が GDI+ でサポートされていない場合、このメソッドは OutOfMemoryException 例外をスローします。
これに該当していませんか?
早速のアドバイス有難うございます。
私もそう考え、例外を起こす画像のみを集めて処理したところ、件数が少なければ例外が発生しませんでした。どうも数万件を処理した場合に、特に後半で例外が続発するので、何かリソースに関係しているのではないかと思い、今回の質問をしました。
それに、ひとつよく分からないのが、ご指摘の「形式がサポートされてない」とOutOfMemoryという言葉の関係です。形式がサポートされていならTypeNotSupportedとかを使えば良いのにと思いますが。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
fopenできる上限の変更
-
ファイル名の先頭にアンダース...
-
vba ActiveSheet.pasteを使った...
-
Cでのネットワークファイルの読...
-
SGファイルって何ですか?
-
アプリにcsvファイルを読み込ま...
-
構造体の内容をファイルに書き...
-
同じ名前のファイルを作った場...
-
BI書、FD書 とは
-
ダイアログボックスで複数フォ...
-
csvファイルを開かずに文字を検...
-
Javascript で INI の読み書き
-
読み取り専用ファイル FileStr...
-
ファイルの結合
-
かつてN88BASIC(MS-DOS)で作っ...
-
バイナリーとして.wavファイル...
-
パワーポイントの画面表示が点...
-
テキストファイルの最終行を削...
-
COBOLでの可変長定義について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
vba ActiveSheet.pasteを使った...
-
ファイル名の先頭にアンダース...
-
csvファイルを開かずに文字を検...
-
Thunderbirdでemlファイルを開...
-
テキストファイルの最終行を削...
-
ドラッグアンドドロップでファ...
-
バッチで118項目のCSVを処理し...
-
ダイアログボックスで複数フォ...
-
グローバル変数のよくない使い...
-
VBAにてEXCEL以外のファイル(テ...
-
【C#】リソースファイルの埋め...
-
分割コンパイルの#defineについて
-
CSVファイルへの保存の際、デー...
-
RPGでファイル名(もしくはレコ...
-
SGファイルって何ですか?
-
fopenできる上限の変更
-
マウスポインタの変更
-
Cでのネットワークファイルの読...
-
ASP .NETでファイル選択ダイア...
おすすめ情報