반응형

wxpython -- 화면캡쳐후 저장하기


환경 : windows 7 64bit, wxpython 3.0.1.1, python 2.7.9 64bit


참고 : http://wiki.wxpython.org/WorkingWithImages



*** dc.GetAsBitmap() 는 사용못함 !!!!  (Robin 아직 구현안함???)


작업순서:  

1. ScreenDC 로 화면 저장.

2. MemoryDC 만들기. --- bitmap 을 가지고 작업하는 DC

3. 저장한 ScreenDC 크기의 빈 bitmap 만들기. -- wx.EmptyBitmap

4. MemoryDC에서 bitmap 선택하여, 작업가능하게 한다.(작업시작.)

5. MemoryDC 에 그리기..또는 ScreenDC 복사하기.. --- 결과는 bitmap 에 그려진다...

6. 작업종료후, MemoryDC에서 bitmap 선택해제함. -- MemoryDC.SelectObject(wx.NullBitmap)

7. 선택해제된 bitmap 을 파일로 저장함... 




# -*- coding: utf-8 -*-
import wx
import time
class Example(wx.Frame):
def __init__(self, parent, title):
super(Example, self).__init__(parent, title=title, size=(250, 150))
self.bmp = None
self.timeOn = True # 캡쳐사진에 시간표시.
pan = wx.Panel(self)
vbox = wx.BoxSizer(wx.VERTICAL)
btn1 = wx.Button(pan,label = u'캡쳐',size=(100,30))
vbox.Add(btn1)
btn2 = wx.Button(pan,label = 'save')
vbox.Add(btn2)
pan.SetSizer(vbox)
btn1.Bind(wx.EVT_BUTTON, self.onbtn1)
btn2.Bind(wx.EVT_BUTTON, self.onbtn2)
self.Centre()
self.Show()
def onbtn1(self,event):
# print time.ctime() # 현재시간
dc = wx.ScreenDC()
# dc= wx.ClientDC(self)
mem = wx.MemoryDC()
dx,dy = dc.GetSize()
# self.bmp = dc.GetAsBitmap() # 사용못함..
if dc.IsOk():
bmp2 = wx.EmptyBitmap(dx,dy,-1) # 화면크기의 빈 bitmap 만들기.
mem.SelectObject(bmp2) # bitmap 을 MemoryDC 에서 사용하기 위해 선택
mem.Blit(0,0,dx,dy,dc,0,0) # ScreenDC 에 있는 것을 MemoryDC 로 복사.
if self.timeOn:
# mem.SetTextBackground('blue') # 효과없음.???
mem.SetTextForeground('red')
txt = time.ctime() # 현재시간
mem.DrawText(txt, 50, 50) # MemoryDC 통해서 bitmap에 현재시간 그리기..
mem.SelectObject(wx.NullBitmap) # MemoryDC에서 bitmap 사용해제.
self.bmp = bmp2 # 해제된 bitmap을 저장하기위해.. 사용가능!!!
def onbtn2(self,event):
self.bmp.SaveFile('tmpcap2.bmp',wx.BITMAP_TYPE_BMP) # bitmap 파일로 저장하기.
if __name__ == '__main__':
app = wx.App()
Example(None, 'Capture Prog')
app.MainLoop()




반응형

'wxpython' 카테고리의 다른 글

wx.ComboBox -- item 추가하기  (0) 2015.05.19
Posted by 자유프로그램
,