VB.net GDI rotateflip发生在每一帧

时间:2014-07-19 12:38:44

标签: vb.net gdi+ gdi

我已经设置了一个函数来将一个可能被转换的(X翻转)图像返回到绘图类,但我发现图像每帧都会翻转。我正在使用的代码是:

Public Function getImage() As Image
    Dim returnedImage As Image

    Select Case pictureCounter
        Case 1
            returnedImage = pic1
        Case 2
            returnedImage = pic2
        Case 3
            returnedImage = pic3
        Case 4
            returnedImage = pic4
        Case 5
            returnedImage = pic5
        Case 6
            returnedImage = pic6
        Case 7
            returnedImage = pic7
        Case 8
            returnedImage = pic8
        Case 9
            returnedImage = pic9
        Case Else
            returnedImage = pic1
    End Select

    Call returnedImage.RotateFlip(transform)
    Return returnedImage
    returnedImage.Dispose()
End Function

如果transform = RotateFlipType.RotateNoneFlipX,那么它看起来像是图像合适。我认为它翻转X,然后每次调用时再次返回,但我不明白 - 因为变换没有应用于源图像。任何人都可以解释为什么会发生这种情况吗?

提前致谢

1 个答案:

答案 0 :(得分:2)

  

因为转换未应用于源图像

这是核心错误,应用于源图像。 Image.FlipRotate()方法不会返回新图像。你没有看到PictureBox中的图像变化而感到困惑。那是因为你没有告诉PictureBox控件你修改了图像,它不能自己解决,因为Image类没有任何类型的"改变"事件。你必须调用PictureBox.Invalidate()方法自己告诉它。

在调用此方法一次后,通过最小化和恢复窗口很容易看到。这迫使控件重新绘制自己,你现在可以看到翻转的图像。

如果您不想修改原始图像,那么您必须复制该图像:

Public Function getImage() As Image
    Dim returnedImage As Image

    Select Case pictureCounter
       '' etc...
    End Select

    Dim copy = new Bitmap(returnedImage)
    copy.RotateFlip(transform)
    Return copy
End Function

现在注意Dispose()方法变得非常关键,当位图很大时,这些副本会匆忙地吞噬内存。请注意,您的代码段中存在错误。