C# 从右角开始旋转 DrawString

标签 c# graphics rotation drawstring rotatetransform

我试图在图像上从右上角向左下角绘制文本。我的代码弄乱了拉绳的定位。到目前为止,这段代码是这样绘制的,但我需要帮助在这些红线之间绘制文本。

enter image description here

string img_src = "F:\\blank_imge.jpg";
    System.Drawing.Image selected_img = System.Drawing.Image.FromFile(img_src);
    using(Graphics gr = Graphics.FromImage(selected_img))
    {
        Font font = new Font("Arial", 2.0f);
        int x = selected_img.Width;
        int y = 0;
        for (int b = 1; b <= 5; b++)
        {
             GraphicsState state = gr.Save();
             gr.ResetTransform();
             int opacity = 35;
             string txt = "watermark";
             using (Brush brush = new SolidBrush(Color.FromArgb(opacity, 255, 255, 255)))
             {
                   SizeF textSize = gr.MeasureString("watermark", font);
                   gr.RotateTransform(45);
                   gr.SmoothingMode = SmoothingMode.HighQuality;
                   gr.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;
                   gr.DrawString(txt, font, brush, new PointF(x - textSize.Width, y));
             }

             y = y + 25;
             gr.Restore(state);
        }    
       selected_img.Save("F:\\watermarked.jpg");
    }

最佳答案

我会更像这样写。那里有很多小变化……仔细看!

        using (Graphics gr = Graphics.FromImage(selected_img))
        {
            int y = -50;
            int opacity = 127; // 0 to 255
            string txt = "watermark";
            int x = selected_img.Width;
            GraphicsState state = gr.Save();
            gr.ResetTransform();
            gr.TranslateTransform(selected_img.Width / 2, selected_img.Height / 2);
            gr.RotateTransform(45);
            gr.SmoothingMode = SmoothingMode.HighQuality;
            gr.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;
            using (Font font = new Font("Arial", 14.0f))
            {
                SizeF textSize = gr.MeasureString(txt, font);
                using (Brush brush = new SolidBrush(Color.FromArgb(opacity, Color.DarkGray)))
                {
                    for (int b = 1; b <= 5; b++, y += 25)
                    {
                        gr.DrawString(txt, font, brush, new PointF(-(textSize.Width / 2), y));
                    }
                }
            }
            gr.Restore(state);
        }

关于C# 从右角开始旋转 DrawString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54594396/

相关文章:

c# - 为 Entity Framework 创建动态表达式

java - 从行数未知的文本创建图像

java - Java 的paintComponent 中没有显示任何内容。我该如何解决?

c++ - OpenGL Basic IBO/VBO 不工作

jquery ui 可调整大小 : resizing the rotated objects

c++ - OpenGL 3.3 - 2 个三角形的不同旋转

python - 在 Python 中围绕指定原点旋转二维图像

c# - Stackpanel 中的用户控件失去焦点

c# - Entity Framework Core 的 MySQL 排序规则问题

c# - 删除所有目录权限