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