Esempio n. 1
0
    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
Esempio n. 2
0
 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
Esempio n. 3
0
    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()
Esempio n. 4
0
    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