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'のままになります。
>結果:test_array[0]内容は、'\0'のままになります。
元々データの先頭が0だった…ということはないのでしょうか?
GetBitmapBits()の戻り値は確認しましたか?
当方、VS2005ですが…
>if (wBitmap.LoadBitmap(test.bmp)) {
自体の使用方法が誤っていたりしないでしょうか?
test.bmpとい名前のビットマップをリソースに追加していますか?
>戻り値
>正常終了した場合は 0 以外を返します。それ以外の場合は 0 を返します。
ということで、読み込み失敗すると
wBitmap.GetBitmapBits(100,test_array);
に進みます。
瀬戸っぷさん、レスポンスありがとうございました。
おっしゃるとおり、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) ;
LoadBitmapの引数をフルパスか相対パスで指定してないからじゃない?
>しかし、ファイル名を指定するとエラーになります。
>なぜだかわかりません。
CBitmap::LoadBitmapがファイルから読み込めるようになっていないからです。
MSDNにもファイルからの読み込みについては書かれていないでしょう。
「CBitmap ファイル」でググると、最初の所に
「ファイルからCBitmapを作成する」というのが見つかるかと思います。
瀬戸っぷさん、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) ;