gpt4 book ai didi

.net - 在 .Net 中用笔划在图像上绘制文本

转载 作者:行者123 更新时间:2023-12-04 00:48:40 25 4
gpt4 key购买 nike

我目前正在使用 .Net 中的 System.Drawing.Graphics.DrawString() 方法在图像上绘制文本,然后将其保存到新文件中:

// define image file paths
string sourceImagePath = HttpContext.Current.Server.MapPath("~/img/sourceImage.jpg");
string destinationImagePath = HttpContext.Current.Server.MapPath("~/img/") + "finalImage.jpg";

// create new graphic to draw to
Bitmap bm = new Bitmap(200, 200);
Graphics gr = Graphics.FromImage(bm);

// open and draw image into new graphic
System.Drawing.Image sourceImage = System.Drawing.Image.FromFile(sourceImagePath, true);
gr.DrawImage(sourceImage, 0, 0);
sourceImage.Dispose();

// write "my text" on center of image
gr.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
StringFormat sf = new StringFormat();
sf.Alignment = StringAlignment.Center;

PrivateFontCollection fontCollection = new PrivateFontCollection();
fontCollection.AddFontFile(HttpContext.Current.Server.MapPath("~/fonts/HelveticaNeueLTStd-BlkCn.ttf"));
// prototype (1)
gr.DrawString("my text", new Font(fontCollection.Families[0], 14, FontStyle.Bold), new SolidBrush(Color.FromArgb(255, 255, 255)), 100, 0, sf);
fontCollection.Dispose();

// save new image
if (File.Exists(destinationImagePath))
{
File.Delete(destinationImagePath);
}
bm.Save(destinationImagePath);
bm.Dispose();
gr.Dispose();

这种在图像上添加文本的方法不提供(据我所知)向文本添加笔划的方法。例如,我真正需要做的是在图像上书写的文本中添加某种颜色的 2px 描边。

如何使用 .Net Framework <= v3.5 完成此操作?

最佳答案

所有文本都有strokes .

如果您所说的笔画是指轮廓,那么您可以创建一个 GraphicsPath 并使用 AddString 添加字符串,然后您可以使用 DrawPath 而不是 msdn 示例中使用的 FillPath 勾勒出路径。

    private void Form1_Paint(object sender, PaintEventArgs e)
{
// Create a GraphicsPath object.
GraphicsPath myPath = new GraphicsPath();

// Set up all the string parameters.
string stringText = "Sample Text";
FontFamily family = new FontFamily("Arial");
int fontStyle = (int)FontStyle.Italic;
int emSize = 96;
Point origin = new Point(20, 20);
StringFormat format = StringFormat.GenericDefault;

// Add the string to the path.
myPath.AddString(stringText,
family,
fontStyle,
emSize,
origin,
format);

//Draw the path to the screen.
e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
e.Graphics.FillPath(Brushes.BlanchedAlmond, myPath);
e.Graphics.DrawPath(new Pen(Brushes.Azure, 2), myPath);
}

如果用笔划表示 strike , 然后使用 Strikeout字体样式。

如果用笔划表示 serif , 然后使用不同的字体。

关于.net - 在 .Net 中用笔划在图像上绘制文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2008117/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com