掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ビットマップを読み込むには (ID:53387)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
現在24BitのBitmapをディスク(リソースではない)より取得し、 それに編集(描画や回転)等を行ったあと、 24bitのBitmap形式で出力するプログラムの開発を行っています。 当プログラムにおいて、読み込み処理に不具合があります。 読み込む元のBitmapが40MB程度のものであれば、 取得→出力の動作が問題なく流れるのですが、 340MBのファイルを読み込んだ際、Bitmapのハンドルの取得に失敗します。 メモリは2GB積んであり、常に1.5GB程度の空き容量が存在するマシンですので、 メモリ不足は考えずらいです(PG内で340MBのメモリ確保に成功している) もしかしたらVCの限界なのでしょうか。 一応ソースを以下に示します。 CBitmap* LoadBitmapFile( char* filename, LPBITMAPINFO bmpinfo ) { // ファイル読み込み HFILE fp = _lopen(filename,OF_READ); if(fp == HFILE_ERROR)return NULL; LONG size = _llseek(fp,0,FILE_END); LPBYTE buf = (LPBYTE)malloc(size); if(buf == NULL){ _lclose(fp); return NULL; } _llseek(fp,0,FILE_BEGIN); _lread(fp,buf,size); _lclose(fp); // BMPヘッダーかどうかチェック if(memcmp(buf,"BM",2) != 0){ free(buf); return NULL; } // BITMAP情報を格納する if(bmpinfo != NULL)memcpy(bmpinfo,buf + sizeof(BITMAPFILEHEADER),sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)*256); // BITMAP作成 LPBITMAPFILEHEADER fh = (LPBITMAPFILEHEADER)buf; LPBITMAPINFOHEADER ih = (LPBITMAPINFOHEADER)(buf + sizeof(BITMAPFILEHEADER)); LPBITMAPINFO bi = (LPBITMAPINFO)(buf + sizeof(BITMAPFILEHEADER)); LPBYTE img = buf + fh->bfOffBits; HDC dc = ::GetDC(0); HBITMAP hb = CreateDIBitmap(dc,ih,CBM_INIT,img,bi,DIB_RGB_COLORS); // ※ ここでhbがNULLで返って来ます。 ::ReleaseDC(0,dc); free(buf); // return hb; // CBitmapで返す CBitmap *map; map = new CBitmap; map->Attach(hb); return map; } インターネットでいろいろ調べてみたのですが、 限界についての記事は見あたりませんでした・・・。 ご教授よろしくお願いいたします。 開発環境:VC++ 6(MFC) WindowsXP Pro
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.