[英]C# Graphics.DrawString and Graphics.ScaleTransform conflict?
将单位球体投影到平面上时,我还要绘制原始坐标和投影坐标。 由于我从未停止过使用WinForms,因此我使用GDI +绘制图像:
private void btnRender_Click(object sender, EventArgs e)
{
tabMain.SelectedTab = tabRender;
var tangent = new Vector3D(0.0, 0.0, -1.0);
var xsize = 2048;
var ysize = 2048;
var pen = new Pen(Color.Maroon, (float)(1 / xsize));
var font = new Font("Arial", 10);
var brush = new SolidBrush(Color.Black);
var bmp = new Bitmap(xsize, ysize);
using (var g = Graphics.FromImage(bmp)) {
g.TranslateTransform(xsize / 2, ysize / 2);
g.ScaleTransform(xsize, ysize);
foreach (var v in hull.Vertices) {
foreach (var f in v.VoronoiFaces) {
var pts = f.Vertices.Select(v1 => (PointF)Projector.Stereographic(v1, tangent)).ToArray();
g.DrawPolygon(pen, pts);
}
var pt = (PointF)Projector.Stereographic(v.Vertex, tangent);
var str = String.Format("{0}->{1}", v.Vertex, pt);
g.DrawString(str, font, brush, pt);
}
}
picRender.Width = xsize;
picRender.Height = ysize;
picRender.Image = bmp;
}
当我渲染图像时, g.DrawString(str, font, brush, pt);
在屏幕上不画任何东西。 看来g.ScaleTransform(xsize, ysize);
是罪魁祸首,因为当我删除它时,所有文本都会被绘制。 我猜它会放大文本,并且文本会被推离屏幕。 有没有一种方法可以绘制文本,以便不改变其大小,但可以改变其位置? 当我将字体大小除以比例因子时,GDI +会引发异常。
我应该使用自定义坐标变换而不是内置坐标变换吗? 还是应该切换到其他图形库? 哪一个?
是的,您可以绘制文本,以便仅改变位置而不改变大小。 不要使用ScaleTransform。 而是将文本点坐标乘以缩放系数。 或创建一个矩阵并将其相乘。 您描述的异常可能是由于尝试将字体大小设置为0。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.