wxpython图形编程_wxpython 图像编程
1)目前遇到一個問題,就是wxpython顯示一個圖片,然后可以在圖片上畫矩形,點,line,circle and so
on,最后保存矩形的坐標.但是現在可以在屏幕上畫矩形,無法在圖片上做標記,我反思的原因是:如果要畫圖型,一定要創建一個dc對象,不管是memorydc
or clientdc,這個對象都是以整個屏幕為基礎的。而如果要顯示一張圖片的話,一定是要把圖片轉換成bitmap類型,然后再轉成靜態bitmap,也就是staticbitmap類型,和一個靜態文本類似,staticbitmap存儲的是每一個像素的坐標和像素值,相當于一個數組。
總結來講,就是覺得wxpython 的
dc的功能或許是自己還沒有理解,或許是根本沒考慮到動態做label,覺得dc無法實現在一個靜態文件上動態畫圖。?
目前整個邏輯我想不通,目前還沒有實現,在stackoverflow上搜了一下,baidu
so了一下,也沒有人解釋。mark一下,dc的概念。?
dc
:要在屏幕上繪畫,我們要用到一個名為device?context(設備上下文)的wxPython對象。設備上下文代表抽象的設備,它對于所有的設備有一套公用的繪畫方法
(1)在圖片上畫好矩形或者文本,然后將圖片顯示出來??
注意:MemoryDC works on a Bitmap, not a StaticBitmap
control.?
http://stackoverflow.com/questions/20287152/wxpython-draw-text-onto-existing-bitmap-or-image?
代碼如下:
bitmap = wx.Bitmap(location)
dc = wx.MemoryDC(bitmap)
text = 'whatever'
w, h = dc.GetSize()
tw, th = dc.GetTextExtent(text)
dc.DrawText(text, (w - tw) / 2, (h - th) / 2) #display
text in center del dc control = wx.StaticBitmap(self, -1,
bitmap)?
(2)wx.MemoryDC:用于繪制圖形到內存中的一個位圖中,此時不被顯示。然后你可以選擇該位圖,并使用wx.DC.Blit()方法來把這個位圖繪畫到一個窗口中。?
http://stackoverflow.com/questions/11786103/wxpython-drawing-on-a-staticbitmap?
def Draw(self, e):
img =
wx.Image("./poster/Test2.png",
wx.BITMAP_TYPE_ANY)
bit =
wx.EmptyBitmap(517,524)
imgBit =
wx.BitmapFromImage(img)
dc =
wx.MemoryDC(imgBit)
dc.SetPen(wx.Pen(wx.RED,
1))
dc.DrawLines(((83, 375),
(83, 42), (120, 42), (120,375), (83,375)))
dc.SelectObject(wx.NullBitmap)# I didn't know I had to deselect the
DC self.imageCtrl.SetBitmap(imgBit)
?imgBit.SaveFile("bit.bmp",
wx.BITMAP_TYPE_BMP)
我已經知道了需要對圖片做什么操作,在不顯示圖片的情況下預定義操作,然后保存圖片,圖片上有相應的矩形。?
(3)wxmemory兩個主要函數:dc=wxmemory()
dc.SelectObject(self,?bitmap)?
http://wxpython.org/docs/api/wx.MemoryDC-class.html
(4)給panel控件設置一個backgroundimage?
#coding:utf-8
import wx
#導入wxformbuilder生成的代碼
import BgDemo
class Main(wx.App):
def __init__(self,
redirect=False, filename=None):
wx.App.__init__(self, redirect,
filename)
dlg = BgDemo.MyFrame(None)
dlg.m_panel1.Bind(wx.EVT_ERASE_BACKGROUND,
self.OnEraseBackground)
dlg.Show()
def
OnEraseBackground(self, evt):
dc = evt.GetDC()
if not dc:
dc =
wx.ClientDC(self)
rect =
self.GetUpdateRegion().GetBox()
dc.SetClippingRect(rect)
dc.Clear()
bmp = wx.Bitmap("Sunset.jpg")
dc.DrawBitmap(bmp, 0, 0)
from:http://www.111cn.net/phper/python/59761.htm
(5)?
?
總結
以上是生活随笔為你收集整理的wxpython图形编程_wxpython 图像编程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python define functi
- 下一篇: map 循环_被问到Spring循环依赖