gpt4 book ai didi

c# - 使用 C# System.Drawing/Drawstring 将图像调整为图像中的文本

转载 作者:行者123 更新时间:2023-11-30 21:18:58 25 4
gpt4 key购买 nike

我想获取一个字符串和一种指定的字体,并在框中创建一个包含该文本的图形图像,其中框会根据文本调整大小。

我得到了下面的代码,但它在做任何其他事情之前调整了盒子的大小。有什么方法可以调整图像大小以适合文本(我可能需要添加几个像素的小边框)。

另外,如果我想让字符串居中,我也不确定为什么需要传递 x,y 坐标。

  //Sample calls to function below 
renderImage("Hello World", "Arial", 12, "test12.png");
renderImage("Hello", "Arial", 16, "test16.png");
renderImage("Peace Out", "Arial", 24, "test24.png");


static void renderImage(string text, string fontName, string filename, int fontsize)
{

{
System.Drawing.Bitmap objBMP = null;
System.Drawing.Graphics objGraphics = null;
System.Drawing.Font objFont = null;

// Create new image - bitmap
objBMP = new Bitmap(531, 90);

// Create a graphics object to work with from the BMP
objGraphics = System.Drawing.Graphics.FromImage(objBMP);

// Fill the image with background color
objGraphics.Clear(Color.Yellow);

// Set anti-aliasing for text to make it better looking
objGraphics.TextRenderingHint = TextRenderingHint.AntiAlias;

// Configure font to use for text
objFont = new Font(fontName, fontsize, FontStyle.Bold);

// Try StringFormat
StringFormat objStringFormat = new StringFormat();
objStringFormat.Alignment = StringAlignment.Center;
objStringFormat.LineAlignment = StringAlignment.Center;


// Write out the text
objGraphics.DrawString(text, objFont, Brushes.Black, 1, 1, objStringFormat);


// Set the content type and return the image
objBMP.Save(filename, ImageFormat.Png);

}

更新:

根据答案让它工作,但有没有更有效的方法:

static void Main(string[] args)
{
renderImage("Hello World", "Arial", 12, "test12.png");
renderImage("Hello", "Arial", 16, "test16.png");
renderImage("Peace Out", "Arial", 24, "test24.png");
}

static void renderImage(string text, string fontName, int fontSize, string filename)
{

{
System.Drawing.Bitmap objBMP = null;
System.Drawing.Graphics objGraphics = null;
System.Drawing.Bitmap objBMPTemp = null;
System.Drawing.Graphics objGraphicsTemp = null;
System.Drawing.Font objFont = null;

// Configure font to use for text
objFont = new Font(fontName, fontSize, FontStyle.Bold);

// Create new image - bitmap
SizeF objSizeF = new SizeF();
objBMPTemp = new Bitmap(100, 100); // some temp dummy size

// Create a graphics object to work with from the BMP
objGraphicsTemp = System.Drawing.Graphics.FromImage(objBMPTemp);

objSizeF = objGraphicsTemp.MeasureString(text, objFont);
objBMP = new Bitmap((int)objSizeF.Width, (int)objSizeF.Height);
objGraphics = System.Drawing.Graphics.FromImage(objBMP);



// Fill the image with background color
objGraphics.Clear(Color.Yellow);

// Set anti-aliasing for text to make it better looking
objGraphics.TextRenderingHint = TextRenderingHint.AntiAlias;


// Try StringFormat
//StringFormat objStringFormat = new StringFormat();
//objStringFormat.Alignment = StringAlignment.Center;
//objStringFormat.LineAlignment = StringAlignment.Center;
//objStringFormat.FormatFlags



// Write out the text
//objGraphics.DrawRectangle(new Pen(Color.Cyan, 1), 0.0F, 0.0F, objSizeF.Width, objSizeF.Height);
objGraphics.DrawString(text, objFont, Brushes.Black, 1, 1);
//objGraphics.DrawString(text, objFont, Brushes.Black,



// Set the content type and return the image
objBMP.Save(filename, ImageFormat.Png);


// Kill our objects
objFont.Dispose();
objGraphics.Dispose();
objBMP.Dispose();
}

}

最佳答案

您可以使用 Graphics.MeasureString在给定字体和大小的情况下测量字符串的大小。

关于c# - 使用 C# System.Drawing/Drawstring 将图像调整为图像中的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3998646/

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