c# Graphics 根据设定宽度(像素或者毫米)来绘制单个文字,求解 Graphics 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://stackoverflow.com/questions/2628725/autofit-label-font-size参考一下~~ /// <summary> /// 根据设置的字体宽度和高度 获取字体大小 /// </summary> /// <param name="s">字符串容器Size</param> /// <param name="P_String">字符串内容</param> /// <param name="sFontName">字体名称</param> /// <returns></returns> public Font GetFont(Size s, string P_String, Font oldFont) { Bitmap _bitmap = new Bitmap(s.Width, s.Height); Graphics _graphics = Graphics.FromImage(_bitmap); float fontsize = 0.1f; for (Size _size = new Size(); _size.Height <= s.Height ; fontsize += 0.1f) { Font font_1 = new Font(oldFont.FontFamily.Name, fontsize); _size = _graphics.MeasureString(P_String, font_1).ToSize(); } _graphics.Dispose(); if (oldFont.Bold) { return new Font(oldFont.FontFamily.Name, fontsize - 0.2f, FontStyle.Bold); } else { return new Font(oldFont.FontFamily.Name, fontsize - 0.2f); } }这是我的代码, 原理是根据设定的高度去对比文字的size,直到相同时 获取此时的字体大小,然后在进行 m.Scale((float)(CommonSettings.MillimeterConvertPixel(KuanDu)) / (float)(CommonSettings.MillimeterConvertPixel(GaoDu)), 1.0f, MatrixOrder.Append);缩放, 这个过程我把像素转换成了毫米,dpi是300算的,打印出来测试并不是我预测的毫米跨度啊,求解??比如我设置的5毫米,打印出来可鞥只有4,跟缩放有关系? Graphics制作实心画笔绘制单个文字 protected void Page_Load(object sender, EventArgs e) { Bitmap bitmap = new Bitmap(300, 150); Graphics g = Graphics.FromImage(bitmap); g.Clear(Color.YellowGreen); Font font1 = new Font("宋体", 12); //设置字体类型和大小 Brush brush = new SolidBrush(Color.Blue); //设置画刷颜色 Pen myPen = new Pen(Color.Blue, 5); //创建画笔对象 g.DrawString("GDI+绘制绘制实心画笔", font1, brush, 80, 5); SolidBrush mySolidBrush = new SolidBrush(Color.Green); g.FillEllipse(mySolidBrush, 20, 20, 220, 120); System.IO.MemoryStream ms = new System.IO.MemoryStream(); bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Gif); Response.ClearContent(); Response.ContentType = "image/Gif"; Response.BinaryWrite(ms.ToArray()); } 显示出来的宽、高除了与像素有关,还与DPI有关。同样像素的图片在不同的DPI显示和打印出来的大小会不一样,玩过PS的都知道Form.AutoScaleDimensions 设计时的屏幕DPI对应的像素Form.CurrentAutoScaleDimensions 运行的时候的DPI对应的像素在Winform中font的默认单位是Point(1/72英寸),正是LZ想样的Graphic.MeasureString(str, Font实例) 得到某种字体的显示尺寸 不过这样频繁的去检测并不好,还是虚心接受版主的建议,把大致的转换比例算出来 创建宽高各100的bitmap,把文字绘制上去,然后根据你的需求缩放,把缩放后的图片绘制到你需要的地方.这么小的像素如果文字不是很多 会很快(半个屏幕应该不会卡). 报表问题 asp.net 如何实现伪静态 数据列表分页显示怎么做???? repeat布局小问题 求treeView中的FindNode的用 舒尔特表(问题出在哪里?) 比较难的数据梆定问题 如何获得页面所有Session信息 页面切换效果,ASPX里不可以用?HTML页面可以用 将DataGrid控件内容导出到Word时遇到的问题 看了传智播客的视频才明白原来asp.net是这样开发的 模拟域账户登录
/// 根据设置的字体宽度和高度 获取字体大小
/// </summary>
/// <param name="s">字符串容器Size</param>
/// <param name="P_String">字符串内容</param>
/// <param name="sFontName">字体名称</param>
/// <returns></returns>
public Font GetFont(Size s, string P_String, Font oldFont)
{
Bitmap _bitmap = new Bitmap(s.Width, s.Height);
Graphics _graphics = Graphics.FromImage(_bitmap);
float fontsize = 0.1f;
for (Size _size = new Size(); _size.Height <= s.Height ; fontsize += 0.1f)
{
Font font_1 = new Font(oldFont.FontFamily.Name, fontsize); _size = _graphics.MeasureString(P_String, font_1).ToSize();
}
_graphics.Dispose();
if (oldFont.Bold)
{
return new Font(oldFont.FontFamily.Name, fontsize - 0.2f, FontStyle.Bold);
}
else
{
return new Font(oldFont.FontFamily.Name, fontsize - 0.2f);
}
}这是我的代码, 原理是根据设定的高度去对比文字的size,直到相同时 获取此时的字体大小,然后在进行
m.Scale((float)(CommonSettings.MillimeterConvertPixel(KuanDu)) / (float)(CommonSettings.MillimeterConvertPixel(GaoDu)), 1.0f, MatrixOrder.Append);
缩放, 这个过程我把像素转换成了毫米,dpi是300算的,打印出来测试并不是我预测的毫米跨度啊,求解??
比如我设置的5毫米,打印出来可鞥只有4,跟缩放有关系?
protected void Page_Load(object sender, EventArgs e)
{
Bitmap bitmap = new Bitmap(300, 150);
Graphics g = Graphics.FromImage(bitmap);
g.Clear(Color.YellowGreen);
Font font1 = new Font("宋体", 12); //设置字体类型和大小
Brush brush = new SolidBrush(Color.Blue); //设置画刷颜色
Pen myPen = new Pen(Color.Blue, 5); //创建画笔对象
g.DrawString("GDI+绘制绘制实心画笔", font1, brush, 80, 5);
SolidBrush mySolidBrush = new SolidBrush(Color.Green);
g.FillEllipse(mySolidBrush, 20, 20, 220, 120);
System.IO.MemoryStream ms = new System.IO.MemoryStream();
bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
Response.ClearContent();
Response.ContentType = "image/Gif";
Response.BinaryWrite(ms.ToArray());
}
同样像素的图片在不同的DPI显示和打印出来的大小会不一样,玩过PS的都知道Form.AutoScaleDimensions 设计时的屏幕DPI对应的像素
Form.CurrentAutoScaleDimensions 运行的时候的DPI对应的像素
在Winform中font的默认单位是Point(1/72英寸),正是LZ想样的
Graphic.MeasureString(str, Font实例) 得到某种字体的显示尺寸 不过这样频繁的去检测并不好,还是虚心接受版主的建议,把大致的转换比例算出来