ユーザーがグラフ上のスポットをクリックしたときに、画像の上に長方形を描画しようとしています。
さまざまなグラフをスクロールするために、staticBitmap を使用しています。残念ながら、DC での試みはほぼすべて失敗しています。PaintDC と BufferedDC の両方で、無限ループが発生したり、描画が画像の背後に置かれたりすることがあります。ClientDC には、描いたボックスが表示されますが、サイズを変更すると消えます。画像だけをファイルに保存すると、MemoryDC を使用して図面を作成できましたが、staticBitmap に配置できませんでした。
私はこの問題に約 1 週間を費やし、非常に多くの異なるチュートリアルやフォーラムを読んで、この同じ問題を見つけようとしました。この問題を抱えている人は他にいないような気がします。
最も機能する 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 に配置され、何らかの理由で描画が画像の背後にあります。そのため、サイズを変更すると、ComboBoxes は画像の一部を消去し、ウィンドウのサイズを変更して画像を覆うと、その部分が消去されます。ウィンドウのサイズを元に戻すと、描画は残っていますが、画像は消去されています。ここに私が持っているものがあります:
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))
self.imageCtrl.Bind(wx.EVT_PAINT, self.OnPaint)
def OnPaint(self, e):
print "OnPaint Triggered"
dc = wx.PaintDC(self.imageCtrl)
dc.Clear()
dc.SetPen(wx.RED_PEN)
dc.DrawLines(((100, 200), (100, 100), (200, 100), (200,200), (100,200)))
MemoryDC については、EmptyBitmap をすべて単独で読み込み、描画してから、staticBitmap に配置しようとしました。空白の灰色の画面が表示されました。EmptyBitmap に描画しなかった場合は、通常の黒になります。描画してもファイルに保存したのですが、アプリケーション内で灰色の画面が表示されました。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)
私は途方に暮れています。どんなアドバイスでも大歓迎です!