リソースから画像を読みだすことにかんして
リソースから画像を読みだすことにかんして
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"));
といふうに変更してみたのですが、まだ、エラーが発生してしまいます。
どのように変化させたらいいのでしょうか。(他のファイルを使うのですが、そっちは大丈夫です)
環境は相変わらず、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:リソースから画像を読みだすことにかんして
"MYGRAPHIC"はマルチバイト文字列なので
L"MYGRAPHIC" か TEXT("MYGRAPHIC") か _T("MYGRAPHIC")
を使えばいいですよ。
-- 追記
Visaul Studio 2005以上だとデフォルトで「ユニコード文字列を使用する」になっているので
「マルチバイト文字列を使用する」に変更してみてください。
L"MYGRAPHIC" か TEXT("MYGRAPHIC") か _T("MYGRAPHIC")
を使えばいいですよ。
-- 追記
Visaul Studio 2005以上だとデフォルトで「ユニコード文字列を使用する」になっているので
「マルチバイト文字列を使用する」に変更してみてください。

Re:リソースから画像を読みだすことにかんして
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にあります。
int CE;
CE = (LoadGraphToResource( MAKEINTRESOURCE( SOU ) , "MYGRAPHIC");
LoadDivGraph( CE , 16 , 4 , 4 , 32 , 32 , image )
-------------------------------------------------------------------
LoadDivGraphの最初の引数には、TCHAR*型の変数を渡さなければなりません。
変数CEは、int型です。
あと、
リソースから画像を分割して読み込みたいのであれば、
LoadDivGraphToResource という関数がDxLibにあります。
Re:リソースから画像を読みだすことにかんして
>あと、
> リソースから画像を分割して読み込みたいのであれば、
> LoadDivGraphToResource という関数がDxLibにあります。
試した結果うまく読み込まれたようです。
あとは、下のコードで利用するのでいいのでしょうか?
DrawGraph ( j*32 , i*32 , jimage[0] , TRUE ) ;
実行はされるものの画像が表示されないのですが・・・
> リソースから画像を分割して読み込みたいのであれば、
> LoadDivGraphToResource という関数がDxLibにあります。
試した結果うまく読み込まれたようです。
あとは、下のコードで利用するのでいいのでしょうか?
DrawGraph ( j*32 , i*32 , jimage[0] , TRUE ) ;
実行はされるものの画像が表示されないのですが・・・
Re:リソースから画像を読みだすことにかんして
おそらく 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 ) のほうを使う必要があります。
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:リソースから画像を読みだすことにかんして
( 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
↑ ↑
今の時点ではまだまだ読み込まれません。
int XNum, int YNum, int XSize, int YSize, int *HandleBuf )
のほうを利用させていただきました。
それでなんですけど、
LoadDivGraphToResource( MAKEINTRESOURCE(10) , "PNG" , 16, 4 , 4 , 32 , 32 , image);
↑
ここの部分には、次のうちどっちを入れればいいんでしょうか。
#define SOU 10
↑ ↑
今の時点ではまだまだ読み込まれません。
Re:リソースから画像を読みだすことにかんして
↑パスを忘れたため編集できません。すみません。
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])' を一致させようとしているとき

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:リソースから画像を読みだすことにかんして
>LoadDivGraphToResource( MAKEINTRESOURCE(10) , "PNG" , 16, 4 , 4 , 32 , 32 , image);
> ↑
>ここの部分には、次のうちどっちを入れればいいんでしょうか。
>
>#define SOU 10
MAKEINTRESOURCE( SOU ) も MAKEINTRESOURCE( 10 ) 動作は同じです。
おそらく、まだ画像が読み込まれていないのは、実行ファイルに組み込まれている リソースを
プログラムで実行しているLoadDivGraphResourceが見つけれていません。
LoadDivGraphResource の 第1引数と第2引数には、それぞれリソースをプロジェクトに追加するときに
指定した、リソースのID と リソースタイプに一致する必要があります。
> ↑
>ここの部分には、次のうちどっちを入れればいいんでしょうか。
>
>#define SOU 10
MAKEINTRESOURCE( SOU ) も MAKEINTRESOURCE( 10 ) 動作は同じです。
おそらく、まだ画像が読み込まれていないのは、実行ファイルに組み込まれている リソースを
プログラムで実行しているLoadDivGraphResourceが見つけれていません。
LoadDivGraphResource の 第1引数と第2引数には、それぞれリソースをプロジェクトに追加するときに
指定した、リソースのID と リソースタイプに一致する必要があります。
Re:リソースから画像を読みだすことにかんして
補足:
上の No:64301の記事
のエラーは、
LoadDivGraphToResource の 第1引数に int型 を指定しているから出ているようです。
リソースIDがSOUなら、MAKEINTRESOURCE( SOU ) とすればエラーはなくなると思います。
上の No:64301の記事
のエラーは、
LoadDivGraphToResource の 第1引数に int型 を指定しているから出ているようです。
リソースIDがSOUなら、MAKEINTRESOURCE( SOU ) とすればエラーはなくなると思います。
Re:リソースから画像を読みだすことにかんして
>リソース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"
↑のような感じなんですけど、何か問題点があるのでしょうか?
コードを組む位置とかのもんだいなのでしょうか?
変えてビルドしたところエラーに関しては解決しました。ですが、まだ、画像が表示されません。
―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:リソースから画像を読みだすことにかんして
>>―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" を指定する必要があります。
>>#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:リソースから画像を読みだすことにかんして
なるほど!
そういうことだったんですか。
ありがとうございます。解決しました。
またお世話になるかもしれませんがよろしくおねがいします。
本当にありがとうございました。
そういうことだったんですか。
ありがとうございます。解決しました。
またお世話になるかもしれませんがよろしくおねがいします。
本当にありがとうございました。