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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
滝の上のマスカット

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

#1

投稿記事 by 滝の上のマスカット » 14年前

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"));
といふうに変更してみたのですが、まだ、エラーが発生してしまいます。
 どのように変化させたらいいのでしょうか。(他のファイルを使うのですが、そっちは大丈夫です)

naohiro19

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

#2

投稿記事 by naohiro19 » 14年前

"MYGRAPHIC"はマルチバイト文字列なので
L"MYGRAPHIC" か TEXT("MYGRAPHIC") か _T("MYGRAPHIC")
を使えばいいですよ。

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

Wings

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

#3

投稿記事 by Wings » 14年前

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:リソースから画像を読みだすことにかんして

#4

投稿記事 by 滝の上のマスカット » 14年前

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

Wings

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

#5

投稿記事 by Wings » 14年前

おそらく 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:リソースから画像を読みだすことにかんして

#6

投稿記事 by 滝の上のマスカット » 14年前

( 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:リソースから画像を読みだすことにかんして

#7

投稿記事 by 滝の上のマスカット » 14年前

↑パスを忘れたため編集できません。すみません。
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])' を一致させようとしているとき
画像

Wings

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

#8

投稿記事 by Wings » 14年前

>LoadDivGraphToResource( MAKEINTRESOURCE(10) , "PNG" , 16, 4 , 4 , 32 , 32 , image);
>               ↑
>ここの部分には、次のうちどっちを入れればいいんでしょうか。
>
>#define SOU 10

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

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

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

Wings

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

#9

投稿記事 by Wings » 14年前

補足:

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

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

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

Wings

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

#10

投稿記事 by Wings » 14年前

訂正:

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

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

滝の上のマスカット

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

#11

投稿記事 by 滝の上のマスカット » 14年前

>リソース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"

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

Wings

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

#12

投稿記事 by Wings » 14年前

>>―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:リソースから画像を読みだすことにかんして

#13

投稿記事 by 滝の上のマスカット » 14年前

なるほど!
そういうことだったんですか。
ありがとうございます。解決しました。
またお世話になるかもしれませんがよろしくおねがいします。
本当にありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る