トップページ > 過去ログ > 記事閲覧
DerivationGraphとDrawRotaGraph2
名前:SweetBlack 日時: 2007/07/13 21:09

いつもお世話になっております。 今回、ちょっと気になった現象がありましたので 質問させていただきます。 LoadGraph等で読み込んだ画像を、 DerivationGraphで切り抜きます。 この切り抜いた画像を、DrawRotaGraph2命令をつかって 表示させた場合、特定の角度に限って、 切り抜いた画像サイズよりも1ピクセル分大きく切り抜いた状態で 表示されている……ように見えます。 その増加する1ピクセル分に透過色を置いておけば 回避できるので取り立てて問題にはならないのですが、 これは仕様と考えてよろしいのでしょうか。 念の為、以下にサンプルプログラムを示します。 //======ここから=========== #include "DxLib.h" #include <math.h> #define PI 3.141592654 int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { double r = 0 ; double d = 0 ; int GH1,GH2 ; int Key ; // ChangeWindowMode( TRUE ) ; // 画面モードのセット SetGraphMode( 640 , 480 , 16 ) ; if( DxLib_Init() == -1 ) // DXライブラリ初期化処理 { return -1; // エラーが起きたら直ちに終了 } // 描画先画面を裏画面にセット SetDrawScreen( DX_SCREEN_BACK ) ; // グラフィックのロード GH1 = LoadGraph( "test.bmp" ) ; GH2 = DerivationGraph( 547, 0, 55,103 , GH1 ); // ループ while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ) { // 画面を初期化する ClearDrawScreen() ; d = double( PI / 180 * r ) ; // 読みこんだグラフィックを回転描画 DrawRotaGraph2( 300, 100, 25,25, 1, d, GH2,TRUE , FALSE ) ; DrawRotaGraph2( 300, 200, 25,25, 1, d, GH2,TRUE , TRUE ) ; // 裏画面の内容を表画面に反映させる ScreenFlip() ; r ++ ; } DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 } //======ここまで=========== ご覧いただければ想像つくと思いますが、 "test.bmp" の画像の(547,0)から(55,103)ピクセル分を抜き出しており その周りは別の色でかこんであります。 (256色BMP画像です)

Page: 1 |

Re: DerivationGraphとDrawRotaGraph2 ( No.1 )
名前:管理人 日時:2007/07/15 12:41

SweetBlackさんどうも、DXライブラリの管理人です。 うーん、ご報告の現象を私の環境でも再現しようとしてみたのですが、 特に問題が発生しているようにはみえませんでした。 もし宜しければ私の環境でコンパイルした実行ファイルでも同様の現象が 発生するかどうかお試しになってみて頂けないでしょうか?m(_ _)m http://homepage2.nifty.com/natupaji/temp/DrawRotaGraph2.zip (SweetBlackさんのソースと違うところは、test.bmp を test100.bmp に 変更した点のみです)
Re: DerivationGraphとDrawRotaGraph2 ( No.2 )
名前:SweetBlack 日時:2007/07/15 13:29

管理人さま。ご返答ありがとうございます。 いつもお世話になっております。 さて、管理人様から頂いたプログラムを実行してみましたが、 やはり同じ現象が現れました。 どうもおかしいのは90度毎のようですので、 サンプルにちょっと手を加えてみました。 //==ここから============================= #include "DxLib.h" #include <math.h> #define PI 3.141592654 int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { double r = 0 ; double d = 0 ; int GH1,GH2 ; int Key ; // ChangeWindowMode( TRUE ) ; // 画面モードのセット SetGraphMode( 640 , 480 , 16 ) ; if( DxLib_Init() == -1 ) // DXライブラリ初期化処理 { return -1; // エラーが起きたら直ちに終了 } // 描画先画面を裏画面にセット SetDrawScreen( DX_SCREEN_BACK ) ; // グラフィックのロード GH1 = LoadGraph( "test100.bmp" ) ; GH2 = DerivationGraph( 547, 0, 55,103 , GH1 ); // ループ while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ) { // 画面を初期化する ClearDrawScreen() ; d = double( PI / 180 * r ) ; // 読みこんだグラフィックを回転描画 DrawRotaGraph2( 300, 100, 25,25, 1, d, GH2,TRUE , FALSE ) ; DrawRotaGraph2( 300, 200, 25,25, 1, d, GH2,TRUE , TRUE ) ; DrawFormatString( 0, 0, GetColor(255,255,255), "角度 %f ", r ) ; // 裏画面の内容を表画面に反映させる ScreenFlip() ; WaitKey() ; r += 90 ; } DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 } //==ここまで============================= キー入力するごとに90度ずつ回転していきます。 もし私と同じ現象が再現したならば、 赤い四角の一辺が緑になっているはずです。 (管理人様から頂いた画像を使用して確認しました) これでもし管理人様の方で再現しないようでしたら、 当方の環境の問題の可能性が高いと思われますが、 とりあえずはお手数ですがご確認くださいますよう お願いいたします。
Re: DerivationGraphとDrawRotaGraph2 ( No.3 )
名前:管理人 日時:2007/07/19 01:32

SweetBlackさんどうも、DXライブラリの管理人です。  お書き込み頂いたプログラムで私の環境でも四角形の一辺が緑色に なってしまう現象を確認することが出来ました。  現在作業の時間が取れない状態が続いていますので、 修正には少しお時間を頂くことになるかもしれません。m(_ _;m
Re: DerivationGraphとDrawRotaGraph2 ( No.4 )
名前:SweetBlack 日時:2007/07/20 00:38

管理人様、ご確認ありがとうございます。 先にも書きましたように、 回避方法は明確になっておりますので、 修正も特に急いでおりません。 ご都合のよろしい時にお願いいたします。 なお、サンプルプログラムを実行されて お気づきだとは思いますが、 「一辺が緑色」になるだけでなく、条件によっては 「一隅が緑色」になる場合もあります。 念の為に追記しておきます。

Page: 1 |