【问题标题】:rotated image in a picturebox shows rotated and original form图片框中的旋转图像显示旋转的原始形式
【发布时间】:2019-12-11 19:34:13
【问题描述】:

我是使用 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

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

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

【问题讨论】:

  • 先清除图形。
  • 不要使用 PictureBox.Image 属性。将该 Image 分配给 Bitmap 对象并使用Graphics.DrawImage() 将其绘制在 PictureBox 的表面上。在这种情况下,您可以尝试Matrix.RotateAt() 方法。

标签: vb.net winforms picturebox


【解决方案1】:

详细地说,如果您将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 事件处理程序中设置。

【讨论】:

  • 图片和画布的大小也要考虑。要模拟 PictureBox 的拉伸模式,允许指定源矩形和目标矩形的DrawImage() 重载就足够了。对于缩放模式,有一个通用方法here
猜你喜欢
  • 2011-05-07
  • 1970-01-01
  • 2012-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多