首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# Graphics.DrawString和Graphics.ScaleTransform冲突?

C# Graphics.DrawString和Graphics.ScaleTransform冲突?
EN

Stack Overflow用户
提问于 2014-06-29 10:47:48
回答 1查看 1.4K关注 0票数 0

当把一个单位球投射到平面上时,我也想画出原始的和投影的坐标。由于我从未停止使用WinForms,所以我使用GDI+绘制图像:

代码语言:javascript
复制
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+会抛出一个异常。

我应该使用自定义坐标转换而不是内置坐标转换吗?或者我应该切换到另一个图形库?哪个?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-10 23:18:31

是的,您可以绘制文本,以便只转换位置,而不是大小。不要使用ScaleTransform。相反,将文本点坐标乘以缩放因子。或者创建一个矩阵,然后用它进行乘法。您描述的例外情况可能是试图将字体大小设置为0。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24475349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档