ビットマップデータを読み込みたい

[戻る]
ガラ 2008/02/24(日) 08:09:54
OS XP VC++6.0
以下のソースのように、CBitmap.GetBitmapBits()をつかって
test_arrayにビットマップデータを読み込みたいのですが、
うまくいきません。
どこか、おかしいところはありますでしょうか。
詳しい方よろしくおねがいします。

    char test_array[1024] ;        // for test
    test_array[0] = '\0' ;
    CBitmap wBitmap ;
    if (wBitmap.LoadBitmap("test.bmp")) {
        AfxMessageBox("test.bmp load error",MB_OK);
        ASSERT(0) ;
    }
    wBitmap.GetBitmapBits(100,test_array) ;

結果:test_array[0]内容は、'\0'のままになります。

瀬戸っぷ [E-Mail] 2008/02/24(日) 11:41:24
>結果:test_array[0]内容は、'\0'のままになります。

元々データの先頭が0だった…ということはないのでしょうか?
GetBitmapBits()の戻り値は確認しましたか?

当方、VS2005ですが…
>if (wBitmap.LoadBitmap("test.bmp")) {
自体の使用方法が誤っていたりしないでしょうか?

"test.bmp"とい名前のビットマップをリソースに追加していますか?

>戻り値 
>正常終了した場合は 0 以外を返します。それ以外の場合は 0 を返します。

ということで、読み込み失敗すると
wBitmap.GetBitmapBits(100,test_array);
に進みます。

ガラ 2008/02/24(日) 19:06:22
瀬戸っぷさん、レスポンスありがとうございました。
おっしゃるとおり、wBitmap.LoadBitmapの判定がまちがえていました。
リーソスIDではうまく動作しました。
しかし、ファイル名を指定するとエラーになります。
なぜだかわかりません。
ご存知の方いらっしゃいましたら、よろしくおねがいします。
    char test_array[1024] ;        // for test
    test_array[0] = (char)0x7f ;
    CBitmap wBitmap ;
//    if (!wBitmap.LoadBitmap("res\bitmap1.bmp")) {
    if (!wBitmap.LoadBitmap(IDB_BITMAP1)) {
        AfxMessageBox("bitmap1.bmp load error",MB_OK);
        ASSERT(0) ;
    }
    wBitmap.GetBitmapBits(100,test_array) ;

oops 2008/02/24(日) 23:21:22
LoadBitmapの引数をフルパスか相対パスで指定してないからじゃない?

瀬戸っぷ [E-Mail] 2008/02/24(日) 23:25:15
>しかし、ファイル名を指定するとエラーになります。
>なぜだかわかりません。

CBitmap::LoadBitmapがファイルから読み込めるようになっていないからです。
MSDNにもファイルからの読み込みについては書かれていないでしょう。

「CBitmap ファイル」でググると、最初の所に
「ファイルからCBitmapを作成する」というのが見つかるかと思います。

ガラ 2008/02/25(月) 05:58:00
[[解決]]
瀬戸っぷさん、oopsさん、レスありがとうございました。
瀬戸っぷさんのおっしゃるとおり、
CBitmap::LoadBitmap()に、ファイル名を引数とする用法はありませんでした。
グーグって、ソースをみつけてそのまま実行するとうまくいきました。

(ファイル名の指定の際、ファルダー名の区切りを\になってました。
ダブルクォーテーションの中では\\としなければいけませんでした)

    char test_array[1024] ;        // for test
    test_array[0] = (char)0x7f ;

  HBITMAP hbmp = (HBITMAP)::LoadImage(
    NULL,"res\\bitmap1.bmp", IMAGE_BITMAP, 0, 0, 
          LR_LOADFROMFILE | LR_CREATEDIBSECTION );
    ASSERT(hbmp) ;

  // ビットマップハンドルからビットマップクラスを作成する
  CBitmap *wBitmap = CBitmap::FromHandle( hbmp );
  if( wBitmap == NULL ) {
    ::DeleteObject( hbmp );
        ASSERT(0) ;
  }

//  if (!wBitmap->LoadBitmap("res\bitmap1.bmp")) {
//        AfxMessageBox("bitmap1.bmp load error",MB_OK);
//        ASSERT(0) ;
//  }

    wBitmap->GetBitmapBits(100,test_array) ;

古いスレッドには追加発言できません。