2012-01-05 13 views
1

C#フォームプロジェクトでは、次のようなコードを書くことができますが、私が融合しようとしている2つの異なる "世界"があるようです。FormattedTextを使用してビットマップを作成する

FormattedText text = new FormattedText(textBox1.Text, CultureInfo.GetCultureInfo("en-us"), System.Windows.FlowDirection.LeftToRight, new Typeface("Tahoma"), 20, System.Windows.Media.Brushes.Black); 
text.MaxTextWidth = 480; 
text.MaxTextHeight = 480; 
DrawingVisual d = new DrawingVisual(); 
DrawingContext d1 = d.RenderOpen(); 
d1.DrawText(text, new System.Windows.Point(0, 0)); 
d1.Close(); 
RenderTargetBitmap bmp = new RenderTargetBitmap(480, 480, 120, 96, PixelFormats.Pbgra32); 
bmp.Render(d); 
System.Windows.Controls.Image I=new System.Windows.Controls.Image(); 
I.Source = bmp; 

私はWindows.Media.ImageSourceを取得します。私はSystem.Drawing名前空間を使用するためにすべてを移行したいと思います。

私は基本的に上記のコードを動作させるためにWPFライブラリをインポートしなければならなかったので、私はWindowsフォームでどうすればいいのでしょうか。

参考:私が本当にやりたいことは、行の折り返しを可能にし、それをビットマップとして操作する方法でビットマップにテキストを描画することです。これを行う簡単な方法がある場合(Windowsフォームの場合)、これはうまくいかない場合でも同様に機能します。

答えて

3

はい、これはWPFコードです。全く異なる世界です。 System.Drawingのバージョンは、次のようなものでなければなりません。

var bmp = new Bitmap(480, 480); 
using (var gr = Graphics.FromImage(bmp)) { 
    gr.Clear(Color.White); 
    TextRenderer.DrawText(gr, textBox1.Text, this.Font, 
     new Rectangle(0, 0, bmp.Width, bmp.Height), 
     Color.Black, Color.White, 
     TextFormatFlags.WordBreak | TextFormatFlags.Left); 
} 
if (pictureBox1.Image != null) pictureBox1.Image.Dispose(); 
pictureBox1.Image = bmp; 

フォームの画像ボックスで推測しました。

関連する問題