C#中使用DrawString绘制文本时怎样使文本居中或右对齐

sahdolla 2014-01-17 01:04:15

asp.net C#中使用DrawString绘制文本时怎样使文本居中或右对齐


string _FontName = "UKK TZA1";
int _FontSize = 30;
string txt = TextBox1.Text;
txt = HtmlCode(TextBox1.Text);
string _ShowName = txt;

Bitmap objBitmap = null;
Graphics g = null;

Font stringFont = new Font(_FontName, _FontSize, FontStyle.Bold);
//StringFormat stringFormat = new StringFormat();
//stringFormat.FormatFlags = StringFormatFlags.NoWrap;
//stringFormat.Alignment = StringAlignment.Center;
try
{
StringFormat format = new StringFormat(StringFormatFlags.DirectionRightToLeft);

objBitmap = new Bitmap(1, 1);
g = Graphics.FromImage(objBitmap);
SizeF stringSize = g.MeasureString(_ShowName, stringFont, 500, format);
int nWidth = (int)stringSize.Width;
int nHeight = (int)stringSize.Height;

g.Dispose();
objBitmap.Dispose();

objBitmap = new Bitmap(nWidth, nHeight);
g = Graphics.FromImage(objBitmap);
g.FillRectangle(new SolidBrush(Color.LightSkyBlue), new Rectangle(0, 0, nWidth, nHeight));
g.TextRenderingHint = TextRenderingHint.AntiAlias;
g.DrawString(_ShowName, stringFont, new SolidBrush(Color.Black), new PointF(0, 0), format);
objBitmap.Save(@"d:\test.gif", ImageFormat.Gif);
}
catch (Exception ee)
{
Response.Write(ee.ToString());
}
finally
{
if (null != g) g.Dispose();
if (null != objBitmap) objBitmap.Dispose();
Response.End();
}


这是我的代码,正常运行,但结果绘出来的文字总是 左对齐,有什么办法使文字右对齐或居中?
...全文
5511 点赞 收藏 8
写回复
8 条回复
dylike 2014年01月18日
除使用上述对齐方式外 g.DrawString(_ShowName, stringFont, new SolidBrush(Color.Black), new PointF(0, 0), format); 红字部分要使用矩形,比如替换成new rectangle(0,0,背景图.width,背景图.height) 这使得StringFormat限定在这个矩形内.
回复 点赞
卧_槽 2014年01月17日
你需要熟读msdn
回复 点赞
sahdolla 2014年01月17日
引用 2 楼 gomoku 的回复:
StringFormat.LineAlignment = StringAlignment.Center; 水平对齐 = 居中 StringAlignment.Far; 对右
这样设置的话图片上没有字母了,只显示背景颜色。
回复 点赞
gomoku 2014年01月17日
Point.Empty, 或new Point(0,0)
回复 点赞
sahdolla 2014年01月17日
引用 3 楼 gomoku 的回复:

format.LineAlignment = StringAlignment.Center;  // 更正: 垂直居中
format.Alignment = StringAlignment.Center;      // 水平居中

RectangleF 排版框 = new Rectangle(Point.Zero, new Size(nWidth, nHeight));
g.DrawString(_ShowName, stringFont, Brushes.Black, 排版框, format);
出现了一个错误提示:Point.Zero, ponit不包含zero的定义。
回复 点赞
gomoku 2014年01月17日

format.LineAlignment = StringAlignment.Center;  // 更正: 垂直居中
format.Alignment = StringAlignment.Center;      // 水平居中

RectangleF 排版框 = new Rectangle(Point.Zero, new Size(nWidth, nHeight));
g.DrawString(_ShowName, stringFont, Brushes.Black, 排版框, format);
回复 点赞
gomoku 2014年01月17日
StringFormat.LineAlignment = StringAlignment.Center; 水平对齐 = 居中 StringAlignment.Far; 对右
回复 点赞
Regan-lin 2014年01月17日
http://bbs.csdn.net/topics/300201991
回复 点赞
发动态
发帖子
C#
创建于2007-09-28

8.5w+

社区成员

64.0w+

社区内容

.NET技术 C#
社区公告
暂无公告