トップページ > 記事閲覧
文字列を90度回転できないでしょうか
名前:fghck852 日時: 2019/07/15 16:41

Androidのスマホを横にして見る画面を作りたいのですが、それには文字列を90度回転させないといけません。 「DXライブラリ 関数リファレンスページ」を見る限り、そのような関数はないようにお見受けするのですが、 無理なのでしょうか。 よろしくお願いします。
メンテ

Page: 1 |

Re: 文字列を90度回転できないでしょうか ( No.1 )
名前:管理人 日時:2019/07/15 23:58

リファレンスには載っていませんが、DrawRotaString という関数がありますので、よろしければお使いください m(_ _)m // デフォルトフォントハンドルを使用して文字列を回転描画する int DrawRotaString( int x, int y, double ExRateX, double ExRateY, double RotCenterX, double RotCenterY, double RotAngle, unsigned int Color, unsigned int EdgeColor, int VerticalFlag, const TCHAR *String ) ; // フォントハンドルを使用して文字列を回転描画する int DrawRotaStringToHandle( int x, int y, double ExRateX, double ExRateY, double RotCenterX, double RotCenterY, double RotAngle, unsigned int Color, int FontHandle, unsigned int EdgeColor, int VerticalFlag, const TCHAR *String ) ; ( VerticalFlag は縦書きフォント用なので通常は FALSE を指定してください )
メンテ
Re: 文字列を90度回転できないでしょうか ( No.2 )
名前:fghck852 日時:2019/07/16 03:47

早速のご回答ありがとうございます。 ご教示いただいた2つの関数を実行してみましたが、回転は思い通りに回転するのですが、回転後の文字列の位置が思うようになりません。 回転中心のX,Y座標は、回転前の文字列の左端の座標を指定すれば、文字列の左端の位置は変わらずに、回転だけするはずだと思うのですが、 なかなかそうなりません。 例えば次のようにプログラムした場合、回転後の文字列の上端の位置は、回転前の文字列の左端の位置(X=100,Y=200)と一致するはずですが、 実際に動かし見ると、X=200、Y=100くらいの位置になります。 DrawRotaString( 100, 200, 1.0, 1.0, 100.0, 200.0, 3.14 / 2.0, 0, 0, FALSE, "DrawRotaStringの例"); これはDrawRotaStringの場合ですが、DrawRotaStringToHandleでも同様です。 つきましては、次の点にご回答いただきたく、よろしくお願いします。 1.回転中心のX,Y座標(第5、第6引数)は、画面左上の端を(0,0)とする座標で指令すると思っているのですが、違うのでしょうか。 2.例えば文字列を右に90度回転させ、回転後の文字列の上端がX=100,Y=200の位置に来るようにするには、どのようにプログラムすればよいのか、 プログラム例を示していただけないでしょうか。
メンテ
Re: 文字列を90度回転できないでしょうか ( No.3 )
名前:95 日時:2019/07/16 10:13

出先なので試していませんが 1.0, 1.0 の次は 100,200ではなく0, 0 なのでは? (画面座標ではなく今から書く文字列を四角形で見た場合の座標)
メンテ
Re: 文字列を90度回転できないでしょうか ( No.4 )
名前:fghck852 日時:2019/07/16 15:26

書き込みありがとうございます。 私もそう思い、( 100, 200, 1.0, 1.0, 0, 0, ...)としてみました。 そうしたら、回転後の文字列上端の位置がX=0,Y=200くらいになりました。 Y方向は良いのですが、X方向がほとんど画面左端にくっついてしまいました。期待するX方向位置は画面左端より100の位置です。 どうすれば思い通りの位置に表示できるのか、わからないでいます。
メンテ
Re: 文字列を90度回転できないでしょうか ( No.5 )
名前:95 日時:2019/07/16 20:05

エミュレータ(x86)でしか試していませんが int android_main(void) { if (DxLib_Init() < 0) return -1; DxLib::SetDrawScreen(DX_SCREEN_BACK); DxLib::SetBackgroundColor(192, 192, 192); while (ProcessMessage() == 0 && CheckHitKeyAll() == 0) { DxLib::ClearDrawScreen(); DrawString(100, 200, "DrawRotaStringの例1", 0); DrawRotaString(100, 200, 1.0, 1.0, 0, 0, 3.14 / 2.0, 0, 0, FALSE, "DrawRotaStringの例2"); DxLib::ScreenFlip(); } return DxLib::DxLib_End(); } で希望通りに回転していると思います。 ちなみに、私がなにか勘違いしているのかわかりませんが > Androidのスマホを横にして見る画面を作りたいのですが、それには文字列を90度回転させないといけません。 ここの意味がよくわかりません。 単に『起動時をふくめ、いつでも横画面(というか横向き)になっているアプリ』を作りたいということですよね? そうだとしたら dxlib.xsrv.jp/cgi/patiobbs/patio.cgi?mode=view&no=4420 にある方法で横画面固定アプリに してしまえば回転とかを考えずに済むと思うのですが...?
メンテ
Re: 文字列を90度回転できないでしょうか ( No.6 )
名前:fghck852(解決済み) 日時:2019/07/17 03:27

詳細なご回答ありがとうございました。下記の通り解決致しました。 1.ご提示のあったプログラムについて   思い通りに文字列が回転しました。今後、文字列の回転を行うようなことがあったら、ご提示のプログラムを参考にしたいと思います。 2.「android:screenOrientation="landscape"」で横向きにする方法について   まさにこれが私のやりたかったことです。ご指摘の通り、この方法を使えば、文字列の回転は不要です。 今回はサンプルプログラムまで作っていただき、また2項のような良い方法をご教示いただき、本当にありがとうございました。 初心者の私の質問に完璧に答えていただき、感謝します。大変ありがとうございました。
メンテ

Page: 1 |

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

   クッキー保存