嘿,当用户单击图形上的某个点时,我正在尝试在图像的顶部绘制一个矩形。在
为了滚动浏览不同的图形,我使用了静态位图。不幸的是,几乎每次使用DCs的尝试都失败了。PaintDC和BufferedDC有时会导致出现无限循环,而其他时候则会将绘图置于图像后面。ClientDC显示了我绘制的框,但当我调整大小时它会消失。当我只将图像保存到一个文件中时,使用MemoryDC创建绘图是有效的,但未能放入staticBitmap。在
我花了大约一周的时间来研究这个问题,阅读了很多不同的教程和论坛,试图找到同样的问题。我觉得没有其他人有这个问题。在
最有效的一个,ClientDC,必须在调整窗口大小时重新绘制,从而导致闪烁。以下是我为ClientDC准备的:
self.imageCtrl = wx.StaticBitmap(self.thePanel, wx.ID_ANY,
wx.EmptyBitmap(517,524))
def OnGoSelect(self,e):
print "GO"
img = wx.Image("./poster/"+self.picChoice,wx.BITMAP_TYPE_PNG)
self.imageCtrl.SetBitmap(wx.BitmapFromImage(img))
def DrawLine(self):
dc = wx.ClientDC(self.imageCtrl)
dc.SetPen(wx.Pen(wx.BLUE, 2))
dc.DrawLines(((223, 376), (223, 39), (240, 39), (240,376), (223,376)))
当前的PaintDC并没有进入无限循环,而是将图像放置在staticBitmap中,并且图形不知何故位于图像的后面。所以当我调整大小时,组合框会删除图像的一部分,调整窗口大小以覆盖图像,然后删除该部分。当我调整窗口大小时,绘图仍然存在,但图像被删除。以下是我所拥有的:
^{pr2}$对于MemoryDC,我单独加载了一个EmptyBitmap,在其上绘制,然后尝试将其放入staticBitmap。它给了我一个空白的灰色屏幕。如果我没有在空位图上画,结果是正常的,黑色的。甚至当我在它上面画的时候,我把它保存到一个文件中,这个文件本来应该是这样的,但是在应用程序中仍然给了我一个灰色的屏幕。这是MemoryDC代码:
self.imageCtrl = wx.StaticBitmap(self.thePanel, wx.ID_ANY,
wx.EmptyBitmap(517,524))
def Draw(self, e):
print "Draw"
img = wx.Image("./poster/Test2.png", wx.BITMAP_TYPE_ANY)
bit = wx.EmptyBitmap(517,524)
dc = wx.MemoryDC(bit)
dc.SetBackground(wx.Brush(wx.BLACK))
dc.Clear()
dc.SetPen(wx.Pen(wx.RED, 1))
dc.DrawLines(((83, 375), (83, 42), (120, 42), (120,375), (83,375)))
self.imageCtrl.SetBitmap(bit)
bit.SaveFile("bit.bmp", wx.BITMAP_TYPE_BMP)
我束手无策。欢迎任何建议!在
我找到了!在
以前我不知道在使用MemoryDC时,我必须取消选择要绘制的位图。通过传递一个wx.NullBitmap到SelectObject方法。在
以下是MemoryDC的代码:
相关问题 更多 >
编程相关推荐