【问题标题】:Graphics.RotateTransform() does not rotate my pictureGraphics.RotateTransform() 不旋转我的图片
【发布时间】:2012-11-27 17:51:21
【问题描述】:

我对 Graphics.RotateTransfrom() 有问题,代码如下:

    Dim newimage As Bitmap
    newimage = System.Drawing.Image.FromFile("C:\z.jpg")
    Dim gr As Graphics = Graphics.FromImage(newimage)
    Dim myFontLabels As New Font("Arial", 10)
    Dim myBrushLabels As New SolidBrush(Color.Black)
    Dim a As String

    '# last 2 number are X and Y coords.
    gr.DrawString(MaskedTextBox2.Text * 1000 + 250, myFontLabels, myBrushLabels, 1146, 240) 
    gr.DrawString(MaskedTextBox2.Text * 1000, myFontLabels, myBrushLabels, 1146, 290)
    a = Replace(Label26.Text, "[ mm ]", "")

    gr.DrawString(a, myFontLabels, myBrushLabels, 620, 1509)
    a = Replace(Label5.Text, "[ mm ]", "")

    gr.DrawString(a, myFontLabels, myBrushLabels, 624, 548)

    gr.RotateTransform(90.0F)

    gr.DrawString(a, myFontLabels, myBrushLabels, 0, 0)

    PictureBox1.Image = newimage

我不知道为什么,但是我在 pictureBox1 中的图像没有旋转。有人知道解决方案吗?

【问题讨论】:

  • 你能显示图形(gr)对象(我假设它是什么......)和图像(newImage)的初始化代码吗?很难说这里发生了什么......
  • @ T.Fabre Dim newimage As Bitmap newimage = System.Drawing.Image.FromFile("C:\z.jpg") Dim gr As Graphics = Graphics.FromImage(newimage) Dim myFontLabels As New Font("Arial", 10) 将 myBrushLabels 调暗为新的 SolidBrush(Color.Black) 调暗为字符串

标签: vb.net rotation transform picturebox


【解决方案1】:

目前的问题是 RotateTransform 方法不适用于现有图像。

相反,它适用于图形对象的变换矩阵。基本上,变换矩阵会修改用于添加新项目的坐标系。

尝试以下方法:

    Dim gfx = Graphics.FromImage(PictureBox1.Image)

    gfx.DrawString("Test", Me.Font, Brushes.Red, New PointF(10, 10))
    gfx.RotateTransform(45)
    gfx.DrawString("Rotate", Me.Font, Brushes.Red, New PointF(10, 10))

第一个字符串是正常绘制的,而第二个是旋转绘制的。

所以你需要做的是创建一个新的图形对象,应用你的旋转,将你的源图像绘制到图形上(graphics.DrawImage),然后绘制你的所有文本:

    ' Easy way to create a graphisc object
    Dim gfx = Graphics.FromImage(PictureBox1.Image)

    gfx.Clear(Color.Black)
    gfx.RotateTransform(90) ' Rotate by 90°

    gfx.DrawImage(Image.FromFile("whatever.jpg"), New PointF(0, 0))
    gfx.DrawString("Test", Me.Font, Brushes.Red, New PointF(10, 10))
    gfx.DrawString("Rotate", Me.Font, Brushes.Red, New PointF(10, 10))

但是要注意旋转,你会发现你需要改变你绘制图像的坐标(或者改变图形的RenderingOrigin属性,将它设置为图像的中心可以更容易处理旋转) , 否则您的图片将不可见(它将被绘制,但在图形的可见部分之外)。

希望有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-27
    相关资源
    最近更新 更多