wxpython图形编程_wxpython 图像编程
1)目前遇到一個(gè)問(wèn)題,就是wxpython顯示一個(gè)圖片,然后可以在圖片上畫(huà)矩形,點(diǎn),line,circle and so
on,最后保存矩形的坐標(biāo).但是現(xiàn)在可以在屏幕上畫(huà)矩形,無(wú)法在圖片上做標(biāo)記,我反思的原因是:如果要畫(huà)圖型,一定要?jiǎng)?chuàng)建一個(gè)dc對(duì)象,不管是memorydc
or clientdc,這個(gè)對(duì)象都是以整個(gè)屏幕為基礎(chǔ)的。而如果要顯示一張圖片的話,一定是要把圖片轉(zhuǎn)換成bitmap類型,然后再轉(zhuǎn)成靜態(tài)bitmap,也就是staticbitmap類型,和一個(gè)靜態(tài)文本類似,staticbitmap存儲(chǔ)的是每一個(gè)像素的坐標(biāo)和像素值,相當(dāng)于一個(gè)數(shù)組。
總結(jié)來(lái)講,就是覺(jué)得wxpython 的
dc的功能或許是自己還沒(méi)有理解,或許是根本沒(méi)考慮到動(dòng)態(tài)做label,覺(jué)得dc無(wú)法實(shí)現(xiàn)在一個(gè)靜態(tài)文件上動(dòng)態(tài)畫(huà)圖。?
目前整個(gè)邏輯我想不通,目前還沒(méi)有實(shí)現(xiàn),在stackoverflow上搜了一下,baidu
so了一下,也沒(méi)有人解釋。mark一下,dc的概念。?
dc
:要在屏幕上繪畫(huà),我們要用到一個(gè)名為device?context(設(shè)備上下文)的wxPython對(duì)象。設(shè)備上下文代表抽象的設(shè)備,它對(duì)于所有的設(shè)備有一套公用的繪畫(huà)方法
(1)在圖片上畫(huà)好矩形或者文本,然后將圖片顯示出來(lái)??
注意: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:用于繪制圖形到內(nèi)存中的一個(gè)位圖中,此時(shí)不被顯示。然后你可以選擇該位圖,并使用wx.DC.Blit()方法來(lái)把這個(gè)位圖繪畫(huà)到一個(gè)窗口中。?
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)
我已經(jīng)知道了需要對(duì)圖片做什么操作,在不顯示圖片的情況下預(yù)定義操作,然后保存圖片,圖片上有相應(yīng)的矩形。?
(3)wxmemory兩個(gè)主要函數(shù):dc=wxmemory()
dc.SelectObject(self,?bitmap)?
http://wxpython.org/docs/api/wx.MemoryDC-class.html
(4)給panel控件設(shè)置一個(gè)backgroundimage?
#coding:utf-8
import wx
#導(dǎo)入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)?
?
總結(jié)
以上是生活随笔為你收集整理的wxpython图形编程_wxpython 图像编程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python define functi
- 下一篇: map 循环_被问到Spring循环依赖