我已经设置了一个函数来将一个可能被转换的(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,然后每次调用时再次返回,但我不明白 - 因为变换没有应用于源图像。任何人都可以解释为什么会发生这种情况吗?
提前致谢
答案 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()方法变得非常关键,当位图很大时,这些副本会匆忙地吞噬内存。请注意,您的代码段中存在错误。