2009-12-09 7 views
1

이벤트에서 BufferedPaintDC를 사용하여 내 프로그램에서 circle/rect 등의 다른 모양을 만들었습니다. 이제 메뉴 옵션에서 saveas 버튼을 클릭하면 파일을 저장하려고합니다. 그 때문에 나는 memoryDC를 사용하고 bmp 파일로 내용을 저장합니다.wx 위젯 내용을 파일로 저장

데프 다른 이름으로 저장 (자체 이벤트) :

dlg = wx.FileDialog(self, "Choose a file", self.dirname, "", "*.*", \ 
    wx.SAVE | wx.OVERWRITE_PROMPT) 
    if dlg.ShowModal() == wx.ID_OK: # user enters filename as something.bmp 
    self.show_bmp = wx.StaticBitmap(self) 

    w, h = self.GetClientSize() 

    draw_bmp = wx.EmptyBitmap(w, h) 

    c = wx.MemoryDC(draw_bmp) 

    c.SetBrush(wx.Brush('white')) 

    c.Clear() 

    c.SetPen(wx.Pen("purple", 15)) 

    c.DrawRectangle(30,30,60,60) ### ??????#### 

    myimage = self.show_bmp.GetBitmap() 
    self.filename=dlg.GetFilename() 
    name = os.path.join('C:\mad', self.filename) 
    myimage.SaveFile(name, wx.BITMAP_TYPE_JPEG) 
    self.filename=name 
    dlg.Destroy() 

이제 내 문제는 어떻게 다음 이미지로 변환 할 수 있도록 내가는 "C"에 버퍼링 직류에 의해 그려진 일을 어떻게해야합니까? ? 내 질문에 분명히 희망. 당신이 "c"에 직사각형을 그리는 것을 볼 수 있듯이 그것은 이미지로 변환됩니다. 하지만 ONPaint에서 만든 도형을 얻고 싶습니다. 어떻게 추출합니까?

감사

답변

0

당신은 무엇을 요구하는지 것은 당신이 화면을 캡처 할 말을 매우 가까운 거리에 있습니다. 기술적으로 윈도우의 현재 모습을 가져 오는 것이 OnPaint가하는 것을 복제하는 것과 같지는 않습니다.

작동하지 않는 경우 사용할 도구 인 DC.Blit() 사용을 포함하여 기술을 기록해 둡니다.

이미지 캡처 코드는 wxpython-users mailing list post by Andrea Gavana을 참조하십시오.

편집 : 문제는 당신이 내부 EVT_PAINT 핸들러를 모든 도면 을하고 있기 때문에, 그때는 아마 다른 기술을 필요로한다는 것입니다합니다. 다른 루틴에서 사전 할당 된 버퍼 비트 맵까지 모든 것을 그립니다. 이미지가 화면에 실제로 표시되는 방식 인 OnPaint 내부에서는 그리지 않고 이미 그린 비트 맵을 복사하기 만하면됩니다. 버퍼 비트 맵은 OnPaint 호출간에 지속되며 사실 기본적으로 OnPaint와는 별개입니다. 따라서 간단하게 작동하는 Save() 루틴을 추가 할 수 있습니다. 방법을 알려주는 다양한 스 니펫은 wxPyWiki DoubleBuffererDrawing 페이지를 참조하십시오. (이것 또한 약간의 학습 곡선이 될 것이므로 충분하지 않다면 더 많은 도움을 요청하십시오.)

+0

hmmm 네가 원하는대로 "복제"했으면 좋겠어. 그래서 내가 구원을 수정할 수있다. 나중에 파일을 ..하지만 내가 스크린 샷을 찍으면 불가능 해. – Madhura

+0

왜 안되니? 다시로드 할 수 있습니다 ... 또는 저장하지 마십시오 ... 메모리에 보관하십시오. 그것은 단지 데이터 일뿐입니다. 저는 두 사람 사이의 구별을 이해하지 못합니다. –

+0

예. 그것을 구현하고 혼란을 없앨 것입니다. 고마워요 :) – Madhura

관련 문제