- PR -

TextRenderer.DrawTextとGraphics.DrawString

1
投稿者投稿内容
sou
ベテラン
会議室デビュー日: 2002/09/25
投稿数: 56
投稿日時: 2006-10-24 17:47
NET Framework 2.0では、Windowsフォームに文字列を描画する方法として
新たにTextRendererクラスのDrawTextメソッドが加わっていますが、
TextRenderer.DrawTextを使用するメリットはなんなんでしょうか?

TextRenderer.DrawTextがGDIによる描画で、
Graphics.DrawStringがGDI+による描画が行われているというのは
わかるんですが、なぜこのようなメソッドが追加されたのかがわかりません。

私の環境で実験したところ、Graphics.DrawStringに比べて
TextRenderer.DrawTextは描画速度が遅かったです。
自コントロールの文字列描画はGraphics.DrawStringから
TextRenderer.DrawTextに書き換えたほうがいいんでしょうか?
ぽぴ王子
ぬし
会議室デビュー日: 2006/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 2006-10-24 18:23
こんにちは。

引用:

souさんの書き込み (2006-10-24 17:47) より:

TextRenderer.DrawTextがGDIによる描画で、
Graphics.DrawStringがGDI+による描画が行われているというのは
わかるんですが、なぜこのようなメソッドが追加されたのかがわかりません。


私も正確にはわかりませんが(というか TextRenderer 自体初めて知りました)
sou さん自身が答えを書いておられるのではないでしょうか。
GDI と GDI+ では描画のアルゴリズムも微妙に違う(と思う)し、純粋な GDI
での出力がほしい場合に TextRenderer クラスを使用するという感じではない
でしょうか。
自コントロールの文字列描画を書き換える必要は特になさそうですが、書き換え
ない理由も特にない…かなあ(書き換えるのが面倒というのは理由になるでしょ
うか)。

そのあたりで役に立ちそうな Lady.BUG さんのはてなダイアリを。
http://d.hatena.ne.jp/ladybug/20060206
_________________
ぽぴ王子@わんくま同盟
ぽぴ王子の人生プログラミング中 / ぽぴンち。
ダッチ
大ベテラン
会議室デビュー日: 2005/10/31
投稿数: 113
投稿日時: 2006-10-24 23:00
ダッチです。

引用:

TextRenderer.DrawTextがGDIによる描画で、
Graphics.DrawStringがGDI+による描画が行われているというのは
わかるんですが、なぜこのようなメソッドが追加されたのかがわかりません。



GDI+ テキスト、解像度への非依存性、およびレンダリング メソッド
こちらのサイトに詳しく違いが説明されています。

解像度に依存しないのが GDI+ ということですね。
でも「あ‐」を描画したときに「あ」と描画されることもあるようです。
この例はこちらの @IT さんのスプレッドの説明にのっていました。

ぽぴ王子さんも仰られているように GDI を使用しなければならないということはありません。
なにも問題がないのであればそのまま GDI+ を使用すればいいと思います。
sou
ベテラン
会議室デビュー日: 2002/09/25
投稿数: 56
投稿日時: 2006-10-26 23:23
ぽぴ王子さま
ダッチさま
ご教授ありがとうございます。

描画関係は全くもって不勉強でしたので大変参考になりました。

それにしても、私の個人的な感想としては、
.NET1.Xの時に比べて.NET2.0では、
全体的にコントロールの描画が遅くなっているような気がするんですが、
そう感じるのは私だけ?
同じアプリケーションでも.NET1.Xではきびきび描画されていたのに
.NET2.0ではもさっとした感じで再描画が行われる。
taa
常連さん
会議室デビュー日: 2005/08/29
投稿数: 44
投稿日時: 2006-11-14 21:15
引用:

souさんの書き込み (2006-10-26 23:23) より:
ぽぴ王子さま
ダッチさま
ご教授ありがとうございます。

描画関係は全くもって不勉強でしたので大変参考になりました。

それにしても、私の個人的な感想としては、
.NET1.Xの時に比べて.NET2.0では、
全体的にコントロールの描画が遅くなっているような気がするんですが、
そう感じるのは私だけ?
同じアプリケーションでも.NET1.Xではきびきび描画されていたのに
.NET2.0ではもさっとした感じで再描画が行われる。



横からすみません。私も同じことを感じました。
調べて見たところ、ControlPaintクラスのDraw関連のメソッドが
10倍以上性能劣化(ざっくりです。)していたためだと思われます。
うーんという感じです。
1

スキルアップ/キャリアアップ(JOB@IT)