2010-11-17 34 views
12

我有以下代碼。有一種簡單的方法可以對我正在寫的文本進行概述嗎?帶有System.Drawing的輪廓文本?

var imageEncoder = Encoder.Quality; 
var imageEncoderParameters = new EncoderParameters(1); 
imageEncoderParameters.Param[0] = new EncoderParameter(imageEncoder, 100L); 

var productImage = GetImageFromByteArray(myViewModel.ProductImage.DatabaseFile.FileContents); 
var graphics = Graphics.FromImage(productImage); 

var font = new Font("Segoe Script", 24); 
var brush = Brushes.Orange; 

var container = new Rectangle(myViewModel.ContainerX, myViewModel.ContainerY,          myViewModel.ContainerWidth,            myViewModel.ContainerHeight); 

var stringFormat = new StringFormat {Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center}; 

graphics.DrawString(customizationText, font, brush, container, stringFormat); 

回答

23

是的。相反抽繩,使用電話的順序如下:

如果您需要使用GraphicsPath.AddString一起Graphics.DrawString,你需要的字體大小轉換,becau se Graphics.DrawString預計「點大小」,而GraphicsPath.AddString預計「em大小」。轉換公式只是emSize = g.DpiY * pointSize/72

下面是一個代碼示例:

// assuming g is the Graphics object on which you want to draw the text 
GraphicsPath p = new GraphicsPath(); 
p.AddString(
    "My Text String",    // text to draw 
    FontFamily.GenericSansSerif, // or any other font family 
    (int) FontStyle.Regular,  // font style (bold, italic, etc.) 
    g.DpiY * fontSize/72,  // em size 
    new Point(0, 0),    // location where to draw text 
    new StringFormat());   // set options here (e.g. center alignment) 
g.DrawPath(Pens.Black, p); 
// + g.FillPath if you want it filled as well 
+0

感謝這麼多的反應,但我似乎無法得到這個工作。我不確定使用這些方法的重載(s)。我的當前程序中唯一的一行是graphics.DrawString()行嗎? – 2010-11-17 02:28:49

+0

[是](http://meta.stackexchange.com/questions/700/) – Timwi 2010-11-17 02:59:59

+0

感謝這個信息,我只是做了你所說的... 但是我當然意識到這裏沒有反鋸齒文字看起來很糟糕。 :(不知道該怎麼辦呢, – 2013-01-11 08:32:40