def add(self, canvas_or_context): if self.movie is None: # The first frame will be written to a temporary png file, # then opened as a movie file, then saved again as a movie. handle, self.tmpfname = mkstemp('.tiff') canvas_or_context.save(self.tmpfname) try: movie, err = QTMovie.movieWithFile_error_(self.tmpfname) movie.setAttribute_forKey_(NSNumber.numberWithBool_(True), QTMovieEditableAttribute) range = QTMakeTimeRange(QTMakeTime(0, 600), movie.duration()) movie.scaleSegment_newDuration_(range, self._time) if err is not None: raise str(err) movie.writeToFile_withAttributes_(self.fname, {QTMovieFlatten: True}) self.movie, err = QTMovie.movieWithFile_error_(self.fname) self.movie.setAttribute_forKey_(NSNumber.numberWithBool_(True), QTMovieEditableAttribute) if err is not None: raise str(err) self.imageTrack = self.movie.tracks()[0] finally: os.remove(self.tmpfname) else: try: canvas_or_context.save(self.tmpfname) img = NSImage.alloc().initByReferencingFile_(self.tmpfname) self.imageTrack.addImage_forDuration_withAttributes_( img, self._time, {QTAddImageCodecType: 'tiff'}) finally: try: os.remove(self.tmpfname) except OSError: pass self.frame += 1
def add(self, canvas_or_context): if self.movie is None: # The first frame will be written to a temporary png file, # then opened as a movie file, then saved again as a movie. handle, self.tmpfname = mkstemp(".tiff") canvas_or_context.save(self.tmpfname) try: movie, err = QTMovie.movieWithFile_error_(self.tmpfname, None) movie.setAttribute_forKey_(NSNumber.numberWithBool_(True), QTMovieEditableAttribute) range = QTMakeTimeRange(QTMakeTime(0, 600), movie.duration()) movie.scaleSegment_newDuration_(range, self._time) if err is not None: raise str(err) movie.writeToFile_withAttributes_(self.fname, {QTMovieFlatten: True}) self.movie, err = QTMovie.movieWithFile_error_(self.fname, None) self.movie.setAttribute_forKey_(NSNumber.numberWithBool_(True), QTMovieEditableAttribute) if err is not None: raise str(err) self.imageTrack = self.movie.tracks()[0] finally: os.remove(self.tmpfname) else: try: canvas_or_context.save(self.tmpfname) img = NSImage.alloc().initByReferencingFile_(self.tmpfname) self.imageTrack.addImage_forDuration_withAttributes_(img, self._time, {QTAddImageCodecType: "tiff"}) finally: try: os.remove(self.tmpfname) except OSError: pass self.frame += 1