C# 带系统的大纲文本。图纸?

C# 带系统的大纲文本。图纸?,c#,asp.net-mvc-2,graphics,system.drawing,C#,Asp.net Mvc 2,Graphics,System.drawing,我有以下代码。有没有一种简单的方法可以给我正在写的课文提纲 var imageEncoder = Encoder.Quality; var imageEncoderParameters = new EncoderParameters(1); imageEncoderParameters.Param[0] = new EncoderParameter(imageEncoder, 100L); var productImage = GetImageFromByteArray(myViewM

我有以下代码。有没有一种简单的方法可以给我正在写的课文提纲

 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);

对。使用以下调用序列代替DrawString:

  • (创建一个空的
    GraphicsPath
  • (现在,
    GraphicsPath
    对象表示文本的轮廓)
  • (使用所需的任何
    笔绘制轮廓)
如果需要将
GraphicsPath.AddString
Graphics.DrawString
一起使用,则需要转换字体大小,因为
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

非常感谢您的回复,但我似乎无法让它发挥作用。我不确定这些方法使用哪些重载。我从当前程序中提取的唯一一行是graphics.DrawString()行吗?谢谢你提供的信息,我照你说的做了。。。但我当然意识到没有反走样,所以文本看起来很糟糕(还不知道该怎么办。@QuinxyvonBesiex:我总是设置
g.InterpolationMode=InterpolationMode.High;
g.SmoothingMode=SmoothingMode.HighQuality;
g.TextRenderingHint=TextRenderingHint.AntiAliasGridFit;
g.CompositingQuality=CompositingQuality;
。其中一个controls线条和形状的抗锯齿。@Timwi,谢谢!我最终按照你所说的做了一些事情,但我不理解的超关键部分是,我在一个图形对象上创建文本,该对象上已经有了文本应该覆盖的图像,所以我想这是我的主要问题。然后我修改了d我的代码使用单独的图像/图形上下文,然后在渲染后将文本复制回图像。现在一切正常!再次感谢。