2010-11-17 68 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