簡體   English   中英

C#Graphics.DrawString和Graphics.ScaleTransform沖突?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM