ページ 11

DXライブラリを使用して画像が表示できない

Posted: 2009年8月15日(土) 16:58
by kb98
以下の「ゲームプログラミングの館」さんのサンプルコードを
実行したのですが、画像が表示されません。
#include "DxLib.h"
char st1[/url]="画像の保存場所が違うか、ファイル名が違うため、表示できません。";
char st2[/url]="正常に認識されています。";

int WINAPI WinMain( HINSTANCE hInstance, 
                    HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
    ChangeWindowMode( TRUE ) ;
    if( DxLib_Init() == -1 ) return -1; 


    if(LoadGraphScreen( 0 , 0 , "char.PNG" , TRUE ) == -1)
        DrawString(50,220,st1,GetColor(255,255,255));
    else
        DrawString(50,220,st2,GetColor(255,255,255));

        
    WaitKey() ;
    DxLib_End() ;
    return 0 ;
}


実行するとウィンドウは表示されますが、その後モニタにノイズが
走ったり、数度点滅したりしますが画像も文字列も表示されることはなく
ウィンドウは黒いままです。エラーや警告メッセージはなしです。
素人目に見ても、モニタ点滅時に描画処理を行おうとしているのに
何らかのトラブルが発生してる雰囲気が感じられます。

私の実行環境は、
Windows Vista Home Premium SP2
Visual C++ 2008 EE です。

上記のサンプルコードを友人のWindowsXP SP3にて実行させてもらうと
正常に動作します。(VCの設定は私のPCと同じ状態にさせてもらいました)
"char.PNG"の保存場所が違うということはないようです。

関係があるか分かりませんが、グラボはGeForce9800GT
DirectXバージョンは10です。
友人PCのグラボは聞きそびれました、DirectXバージョンは9だったかと。

ハードの相性やソフトのバージョンの問題なのかまるで検討が
つかないためご意見を伺えましたら大変助かります。

Re:DXライブラリを使用して画像が表示できない

Posted: 2009年8月15日(土) 17:48
by Justy
[color=#d0b0c0" face="monospace]
>以下の「ゲームプログラミングの館」さんのサンプルコードを
>実行したのですが、画像が表示されません
[/color]

 表の画面に描いてそのまま表示するこのサンプルは Vistaでは
正常に動作しないかもしれません。

 試しに、そのサンプルコードの WinMain関数の中を以下のように
書き直してみてください。
[color=#d0d0ff" face="monospace]
int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE ) ;
if( DxLib_Init() == -1 ) return -1;
SetDrawScreen(DX_SCREEN_BACK);

if(LoadGraphScreen( 0 , 0 , "char.PNG" , TRUE ) == -1)
DrawString(50,220,st1,GetColor(255,255,255));
else
DrawString(50,220,st2,GetColor(255,255,255));

ScreenFlip();
WaitKey() ;
DxLib_End() ;
return 0 ;
}
[/color]

 これは同サンプルコードを裏画面に一度描画してから切り替えて表示するように
したものです。

 これで何か表示される……かもしれません。

 が、これでもダメなら同じくWinMain関数の中を
[color=#d0d0ff" face="monospace]
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow )
{
ChangeWindowMode(TRUE);
if(DxLib_Init() == -1) return 0;

SetDrawScreen( DX_SCREEN_BACK );

int image = LoadGraph("char.png");
while(!ProcessMessage())
{
ClearDrawScreen();
if(image == -1)
DrawString(50,220,st1,GetColor(255,255,255));
else
DrawString(50,220,st2,GetColor(255,255,255));
ScreenFlip();
}
DxLib_End();
return 0;
}
[/color]

としてみて下さい。

 もしこれもダメでしたら、プロジェクトのディレクトリに Log.txtというファイルが
あるかと思います。

 そのファイルを見て、何かエラーとか失敗などの文字がないか調べてみてください。

Re:DXライブラリを使用して画像が表示できない

Posted: 2009年8月15日(土) 20:15
by kb98
Justy様
ご返事いただきありがとうございます。

