我的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中的图像没有旋转。有人知道解决方案吗?
答案 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属性,将其设置为图像的中心,以便更容易处理旋转) ,否则你的图片将不可见(它将被绘制,但是在图形的可见部分之外)。
希望有所帮助