From a933d11df84e83fccdd6e838070035cba4e59faf Mon Sep 17 00:00:00 2001 From: Bill Richardson Date: Thu, 3 Mar 2011 09:35:02 -0800 Subject: [PATCH] Add "File->Save snapshot" menu item to export the displayed screen. Change-Id: Ia0e14a768d6ba6dadd520cd7c3961759771dab08 BUG=chromium-os:12643 TEST=none Review URL: http://codereview.chromium.org/6588139 --- scripts/newbitmaps/lib/bmpblock.py | 8 ++++++++ scripts/newbitmaps/lib/pixcontrol.py | 6 ++++++ scripts/newbitmaps/lib/pixdisplay.py | 22 ++++++++++++++++++++++ 3 files changed, 36 insertions(+) diff --git a/scripts/newbitmaps/lib/bmpblock.py b/scripts/newbitmaps/lib/bmpblock.py index eacf72fa6a..c25f93e942 100755 --- a/scripts/newbitmaps/lib/bmpblock.py +++ b/scripts/newbitmaps/lib/bmpblock.py @@ -102,3 +102,11 @@ class BmpBlock(object): sc = self.yaml['screens'][self.current_screen] slist = [(x,y,self.yaml['images'][z]) for x,y,z in sc] self.displayer.DisplayScreen(self.current_screen, slist) + + def Saveit(self): + """Save current screen to file.""" + if self.displayer: + if self.current_screen: + sc = self.yaml['screens'][self.current_screen] + slist = [(x,y,self.yaml['images'][z]) for x,y,z in sc] + self.displayer.SaveScreen(self.current_screen, slist) diff --git a/scripts/newbitmaps/lib/pixcontrol.py b/scripts/newbitmaps/lib/pixcontrol.py index 1f46558e8b..5d806df509 100755 --- a/scripts/newbitmaps/lib/pixcontrol.py +++ b/scripts/newbitmaps/lib/pixcontrol.py @@ -15,6 +15,7 @@ class Frame(wx.Frame): m_about = menuFile.Append(wx.ID_ANY, "About...\tCtrl+A") menuFile.AppendSeparator() m_reload = menuFile.Append(wx.ID_ANY, "Reload\tCtrl+R") + m_snapshot = menuFile.Append(wx.ID_ANY, "Save snapshot") m_quit = menuFile.Append(wx.ID_ANY, "Quit\tCtrl+Q") menuBar = wx.MenuBar() menuBar.Append(menuFile, "&File") @@ -22,6 +23,7 @@ class Frame(wx.Frame): self.CreateStatusBar() self.Bind(wx.EVT_MENU, self.OnAbout, m_about) self.Bind(wx.EVT_MENU, self.OnReload, m_reload) + self.Bind(wx.EVT_MENU, self.OnSaveit, m_snapshot) self.Bind(wx.EVT_MENU, self.OnQuit, m_quit) self.Bind(wx.EVT_CLOSE, self.OnQuit) @@ -78,6 +80,10 @@ class Frame(wx.Frame): self.do_update = True; self.UpdateControls() + def OnSaveit(self, event): + """Tell the model object to save the view that the user sees.""" + self.bmpblock.Saveit() + def OnSelected(self, event): """User may have picked one of the pulldowns.""" if event.IsSelection(): diff --git a/scripts/newbitmaps/lib/pixdisplay.py b/scripts/newbitmaps/lib/pixdisplay.py index 0d40580b9f..339e2dfeca 100755 --- a/scripts/newbitmaps/lib/pixdisplay.py +++ b/scripts/newbitmaps/lib/pixdisplay.py @@ -37,6 +37,24 @@ class MyPanel(wx.Panel): bmp = img.ConvertToBitmap() dc.DrawBitmap(bmp, x, y) + def OnSave(self, name): + """Draw the current image sequence into a file.""" + dc = wx.MemoryDC() + done_first = False + for x, y, filename in self.imglist: + img = wx.Image(filename, wx.BITMAP_TYPE_ANY) + if (not done_first): + w,h = img.GetSize() + base = wx.EmptyBitmap(w,h) + dc.SelectObject(base) + done_first = True + bmp = img.ConvertToBitmap() + dc.DrawBitmap(bmp, x, y) + new = wx.ImageFromBitmap(base) + outfile = name + '.png' + new.SaveFile(outfile, wx.BITMAP_TYPE_PNG) + print "wrote", outfile + class Frame(wx.Frame): @@ -60,3 +78,7 @@ class Frame(wx.Frame): self.SetStatusText(name) self.p.imglist = imglist self.p.OnPaint() + + def SaveScreen(self, name, imglist): + self.p.imglist = imglist + self.p.OnSave(name)