图片框中的旋转图像显示旋转和原始形式

rotated image in a picturebox shows rotated and original form

我是使用 VB.Net 框架 4.7.2 Winforms 的初学者。 我试图在我的应用程序中旋转一架飞机的图像,但它显示了旋转后的图像和原始图像。

左图不旋转,右图旋转-25°

    Private Sub Rotation(sender As Object, e As PaintEventArgs) Handles PictureBox1.Paint
        With e.Graphics
            .TranslateTransform(PictureBox1.Width \ 2, PictureBox1.Height \ 2)
            .RotateTransform(dgr)
            .DrawImage(PictureBox1.Image, (-PictureBox1.Width \ 2), (-PictureBox1.Height \ 2))
        End With
    End Sub

这是我用来旋转图像的代码

我只想显示旋转后的图像。 提前致谢。

具体来说,如果您将一个 Image 对象分配给 PictureBoxImage 属性,那么控件将在每个时间绘制 Image 自身时间。如果您随后在 Paint 事件处理程序中自己绘制相同的 Image 对象,那么您当然会看到两个图像。

基本上,不要将任何内容分配给控件的 Image 属性,而是分配给您自己的 Image 字段并在 Paint 事件处理程序中使用它:

Private myImage As Image

Private Sub Rotation(sender As Object, e As PaintEventArgs) Handles PictureBox1.Paint
    With e.Graphics
        .TranslateTransform(PictureBox1.Width \ 2, PictureBox1.Height \ 2)
        .RotateTransform(dgr)
        .DrawImage(myImage, (-PictureBox1.Width \ 2), (-PictureBox1.Height \ 2))
    End With
End Sub

您可以在当前设置 PictureBox1.Image 的代码中设置 myImage,或者如果您当前在设计器中进行设置,则可以在 Load 事件处理程序中设置它。