c# - 在位图上绘制旋转一定角度的线

标签 c# .net bitmap gdi

我在下面的代码中从 png 图像的中心到顶部画了一条线:

    private string ProcessImage(string fileIn)
    {
        var sourceImage = System.Drawing.Image.FromFile(fileIn);
        var fileName = Path.GetFileName(fileIn);
        var finalPath = Server.MapPath(@"~/Output/" + fileName);

        int x = sourceImage.Width / 2;
        int y = sourceImage.Height / 2;
        using (var g = Graphics.FromImage(sourceImage))
        { 
            g.DrawLine(new Pen(Color.Black, (float)5), new Point(x, 0), new Point(x, y));
        }
        sourceImage.Save(finalPath);

        return @"~/Output/" + fileName;
    }

这很好用,我有一条与图像中心成 90 度角的线。 现在我需要的不是 90 度垂直线,我想接受用户输入的度数。如果用户输入 45 度,则应在距 png 图像中心 45 度的位置绘制线。

请指引我正确的方向。

谢谢

最佳答案

假设您在 float angle 中有所需的角度,您需要做的就是在画线之前插入这三条线:

    g.TranslateTransform(x, y);   // move the origin to the rotation point 
    g.RotateTransform(angle);     // rotate
    g.TranslateTransform(-x, -y); // move back

    g.DrawLine(new Pen(Color.Black, (float)5), new Point(x, 0), new Point(x, y));

如果你想在没有旋转的情况下绘制更多东西调用 g.ResetTranform() !

关于c# - 在位图上绘制旋转一定角度的线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36015098/

相关文章:

c# - QR码网络摄像头扫描仪c#

c# - 我可以编写一个可以在继承的子项中覆盖的通用方法签名吗?

.net - 与 IP 地址和身份验证相关的 Twitter 错误

c# - 如何处理这种竞争条件?

android - 空对象引用上的 Bitmap.getWidth()'

c - RLE算法应用于bmp文件

android - 如何更改位图中某些像素的颜色android

c# - 为什么在 using 应该表现得像 try/catch/finally 时却抛出异常?

c# - 为 Web API Controller 创建 MVC Controller 代理

c# - System.Diagnostic 是否通过查询 WMI 或其他方式获取其数据?