C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: 文字を変形する


(過去ログ 115 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■67790 / inTopicNo.1)  文字を変形する
  
□投稿者/ くま (20回)-(2013/09/02(Mon) 13:19:47)

分類:[VB.NET/VB2005 以降] 

VS2010 VB.Netです。

VB.netでWindows Formを使用しています。

例えば、文字列をテキストボックスに入力して
その文字列にアーチに変形してピクチャーボックスに表示したいです。

※アーチは、円の上半分のような丸く文字がなっているやつです。

どうすれば実現できるでしょうか。
言葉足らずだと思いますが、よろしくお願いします。
引用返信 編集キー/
■67842 / inTopicNo.2)  Re[1]: 文字を変形する
□投稿者/ Jitta (69回)-(2013/09/04(Wed) 20:47:44)
Jitta さんの Web サイト
No67790 (くま さん) に返信
> VS2010 VB.Netです。
>
> VB.netでWindows Formを使用しています。
>
> 例えば、文字列をテキストボックスに入力して
> その文字列にアーチに変形してピクチャーボックスに表示したいです。
>
> ※アーチは、円の上半分のような丸く文字がなっているやつです。
>
> どうすれば実現できるでしょうか。
> 言葉足らずだと思いますが、よろしくお願いします。

座標変換します。
半径rの円の外周に沿うように変形させるとすると、
中心角は円の外周の長さと文字列を囲む四角形の底辺の長さの比で求まります。
中心角が求まれば、描画を開始する角度は(180−中心角)/2…角Aとなります。
角度がAからA+中心角、距離がrからr+四角形の高さの範囲に該当する元の四角形の位置を求め、その色を取ってきます。
引用返信 編集キー/
■67846 / inTopicNo.3)  Re[2]: 文字を変形する
□投稿者/ くま (21回)-(2013/09/05(Thu) 09:35:56)
No67842 (Jitta さん) に返信
> ■No67790 (くま さん) に返信
>>VS2010 VB.Netです。
>>
>>VB.netでWindows Formを使用しています。
>>
>>例えば、文字列をテキストボックスに入力して
>>その文字列にアーチに変形してピクチャーボックスに表示したいです。
>>
>>※アーチは、円の上半分のような丸く文字がなっているやつです。
>>
>>どうすれば実現できるでしょうか。
>>言葉足らずだと思いますが、よろしくお願いします。
>
> 座標変換します。
> 半径rの円の外周に沿うように変形させるとすると、
> 中心角は円の外周の長さと文字列を囲む四角形の底辺の長さの比で求まります。
> 中心角が求まれば、描画を開始する角度は(180−中心角)/2…角Aとなります。
> 角度がAからA+中心角、距離がrからr+四角形の高さの範囲に該当する元の四角形の位置を求め、その色を取ってきます。

string myString = "abc";
int count = 0;
for (int i = 0; i <= 90; i += 10)
{
Matrix matrix = new Matrix();

matrix.Rotate(i);

Graphics g = this.CreateGraphics();

g.Transform = matrix;

g.DrawLine(Pens.Blue, 0, 0, 250, 0);

if (count != (myString.Length - 1))
{
g.DrawString(

myString[count].ToString(), this.Font, Brushes.Blue,

new RectangleF(250, 0, 100, 100));
count++;
}
}

こんな感じでしょうか。これだと下半分にアーチされます。
C#になってます。
どう修正したらいいですか?
引用返信 編集キー/
■67856 / inTopicNo.4)  Re[3]: 文字を変形する
□投稿者/ バター (2回)-(2013/09/05(Thu) 16:06:06)
このソースの内容は検証していませんが、ここで扱う座標系では、Y軸は下方向に正のため、下半分の半円が出来てしまうのではないでしょうか。
なので、Y座標の計算値をマイナスにして、その値にオフセット(例えば半円の半径)を足せばいいのではないでしょうか。
引用返信 編集キー/
■67875 / inTopicNo.5)  Re[3]: 文字を変形する
□投稿者/ Jitta (71回)-(2013/09/06(Fri) 22:14:45)
Jitta さんの Web サイト
2013/09/06(Fri) 23:07:40 編集(投稿者)
2013/09/06(Fri) 22:16:13 編集(投稿者)

No67846 (くま さん) に返信

> こんな感じでしょうか。これだと下半分にアーチされます。
> C#になってます。
> どう修正したらいいですか?

 どのような結果を得たいのか、イメージできていますか?
文字列を、「アーチ型に並べたい」のでしょうか?
それとも、「アーチ型の領域に沿うように文字列を描きたい」のでしょうか?

> for (int i = 0; i <= 90; i += 10)
> {
>   Matrix matrix = new Matrix();
>   matrix.Rotate(i);
>   Graphics g = this.CreateGraphics();
>   g.Transform = matrix;
>   g.DrawString(
>     myString[count].ToString(), this.Font, Brushes.Blue,
>     new RectangleF(250, 0, 100, 100));
> }

このコードだと、文字列をアーチ型に描いていくことになるのではないでしょうか。

:::::訂正:::::
しまった。1文字ずつ書いているのか。
たとえば「−」だったら曲がったものを書きたいのだと思っていたのですが、
違うのでしょうか。
::::::::::::

 また、説明を読みましたか?Matrix.Rotate には、「時計回りに」と書かれています。
ああ、始点が書いてないのか。
コサイン は、1から始まって、0へ変化していきます。
x は左に行くほど増え、y は下に行くほど増える座標系で、
角度が0〜90度の範囲で時計回りに変化するとき、
コサインは減っていき、サインは増えていく様になるなら、
0度はどこから始まるでしょうか。

 なお、私は「元の四角形の位置を求め、その色を取ってきます」と書きました。
これに該当する箇所は、どこでしょうか。
つまり、Matrix は使えません。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -