Graphics.RotateTransform()不会旋转我的图片

时间:2012-11-27 07:34:37

标签: vb.net rotation transform picturebox

我的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中的图像没有旋转。有人知道解决方案吗?

1 个答案:

答案 0 :(得分:0)

目前的问题是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属性,将其设置为图像的中心,以便更容易处理旋转) ,否则你的图片将不可见(它将被绘制,但是在图形的可见部分之外)。

希望有所帮助