ビットマップデータを読み込みたい – プログラミング – Home

ビットマップデータを読み込みたい
 
通知
すべてクリア

[解決済] ビットマップデータを読み込みたい


ガラ
 ガラ
(@ガラ)
ゲスト
結合: 20年前
投稿: 201
Topic starter  

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'のままになります。


引用未解決
トピックタグ
瀬戸っぷ
 瀬戸っぷ
(@瀬戸っぷ)
ゲスト
結合: 18年前
投稿: 178
 

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

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

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

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

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

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


返信引用
ガラ
 ガラ
(@ガラ)
ゲスト
結合: 20年前
投稿: 201
Topic starter  

瀬戸っぷさん、レスポンスありがとうございました。
おっしゃるとおり、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
 oops
(@oops)
ゲスト
結合: 17年前
投稿: 28
 

LoadBitmapの引数をフルパスか相対パスで指定してないからじゃない?


返信引用
瀬戸っぷ
 瀬戸っぷ
(@瀬戸っぷ)
ゲスト
結合: 18年前
投稿: 178
 

>しかし、ファイル名を指定するとエラーになります。
>なぜだかわかりません。

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

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


返信引用
ガラ
 ガラ
(@ガラ)
ゲスト
結合: 20年前
投稿: 201
Topic starter  

瀬戸っぷさん、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) ;


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました