ページ 11

リソースから画像を読みだすことにかんして

Posted: 2010年10月28日(木) 22:04
by 滝の上のマスカット
RPGのリンク的なものでお世話になった滝の上のマスカットです。
環境は相変わらず、Visual C++ 2010 (C++/CLI)です。
今回は、その次のステップとしてリソースの中に取り込んだ
画像のデータを読み出すということに関して質問があります。
(省略)
int image[16],i,j;
int CE;
CE = (LoadGraphToResource( MAKEINTRESOURCE( SOU ) , "MYGRAPHIC");
LoadDivGraph( CE , 16 , 4 , 4 , 32 , 32 , image ) ;
(省略)
↑のコードを実行すると、
1>c:\users\name\desktop\rpg\rpg\rpg.cpp(103): error C2664: 'DxLib::LoadDivGraph' : 1 番目の引数を 'int' から 'const TCHAR *' に変換できません。(新しい機能 ; ヘルプを参照)
1> 整数型からポインター型への変換には reinterpret_cast、C スタイル キャストまたは関数スタイル キャストが必要です。

とエラーになってしまうんです。そこで、
    CE = (LoadGraphToResource( MAKEINTRESOURCE( SOU ) , "MYGRAPHIC"); を
    CE = static_cast<int>((LoadGraphToResource( MAKEINTRESOURCE( SOU ) , "MYGRAPHIC"));
といふうに変更してみたのですが、まだ、エラーが発生してしまいます。
 どのように変化させたらいいのでしょうか。(他のファイルを使うのですが、そっちは大丈夫です)

Re:リソースから画像を読みだすことにかんして

Posted: 2010年10月28日(木) 22:44
by naohiro19
"MYGRAPHIC"はマルチバイト文字列なので
L"MYGRAPHIC" か TEXT("MYGRAPHIC") か _T("MYGRAPHIC")
を使えばいいですよ。

-- 追記
Visaul Studio 2005以上だとデフォルトで「ユニコード文字列を使用する」になっているので
「マルチバイト文字列を使用する」に変更してみてください。 画像

Re:リソースから画像を読みだすことにかんして

Posted: 2010年10月28日(木) 22:44
by Wings
int image[16],i,j;
int CE;
CE = (LoadGraphToResource( MAKEINTRESOURCE( SOU ) , "MYGRAPHIC");
LoadDivGraph( CE , 16 , 4 , 4 , 32 , 32 , image )

-------------------------------------------------------------------
LoadDivGraphの最初の引数には、TCHAR*型の変数を渡さなければなりません。
変数CEは、int型です。
  
あと、
  リソースから画像を分割して読み込みたいのであれば、
LoadDivGraphToResource という関数がDxLibにあります。

Re:リソースから画像を読みだすことにかんして

Posted: 2010年10月29日(金) 22:32
by 滝の上のマスカット
>あと、
> リソースから画像を分割して読み込みたいのであれば、
> LoadDivGraphToResource という関数がDxLibにあります。
試した結果うまく読み込まれたようです。
あとは、下のコードで利用するのでいいのでしょうか?
DrawGraph ( j*32 , i*32 , jimage[0] , TRUE ) ;
実行はされるものの画像が表示されないのですが・・・

Re:リソースから画像を読みだすことにかんして

Posted: 2010年10月29日(金) 23:12
by Wings
おそらく LoadDivGraphToResourceで画像が正しく読み込まれていません。

LoadDivGraphToResourceには、2種類あります。

( A ) LoadDivGraphToResource( int ResourceID, int AllNum, int XNum, int YNum,
int XSize, int YSize, int *HandleBuf )

と、

( B ) LoadDivGraphToResource( const TCHAR *ResourceName, const TCHAR *ResourceType, int AllNum,
int XNum, int YNum, int XSize, int YSize, int *HandleBuf )

があります。

 ( A ) を使う場合は、読み込む画像がBitampのときだけのようです。
 PNGやJPGを読み込みたいのであれば、( B ) のほうを使う必要があります。

Re:リソースから画像を読みだすことにかんして

Posted: 2010年10月29日(金) 23:42
by 滝の上のマスカット
( B ) LoadDivGraphToResource( const TCHAR *ResourceName, const TCHAR *ResourceType, int AllNum,
int XNum, int YNum, int XSize, int YSize, int *HandleBuf )

のほうを利用させていただきました。
それでなんですけど、
LoadDivGraphToResource( MAKEINTRESOURCE(10) , "PNG" , 16, 4 , 4 , 32 , 32 , image);
               ↑
ここの部分には、次のうちどっちを入れればいいんでしょうか。

#define SOU 10
     ↑ ↑
今の時点ではまだまだ読み込まれません。

Re:リソースから画像を読みだすことにかんして

Posted: 2010年10月29日(金) 23:45
by 滝の上のマスカット
↑パスを忘れたため編集できません。すみません。
LoadDivGraphToResource( MAKEINTRESOURCE(10) , "PNG" , 16, 4 , 4 , 32 , 32 , image); 
                               ↑
#define SOU 10 
     ↑ ↑
正しくはこっちです。

あと、エラー内容も載せておきます
1>c:\users\name\desktop\rpg\rpg\rpg.cpp(129): error C2665: 'DxLib::LoadDivGraphToResource' : 2 オーバーロードのどれも、すべての引数の型を変換できませんでした
1> c:\dxlib_vc\プロジェクトに追加すべきファイル_vc用\dxlib.h(2247): 'int DxLib::LoadDivGraphToResource(const TCHAR *,const TCHAR *,int,int,int,int,int,int *)' の可能性があります。
1> 引数リスト '(int, const char [4], int, int, int, int, int, int [16])' を一致させようとしているとき
画像

Re:リソースから画像を読みだすことにかんして

Posted: 2010年10月30日(土) 00:03
by Wings
>LoadDivGraphToResource( MAKEINTRESOURCE(10) , "PNG" , 16, 4 , 4 , 32 , 32 , image);
>               ↑
>ここの部分には、次のうちどっちを入れればいいんでしょうか。
>
>#define SOU 10

MAKEINTRESOURCE( SOU ) も MAKEINTRESOURCE( 10 ) 動作は同じです。

おそらく、まだ画像が読み込まれていないのは、実行ファイルに組み込まれている リソースを
プログラムで実行しているLoadDivGraphResourceが見つけれていません。

LoadDivGraphResource の 第1引数と第2引数には、それぞれリソースをプロジェクトに追加するときに
指定した、リソースのID と リソースタイプに一致する必要があります。

Re:リソースから画像を読みだすことにかんして

Posted: 2010年10月30日(土) 00:12
by Wings
補足:

上の No:64301の記事
のエラーは、

LoadDivGraphToResource の 第1引数に int型 を指定しているから出ているようです。

リソースIDがSOUなら、MAKEINTRESOURCE( SOU ) とすればエラーはなくなると思います。

Re:リソースから画像を読みだすことにかんして

Posted: 2010年10月30日(土) 01:08
by Wings
訂正:

>上の No:64301の記事
>のエラーは、

正しくは、No:64310 でした。
失礼しました。

Re:リソースから画像を読みだすことにかんして

Posted: 2010年10月30日(土) 17:08
by 滝の上のマスカット
>リソースIDがSOUなら、MAKEINTRESOURCE( SOU ) とすればエラーはなくなると思います。
変えてビルドしたところエラーに関しては解決しました。ですが、まだ、画像が表示されません。
―RPG.cpp―
(略)
int image[16],i,j;
int jimage[16];
LoadDivGraphToResource( MAKEINTRESOURCE ( KAR ) , "PNG" , 16 , 4 , 4 , 32 , 32 , image);
LoadDivGraphToResource( MAKEINTRESOURCE ( SOU ) , "PNG" , 16 , 4 , 4 , 32 , 32 , jimage);
(略)
for(i=0;i<15;i++)
for(j=0;j<20;j++)
if(stage2[j]==1)
DrawGraph ( j*32 , i*32 , jimage[0] , TRUE ) ;
else if(stage2[j]==2)
DrawGraph ( j*32 , i*32 , jimage[1] , TRUE ) ;
else if(stage2[j]==3)
DrawGraph ( j*32 , i*32 , jimage[2] , TRUE ) ;
(略)

―RPG.h―
#define SOU 10
#define KAR 11

―RPG.rc―
#include <windows.h>
#include "RPG.h"

SOU MYGRAPHIC DISCARDABLE "syuu.png"
KAR MYGRAPHIC DISCARDABLE "char.png"

↑のような感じなんですけど、何か問題点があるのでしょうか?
コードを組む位置とかのもんだいなのでしょうか?

Re:リソースから画像を読みだすことにかんして

Posted: 2010年10月30日(土) 17:29
by Wings
>>―RPG.rc―
>>#include <windows.h>
>>#include "RPG.h"
>>
>>SOU MYGRAPHIC DISCARDABLE "syuu.png"
>>KAR MYGRAPHIC DISCARDABLE "char.png"
---------------------------------------------------------------

SOU MYGRAPHIC DISCARDABLE "syuu.png"

この定義では、
リソースのIDが SOU 、リソースのタイプが MYGRAPHICとなっています。

KAR MYGRAPHIC DISCARDABLE "char.png"

このこの定義では、
リソースのIDが KAR 、リソースタイプが MYGRAPHICとなっています。

ですので、リソースID SOU や KAR の画像をを LoadDivGraphToResource
で読み込むときは、第2引数のリソースタイプには "MYGRAPHIC" を指定する必要があります。

Re:リソースから画像を読みだすことにかんして

Posted: 2010年10月30日(土) 17:40
by 滝の上のマスカット
なるほど!
そういうことだったんですか。
ありがとうございます。解決しました。
またお世話になるかもしれませんがよろしくおねがいします。
本当にありがとうございました。