ご提示いただいた2つのコードを実行してみました。
1つ目のコード、裏画面→表画面では今までと同様の結果となりました。
黒ウィンドウ・モニタ点滅です。

Logでは「周期的エフェクトの作成に失敗しました。」という
もの以外にはエラー・失敗などで該当するものは見つかりませんでした。

2つ目のコードでは、しばらく点滅したのちにエラー終了しました。
Logは上記の「周期的~」以外に、
DxLib_VC2005用.exe の 0x77cd9b2b で初回の例外が発生しました
 : 0xC0000005: 場所 0x06a58000 に書き込み中にアクセス違反が発生しました。
DxLib_VC2005用.exe の 0x77cd9b2b でハンドルされていない例外が発生しました
 : 0xC0000005: 場所 0x06a58000 に書き込み中にアクセス違反が発生しました。
プログラム '[3652] DxLib_VC2005用.exe: ネイティブ' はコード -1073741819 (0xc0000005)
 で終了しました。

元のサンプルコードを開く際に、VC++2008に互換処理を云々とありましたが、
そのあたりの問題なのでしょうか。
サンプルコード自体は「VC2008用_2005用」とはなっていました。

Re:DXライブラリを使用して画像が表示できない

Posted: 2009年8月15日(土) 21:17
by Justy
 この2つもダメとなると、困りましたね……。
 ちょっと普通の問題ではないようです。


[color=#d0b0c0" face="monospace]
>周期的エフェクトの作成に失敗しました
[/color]

 それはフォースフィードバック関連のジョイパッド周りのエラーのようです。


[color=#d0b0c0" face="monospace]
>DxLib_VC2005用.exe の 0x77cd9b2b で初回の例外が発生しました
[/color]

 Vistaで実行したときのメモリマップとかは詳しくはないのですが、
XPと似通ってると仮定するなら、なんかDXライブラリよりさらに下の階層で
何か問題が起きているようにもみえますね。


[color=#d0b0c0" face="monospace]
>元のサンプルコードを開く際に、VC++2008に互換処理を云々とありましたが
[/color]

 VS2005用のプロジェクトを VS2008用に変換する処理だと思うので、
そこはあまり関係ないかと思います。


 さて、以後のチェック項目としては

・ 私用している DXライブラリは最新版(2.25b)かどうか確認してください。

・ ジョイパッドが刺さっていたら抜いてください

・ 2つめのコードで ChangeWindowMode(TRUE)を ChangeWindowMode(FALSE)にしても
同様の現象になるかどうか見てください
(フルスクリーンで実行されるので注意。終了するときは Alt+F4を押してください)

・ グラフィックスなどのドライバは最新かどうか確認してください。

くらいしか思いつきません。

 上記項目全てチェックしても改善されないようでしたら
DXライブラリ本家の掲示板の方に相談されるのがいいかと思います。


DXライブラリ置き場 HOME
ttp://homepage2.nifty.com/natupaji/DxLib/index.html

DXライブラリ質問掲示板
ttp://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?

Re:DXライブラリを使用して画像が表示できない

Posted: 2009年8月15日(土) 22:59
by kb98
Justy様
度々ありがとうございます。

教えていただいたチェック項目について調べてみました。
> ・ 私用している DXライブラリは最新版(2.25b)かどうか確認してください。

2.25bでした。


> ・ ジョイパッドが刺さっていたら抜いてください


「周期的エフェクトの作成に失敗しました 」のメッセージは確かに消えました。
ありがとうございます。


> ・ 2つめのコードで ChangeWindowMode(TRUE)を ChangeWindowMode(FALSE)にしても
> 同様の現象になるかどうか見てください

点滅こそしませんが、何も表示されませんでした。


> ・ グラフィックスなどのドライバは最新かどうか確認してください。

グラボのドライバはつい最近アップデートしたので問題ないかと思います。



当面は廃棄予定だった古いノートPCで作業してみます…。

DXライブラリ様のところにも伺ってみようと思います。
色々とありがとうございました。