Esempio n. 1
0
 def _GetCurrentFrame( self ):
     
     if self._cv_mode:
         
         ( retval, numpy_image ) = self._cv_video.read()
         
         if not retval:
             
             self._next_render_index = ( self._next_render_index + 1 ) % self._num_frames
             
             raise HydrusExceptions.CantRenderWithCVException( 'CV could not render frame ' + str( self._next_render_index - 1 ) + '.' )
             
         
     else:
         
         current_frame = HydrusImageHandling.Dequantize( self._pil_image )
         
         if current_frame.mode == 'RGBA':
             
             if self._pil_canvas is None:
                 
                 self._pil_canvas = current_frame
                 
             else:
                 
                 self._pil_canvas.paste( current_frame, None, current_frame ) # use the rgba image as its own mask
                 
             
         elif current_frame.mode == 'RGB':
             
             self._pil_canvas = current_frame
             
         
         numpy_image = HydrusImageHandling.GenerateNumPyImageFromPILImage( self._pil_canvas )
         
     
     self._next_render_index = ( self._next_render_index + 1 ) % self._num_frames
     
     if self._next_render_index == 0:
         
         self._RewindGIF()
         
     else:
         
         if not self._cv_mode:
             
             self._pil_image.seek( self._next_render_index )
             
             if self._pil_global_palette is not None and self._pil_image.palette == self._pil_global_palette: # for some reason, when pil falls back from local palette to global palette, a bunch of important variables reset!
                 
                 self._pil_image.palette.dirty = self._pil_dirty
                 self._pil_image.palette.mode = self._pil_mode
                 self._pil_image.palette.rawmode = self._pil_rawmode
                 
             
         
     
     return numpy_image
Esempio n. 2
0
def GenerateHydrusBitmapFromPILImage( pil_image, compressed = True ):
    
    pil_image = HydrusImageHandling.Dequantize( pil_image )
    
    if pil_image.mode == 'RGBA':
        
        depth = 4
        
    elif pil_image.mode == 'RGB':
        
        depth = 3
        
    
    return HydrusBitmap( pil_image.tobytes(), pil_image.size, depth, compressed = compressed )