def __CalcDuration(self): pics = self.GetProject().GetPictures() idxPic = 0 imgCount = 0 frameCount = 0 while idxPic < len(pics) - 1: pic = pics[idxPic] picPattern = PicturePattern.Create(pic.GetFilename()) assert picPattern.IsOk() picNum = picPattern.num # get number from next pic nextPic = pics[idxPic + 1] nextPicPattern = PicturePattern.Create(nextPic.GetFilename()) assert nextPicPattern.IsOk() picCount = nextPicPattern.num - picNum if picCount < 0: raise ValueError(_("The picture counter is not " "increasing: %s") % nextPic.GetFilename()) picDur = int(pic.GetDuration()) transDur = int(pic.GetTransitionDuration()) imgCount += picCount frameCount += (picCount * (picDur + transDur)) idxPic += 1 return imgCount, frameCount
def _CheckImportedPic(self, path): picPattern = PicturePattern.Create(path) if not picPattern.IsOk(): dlgErr = wx.MessageDialog( self, _("Filename '%s' does not match a number pattern " "which is necessary for a time lapse slide " "show!") % path, _("Error"), wx.OK | wx.ICON_ERROR) dlgErr.ShowModal() dlgErr.Destroy() return False else: return True
def OnImportPics(self, event): dlg = wx.FileDialog(self, _(u"Import images"), Settings().GetImagePath(), "", _(u"Imagefiles") + " (*.*)|*.*", wx.FD_OPEN | wx.FD_MULTIPLE | wx.FD_PREVIEW) if dlg.ShowModal() == wx.ID_OK: pics = [] for path in dlg.GetPaths(): if self.__project.GetTimelapse(): picPattern = PicturePattern.Create(path) if not picPattern.IsOk(): dlgErr = wx.MessageDialog( self, _(u"Filename '%s' does not match a number pattern " u"which is necessary for a time lapse slide " u"show!") % path, _(u"Error"), wx.OK | wx.ICON_ERROR) dlgErr.ShowModal() dlgErr.Destroy() continue pic = Picture(path) pics.append(pic) ImageCache().RegisterPicture(pic) selItms = self.lvPics.GetSelected() self.InsertPictures(pics, selItms[0] + 1 if selItms else None, autopath=True) Settings().SetImagePath(os.path.dirname(path)) selPics = self.lvPics.GetSelectedPictures() self.pnlEditPicture.SetPictures(selPics) dlg.Destroy()
def _PrepareTasks(self, pics): picBefore = None picNum = None idxPic = 0 while idxPic < len(pics) - 1: pic = pics[idxPic] picPattern = PicturePattern.Create(pic.GetFilename()) if not picPattern.IsOk(): raise RenderException( ("Filename '%s' does not match a number pattern " "which is necessary for a time lapse " "slide show!") % pic.GetFilename()) picNum = picPattern.num picDur = int(pic.GetDuration()) transDur = int(pic.GetTransitionDuration()) # get number from next pic nextPic = pics[idxPic + 1] nextPicPattern = PicturePattern.Create(nextPic.GetFilename()) if not nextPicPattern.IsOk(): idxPic += 1 continue picCount = nextPicPattern.num - picNum if picCount < 0: raise RenderException( ("The picture counter is not " "increasing: %s") % nextPic.GetFilename()) if idxPic + 1 == len(pics) - 1: # next pic is the last one so incluse the last pic cp = ComputePath(pic, (picDur * (picCount + 1)) + (transDur * picCount)) else: cp = ComputePath(pic, (picDur + transDur) * picCount) pathRects = cp.GetPathRects() picDir = os.path.dirname(pic.GetFilename()) idxRect = 0 while idxRect < len(pathRects): picCopy = pic.Copy() picCopy._filename = os.path.join( picDir, "{0}{1}{2}".format(picPattern.prefix, ("%%0%dd" % picPattern.digits) % picNum, picPattern.postfix)) if transDur > 0 and picBefore: for idxTrans in range(transDur): task = TaskTrans(pic.GetTransition(), (idxTrans + 1) / (transDur + 1), picBefore.Copy(), pathRects[idxRect], picCopy.Copy(), pathRects[idxRect], self._profile.GetResolution()) task.SetInfo(_("processing transition %d/%d") % (picNum, idxTrans + 1)) task.SetDraft(self._draftMode) self._tasks.append(task) idxRect += 1 if idxRect < len(pathRects): for __ in range(picDur): task = TaskCropResize(picCopy.Copy(), pathRects[idxRect], self._profile.GetResolution()) task.SetInfo(_("processing image %d/%d") % (picNum, __ + 1)) task.SetDraft(self._draftMode) self._tasks.append(task) idxRect += 1 picNum += 1 picBefore = picCopy picBefore = None idxPic += 1