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我的代码使用单独的图像/图形上下文,然后在渲染后将文本复制回图像。现在一切正常!再次感谢。