トップページ > 記事閲覧
DrawRotaGraphでの画像の表示がおかしい。
名前: 日時: 2018/03/15 06:28

こんにちは。 質問させて頂きたい事があって、スレッドを立てさせて頂きます。 (以前にも、一度、また別の事柄で、質問させて頂いた事がありますが、その際と名前が異なるかもしれません…。 その際は、ありがとうございました。 なるべく自己解決しようとは思って居るのですが、数日悩んでも分からず、素直に、質問させて頂いた方が良いのではないかと、思い至りました…。 仕様と言うか、普通の事で、私がおかしいのかもしれませんが、それならそうと、教えて頂けたら幸いです…。すみません。) --- 環境としては、何を書くべきか分かりませんが、 Windows7でVS2015とDXライブラリを用いてC++でゲームを作って居ます。 さて、本題の、"DrawRotaGraphでの画像の表示がおかしい。"についてなのですが、 具体的には、画像を等倍(1.0)で表示しても、"DrawGraph"を用いた時と、同じ様に表示されないと言う事です。 詳しく説明させて頂くと、 例えば、ピクセルで30*30未満の画像、いわゆるドット絵の様な画像を等倍で表示させようとした際、 回転させる機能の無い"DrawGraph"を用いた方では、そのまま綺麗に表示されて居る様に見えるのに対して、 "DrawRotaGraph"を用いると、回転させずに?(ラジアンで0または2πを引数で指定)、"DrawGraph"と同じ様に表示しようとして居る筈が、 四辺の内、上と左側に1ピクセル分のだぶりと言うか、下と右、つまりは右下側に、1ピクセル分ずれて居ると言うか…、そんな感じに表示されてしまいます。 透過を用いた画像で、例えば、三角形の画像を表示すると、右下が欠けて、三角形では無くなってしまう様な感じです。 --- 上手く説明できないので、画像を添付と言うか、用意しました。 FASTPIC(ファストピック)と言う画像アップロードサイトを利用しました。 ( エイチティーティーピーエス://ダブリューダブリューダブリュー.fastpic.ジェイピー/images.ピーエイチピー?file=9739469085.png ) 画像の上側がDXライブラリがVer3.16d、下側がVer3.19(最新版?)です。 突然、バージョンの話を出してしまいましたが、 私が利用して居たのが古いバージョンで、最新のバージョンにすれば解決するかもしれないと思った…と言った感じです。 画像は、上と下でバージョンが分かれ、それぞれ、4つのスクリーンショットを並べたものです。 4123と番号をふってあります。それぞれ、番号の上下を指します。 背景の青い二色は特に意味はありません。 黒に灰色っぽい枠のついたものが、表示させて居る画像です。 "ABC abc"と言う文字列が、また別の話ですが、表示させて居る文字列です。 ・4が文字も画像も回転機能の無い関数を用いて表示させたもの、 ・1が画像のみ回転機能の無い関数を用いて表示させたもの、 ・2が画像も文字も回転機能のある関数を用いて表示させたもの、 ・3が2のものを、反転する様にラジアンを指定して表示させたものです。 (3と2の、表示させて居る画像が、変にずれて居る点については、関係が無いので、気にしないで頂けると幸いです…。) 上の1の様に表示させたいのですが、2の様に画像が表示されてしまいます。 まるで、画像が上と左に1ピクセルだけ伸ばされ、下と右を1ピクセルだけ削った様な感じがします。 ネイバー法だとかバイリニア法だとか言うのを思い出して、試してみましたが、それとは関係が無い様です。 この表示させて居る画像だと分かり辛いですが、2と3の様に、上下が逆になる様に回転させると、 逆にして居る方は、問題が無い様に見えます。他の角度も試してみましたが、 見た目的に回転して居る方は、どちらも問題が無い様に見えました。 見た目的にと言うのは、0や2πでも、一応は、回転して居るのかな…と。 微妙に回転して居るから、こう言った、小さな画像だと、粗が大きく、おかしく感じるのかな…とも思います。 正位置だけ変に見えるのなら、正位置だけ回転機能の無いもので…とも思って居たのですが、 回転させたいものがある以上、正位置のものだけ変えるのは嫌だなあと思います…。 そんな感じで悩んで、前述の通り、バージョンが古い事に気付き、更新したところ、 画像については、変化が見られず、何故か文字列が、変に表示されて居る事に気付いてしまいました…。 下側の画像の様に、回転機能のある文字列を描画する関数を用いた方だけ、正位置、逆位置に関係無く、 字が崩れると言うか、別のフォントの様と言うか、文字が小さくなって居る様な感じになってしまいました。 フォントは、メイリオを指定して居ます。他のフォントは試して居ません。 --- お話できる事が、こんな事しかないのですが、 やはり、こう、簡単な話と言うか、単純な話、単純な間違いで、よくある疑問なんんじゃあないかなと思いますので、 画像を見ただけで、分かって頂けたらなあ…なんて思ったりします。 返信頂ければ、遅くとも24時間以内には、返事をさせて頂きますので、どうぞ、よろしくお願いします。 長々と、訳の分からない文面で、失礼しました…。 --- (もしかすると、環境の問題だったり、グラフィックドライバが云々と言った事かもしれないですが…。 私の他にも使われて居る方は、大勢居る筈ですし、マイナーな関数でも無いのに、他に、同じ様な症状と言うか、問題を提起して居る方が、 検索した範囲では見付からなかったので、私の勘違いか何かなのかな…と思ったりして居ます…。) ---
メンテ

Page: 1 |

Re: DrawRotaGraphでの画像の表示がおかしい。 ( No.1 )
名前: 日時:2018/03/15 06:35

うーん…。私の言葉づかいだと、いくつか禁止語句に引っかかる様で、リンク以外にも問題があるみたいで、 禁止語句に引っかかったがために、一部、カタカナにさせて頂いた旨を返信しようとしたら、 それも返信できなかったので、このコメントは短くなりました…。
メンテ
Re: DrawRotaGraphでの画像の表示がおかしい。 ( No.2 )
名前:へけぽん 日時:2018/03/15 15:28

これだけなら貼れるかテスト ht tps://www.fastpic.jp/images.php?file=9739469085.png あと私も最近似たような疑問があって、そっちは無事に解決しました ht tp://dxlib.o.oo7.jp/cgi/patiobbs/patio.cgi?mode=view&no=4315 ひょっとしたら関連してるかもしれません
メンテ
Re: DrawRotaGraphでの画像の表示がおかしい。 ( No.3 )
名前:管理人 日時:2018/03/16 01:09

へけぽんさんが仰られていますが、以前へけぽんさんにご指摘いただいて修正したバグが原因かもしれません こちらの暫定最新版でしたら正常に描画されるかもしれませんので、よろしければお試しください m(_ _)m http://dxlib.o.oo7.jp/temp/DxLibVCTest.exe // Windows版 VisualC++ 用 http://dxlib.o.oo7.jp/temp/DxLibBCCTest.exe // Windows版 BorlandC++ 用 http://dxlib.o.oo7.jp/temp/DxLibBCC2Test.exe // Windows版 C++ Builder 10.1 Berlin 用 http://dxlib.o.oo7.jp/temp/DxLibGCC_MinGWTest.exe // Windows版 MinGW 用 http://dxlib.o.oo7.jp/temp/DxLibDotNet.zip // Windows版 .NET用 http://dxlib.o.oo7.jp/temp/DxLibAndroidTest_ARM.exe // Android版 ARM用 http://dxlib.o.oo7.jp/temp/DxLibAndroidTest_x86.exe // Android版 x86用 http://dxlib.o.oo7.jp/temp/DxLibMakeTest.exe // ソース ( 中身を既存のライブラリのファイルに上書きして、VisualStudioをお使いの場合は『リビルド』を、  BCCをお使いの場合は『再構築』をして下さい )
メンテ
Re: DrawRotaGraphでの画像の表示がおかしい。 ( No.4 )
名前: 日時:2018/03/16 07:46

へけぽん さん、 管理人 さん、返信頂き、ありがとうございます。 読むのも嫌になる様な私の投稿を読んで頂けただけで、既に、とても嬉しく思います。ありがとうございます。 へけぽんさんの、DrawRotaGraph3 についてのスレッドは、しっかり読んだとは言えないものの、少し目を通しては居ました。 私も、とても似た問題だと思うのですが、私が試した結果としては、変わりがありませんでした。 (管理人さんが投稿された最新の"Windows版 VisualC++ 用"を試させて頂きました。) 私の投稿内容の中にある、バージョンと文字列の描画の話にある様に、同じVer3.19台だからか、 文字列が綺麗に描画できない点まで、同じ結果でした。 今のところは、文字列の点を考えて、Ver 3.16d を使う様にして居ます。 3.16dから3.19、3.19aまでの間で、どこから、どう変わるのかは調べて居ません…。 へけぽんさんの場合は、DrawRotaGraph3 に限定された症状の様ですが、 私の場合は、DrawRotaGraph系3種、どれも見た目では同じ結果になってしまいます。 何故か、1.0、等倍で指定せず、0.9 を指定すると、見た目としては、「本来はこうあるべき」姿に見えます。 1.0 の等倍以外や、角度が 0 ? の正位置以外の指定だと、正しい表示のされ方をして居る様に、個人的には感じます…。 先述の、文字列とバージョンの話については、メイリオ以外の複数のWindowsの基本?のフォントを指定したり、 1.0 以外の拡大率を指定してみたりしましたが、やはり、変に表示されてしまいました…。 ちなみに、文字列の描画については、 "文字列を任意の角度で表示したい" と言う、過去のスレッドに登場するものを利用して居ます。 ht tp://dxlib.o.oo7.jp/cgi/patiobbs/patio.cgi?mode=view&no=3547 DrawRotaStringToHandle です。 --- 私の返信だと、何も参考にならなくて…と言うか、すみません…。 この土日は、返信する事ができないかも知れません。その点も、申し訳ないです…。 何とか解決したいとは思って居りますので、少なくとも、返信だけは、しっかりとさせて頂きます。 よろしくお願いします。 --- また、蛇足ですが、 OS : Win7 64bit DirectXのバージョン : DirectX 11 Card name: NVIDIA GeForce GTX 750 Manufacturer: NVIDIA Chip type: GeForce GTX 750 DAC type: Integrated RAMDAC Display Memory: 4044 MB 環境 VS2015 community Ver 14.0.25425.01 Update 3 / VC++2015 と言った感じの環境となります。
メンテ
Re: DrawRotaGraphでの画像の表示がおかしい。 ( No.5 )
名前:管理人 日時:2018/03/17 23:34

へけぽんさんにご指摘いただいた件とは別なのですね・・・ 文字の描画結果と DrawRotaGraph のお話を同時に扱うと混乱しそうなので、とりあえず DrawRotaGraph の問題から解決したいと思います とりあえず手元の環境で以下のような『回転無し、拡大無しの DrawRotaGraph』を行うプログラムを組んでみましたが、 特に1ピクセルずれてしまうということはありませんでした #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int GrHandle ; // ウインドウモードで起動 ChangeWindowMode( TRUE ) ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1 ; // 画像の読み込み GrHandle = LoadGraph( "hako.bmp" ) ; // 描画先を裏画面に変更 SetDrawScreen( DX_SCREEN_BACK ) ; // メインループ while( ProcessMessage() == 0 ) { // 画面のクリア ClearDrawScreen() ; // 回転無しで画像を描画 DrawRotaGraph( 320, 240, 1.0, 0.0, GrHandle, FALSE ) ; // 裏画面の内容を表画面に反映 ScreenFlip() ; } // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; } こちらに上記のプログラムをコンパイルした実行ファイルをアップしましたので、 よろしければ箱さんの環境でも上記のプログラムであれば正常に表示されるか試してみていただけないでしょうか? m(_ _)m http://dxlib.o.oo7.jp/temp/DrawRotaGraphTest.zip
メンテ
Re: DrawRotaGraphでの画像の表示がおかしい。 ( No.6 )
名前: 日時:2018/03/19 10:37

管理人さん!延いては、へけぽんさん!ごめんなさい! 管理人さんに頂いた最新のコメントから、謎が、真相が解明されました…! DXライブラリ側の問題では無いです!全ては私のせいでした…。 --- また、土日は忙しく、返信が遅れてしまって、ごめんなさい…。 今さっき、ようやくコメントを読ませて頂いた次第です。 ---【道程(真相から…、真相だけ読んで頂いて構いません…。)】 管理人さんのコメントから、なるほど、何かの処理が干渉して居る可能性があるのか、 それを考慮して、最低限のコードでも確認されるかと言った感じで、テストして行けば良いのか、 当たり前の事なのに、全然、気が付かなかった…と言った感じに思いました。 それで、早速、アップして頂いたものを試してみると、正常に表示されるではないですか…。 これはまさか、私が入れ子にした奥の方で関数を使用して居るから、 途中で何かが干渉して居て、入れ子の中と外では結果が違うのか!?と思いまして、 色んな場所で関数を使用してみたのですが、問題が起きた場所も含め、 どこで使用しても正常に表示されたのです。 ですから、色々と可能性を考えまして、例えば、bmpでは無く、pngやjpgを用いて居たので、 それらだけで問題が起きるのか…等、試してみたのですが、変わらず正常でした。 そこで、自分で書いて用いた関数と、管理人さんの書き方を見比べてみましたところ、 そう言えば、描画角度、ラジアンで指定するところに、πを用いたりせず、 単純に、0.0と書いてあるなあ…と思いまして、まさか!と思ったら、そのまさかでした…。 ---【真相】 要するに、描画角度を、ラジアン指定で、正位置を指定して居ると思って居たものの、 実際は、微妙に、僅かに、傾いて居た…と言うのが、真相の様です。 左と上側が増え、右と下側が減って居たと言う事は、きっと、ほんの僅かに右回転して居た、 右に傾いて居た…と言う事なのではないかと思います…。 --- 結局、DXライブラリ側には何の問題も無く、環境に依るものでも無いのだと思います…。 ただのお騒がせなのですが、では一体、私は、どうして傾けてしまったのか、 どう指定して居たのかと言う話なのですが…。 私の、最初の投稿内容の、 > "DrawRotaGraph"を用いると、回転させずに?(ラジアンで0または2πを引数で指定)、"DrawGraph"と同じ様に表示しようとして居る筈が、 と言った文にある、"(ラジアンで0または2πを引数で指定)"と言う部分が問題で、 自分で、0または2パイと述べて居ますが、私は、2パイでしか指定した事がありませんでした。 つまり、0を用いて居るところ、2パイのところがあるのでは無く、 0と2パイは同じ角度を指して居るものだと思って居ました…。 もっと言えば、自分で、こんな風に書いて居るのに、正位置は0で示せる、0で書こうとは、 全く思って居ませんでした…。 私が、ラジアンと言うものについて無知と言うか、延いては数学、延いては基本的な学問…等について、 理解が及んで居ないと言うだけなのですが…。 恥の上塗りをします。言い訳をさせて頂きます…。 何故、こんな勘違いをしてしまったのか、 これは、私の様に勘違いしてしまう人は、きっと居る筈です…!居ます…!居るに違いありません…! そんな方のためにも、勘違いしてしまった理由も書くべきだと思います…。 私は、あるサイトを参考にしました(恐らく、ばればれ。検索すれば一発…)。 #define PI 3.1415926 を定義して、 PI*2は360°、つまり、一回転だから、0°と同じで、 PI*2と0はラジアン指定だと同じ!と言った感じに説明されて居ました。 それは今思えば、正しい事で、でも、微妙に正しくない…のだと思います。 パイを二倍したら、ぴったり360度になるのが、ラジアンなのだと素人なりに理解します。 でも、それは、パイ…つまりは円周率と言う、3.14から始まる、 延々と続く小数点以下の数を持ってして…と言いますか、 #define PI 3.1415926 は、円周率であって完全な円周率では無いと言いますか、 PIを円周率の代わりとして用いた計算結果は、本来の正しい結果とは異なってしまうのだと、 素人なりに理解します。理解したつもりで居ます…。 つまりは、真相として語って居る様に、微妙に、傾いてしまう計算結果が、 出てしまって居るのだと思います…。 これは、ラジアンを使用する分には困らない程度に理解して居ようが理解して居まいが、 やっちゃう時は、やっちゃう…そんな気がします。そうだったら、私も、少しは救いがあります…。 --- まだまだ、恥の上塗りをしようと思えば、できるのですが、心が痛むので、このぐらいにしておきます…。 管理人さん、へけぽんさん、本当に、ごめんなさい…。お騒がせいたしました…。 傾けずに描画したいなら0をして居すれば良いなんてのは、当たり前が過ぎる事なのかも知れませんが、 ラジアン指定をする際に、例えば、この角度にするなら…とパイを用いた例を出すのは自然だと思いますが、 0の場合と、パイを用いた傾けた場合とを知ってさえ居れば、どこかに載ってさえ居れば、 こんな事には…なんて、思ってしまったりもします…。 私が、もし、誰かにラジアン指定について教える際には、0度は0、他はパイを用いるよ!と言った感じに、 説明しようと強く思いました…。0度も、パイに0を掛けてみれば良かったんですけどね…。 --- これにて、私としては、解決かな…と思いますが、 とりあえずは、管理人さんに返信頂いてから、行動しようと思います…。 (そう言えば、文字列の事も私は話にして居ましたね…。)
メンテ
Re: DrawRotaGraphでの画像の表示がおかしい。 ( No.7 )
名前:管理人 日時:2018/03/20 01:35

なるほど、僅かに回転して描画されていたのですね DrawRotaGraph の問題が解決したようで何よりです 文字列の描画を DrawRotaStringToHandle で行うと通常の DrawString より小さく描画されてしまう件については DXライブラリのバグでした( 縦横1ピクセルづつ DrawStringToHandle より小さく描画されてしまっていました・・・ ) 修正版をアップしましたので、よろしければお試しください m(_ _;m http://dxlib.o.oo7.jp/temp/DxLibVCTest.exe // Windows版 VisualC++ 用 http://dxlib.o.oo7.jp/temp/DxLibBCCTest.exe // Windows版 BorlandC++ 用 http://dxlib.o.oo7.jp/temp/DxLibBCC2Test.exe // Windows版 C++ Builder 10.1 Berlin 用 http://dxlib.o.oo7.jp/temp/DxLibGCC_MinGWTest.exe // Windows版 MinGW 用 http://dxlib.o.oo7.jp/temp/DxLibDotNet.zip // Windows版 .NET用 http://dxlib.o.oo7.jp/temp/DxLibAndroidTest_ARM.exe // Android版 ARM用 http://dxlib.o.oo7.jp/temp/DxLibAndroidTest_x86.exe // Android版 x86用 http://dxlib.o.oo7.jp/temp/DxLibMakeTest.exe // ソース ( 中身を既存のライブラリのファイルに上書きして、VisualStudioをお使いの場合は『リビルド』を、  BCCをお使いの場合は『再構築』をして下さい )
メンテ
Re: DrawRotaGraphでの画像の表示がおかしい。 ( No.8 )
名前:箱(解決) 日時:2018/03/20 22:57

管理人さん、 DrawRotaStringToHandle についての迅速な対応、ありがとうございます。 私個人としては、元通り、綺麗に描画される様になったと思います。 これで、最新のバージョンに、素直に移行する事ができて、とても嬉しいです。 本題の DrawRotaGraph については、確かに、問題は解決したのですが、 今回の様に、ドット絵の様な、ドット一つで見え方が大きく変わってしまう様な、 小さい、細かいピクセルの画像を用いてしまうと、 正位置は0.0で問題無いとしても、逆位置や、90度回転と言った、 綺麗に、逆に、横にしたいと思っても、 実際は、ほんの僅か、傾いてしまうラジアン指定の仕様?によって、 ドット絵レベルでは粗が気になる画像の乱れが起きてしまう様で、 悩ましいなあ…、他の方は、どうされて居るんだろう…と思ったりします。 私は、とりあえず、パイを、小数点以下を、どこまで含めるのか…によって、 画像によって、綺麗に描画できたりできなかったりしてしまう様なので、 パイに値を一つにしないで、いくつか用意して、与える…と言った感じの、 対処をしてみる事にしました。 色々、やり方はあると思うのですが、悩ましいです。 悩ましい気持ちも残っては居りますが、 問題の解決と言うか、何故なのか、謎が解決して、 また別件のバグを修正までして頂いて、 個人的には、とても有意義だったなと思います。 何と言うか、上手くコメントできなくて、すみません…。 素直に、管理人さん、へけぽんさん、本当に、ありがとうございました。 また機会があれば、恥を忍んで質問させて頂きます。 長々と、失礼しました。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存