当前位置: 首页>>代码示例>>Python>>正文


Python Fbo.bind方法代码示例

本文整理汇总了Python中kivy.graphics.Fbo.bind方法的典型用法代码示例。如果您正苦于以下问题:Python Fbo.bind方法的具体用法?Python Fbo.bind怎么用?Python Fbo.bind使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在kivy.graphics.Fbo的用法示例。


在下文中一共展示了Fbo.bind方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。

示例1: MainImageWidget

# 需要导入模块: from kivy.graphics import Fbo [as 别名]
# 或者: from kivy.graphics.Fbo import bind [as 别名]
class MainImageWidget(Widget):
    
    def __init__(self):
        Widget.__init__(self)
        self.fbo = None
        self.fbo_pos = None
        self.fbo_size = None
        self.fbo_real_size = None
        self.fbo_scale = None
        
    def _init_fbo(self):
        if self.fbo_pos is None:
            self.fbo_pos = self.pos
            self.fbo_size = self.size
            self.fbo_real_size = self.size
            self.fbo_scale = 1
        with self.canvas:
            #self.fbo = Fbo(size=self.fbo_size)
            self.fbo = Fbo(size=self.fbo_real_size)            
#            Rectangle(size=self.fbo_size, texture=self.fbo.texture, pos=self.fbo_pos)
            Rectangle(size=self.fbo_size, texture=self.fbo.texture, 
                      pos=(self.fbo_pos[0],
                           self.fbo_pos[1]))

             
    def on_touch_down(self, touch):
        if self.fbo is None:
            self._init_fbo()
        #touch position must be corrected with widget postion in order to draw in the fbo
        touch.x -= self.fbo_pos[0]
        touch.x *= self.fbo_scale
        touch.y -= self.fbo_pos[1]
        touch.y *= self.fbo_scale

        with self.fbo:
            Color(1, 1, 0)
            d = 10.
            Ellipse(pos=(touch.x - d / 2, touch.y - d / 2), size=(d, d))  
            touch.ud['line'] = Line(points=(touch.x, touch.y), width=10) #in fbo kivy uses gl_line so with is always 1
    
    def on_touch_move(self, touch):
        #touch position must be corrected with widget postion in order to draw in the fbo
        touch.x -= self.fbo_pos[0]
        touch.x *= self.fbo_scale
        touch.y -= self.fbo_pos[1]
        touch.y *= self.fbo_scale
        touch.ud['line'].points += [touch.x, touch.y]
        
    def read_draw_layer(self, raw=True):
        self.fbo.bind()
        #pixels = glReadPixels(self.fbo_pos[0], self.fbo_pos[1], self.fbo.size[0], self.fbo.size[1], GL_RGBA, GL_UNSIGNED_BYTE)
        pixels = glReadPixels(0, 0, self.fbo.size[0], self.fbo.size[1], GL_RGBA, GL_UNSIGNED_BYTE)
        self.fbo.release()
        if not raw:
            #get ints
            pixels = [ord(pixel) for pixel in pixels]        
            #convert to tuple format
            pixels = zip(pixels[0::4], pixels[1::4],pixels[2::4], pixels[3::4])            
        return pixels
                
    def SetImageInWidget(self, image):
        
        if self.fbo is None:
            self._init_fbo()
        #show the image in kivy
        if image.get_bytesize() == 3:
            fmt = 'rgb'
        elif image.get_bytesize() == 4:
            fmt = 'rgba' 
        data = pygame.image.tostring(image, fmt.upper(), True)
        k_im_data = ImageData(image.get_width(), image.get_height(), fmt, data)
        imageTexture = Texture.create_from_data(k_im_data)
        self.canvas.clear()
        
        #Modify size and offset to avoid image distortion
        orig_h = image.get_height()
        orig_w = image.get_width()
        wid_h = self.size[1]
        wid_w = self.size[0]
        print self.size
        s_size = (0,0)
        offset = (0,0)
        orig_ratio = float(orig_w)/orig_h
        wid_ratio = float(wid_w)/wid_h
    
        if wid_ratio > orig_ratio: #fix height
            s_size =  (int(wid_h*orig_ratio), wid_h)
            offset = ((wid_w - s_size[0])/2, 0)
            self.fbo_scale = float(orig_h)/wid_h #scale factor to recover the original image size
        else: #fix width
            s_size =  (wid_w, int(wid_w/orig_ratio))
            offset = (0, (wid_h - s_size[1])/2)
            self.fbo_scale = float(orig_w)/wid_w #scale factor to recover the original image size
    
        self.fbo_pos = (self.pos[0] + offset[0], self.pos[1] + offset[1])
        #self.fbo_pos = (self.pos[0] + offset[0]*self.fbo_scale, self.pos[1] + offset[1]*self.fbo_scale)
        self.fbo_size = s_size
        self.fbo_real_size = (orig_w, orig_h)
   
        #self.canvas.add(Rectangle(texture=imageTexture, pos = self.fbo_pos,
#.........这里部分代码省略.........
开发者ID:jpujol,项目名称:PDI_MAAT_KIVY1,代码行数:103,代码来源:open_image.py


注:本文中的kivy.graphics.Fbo.bind方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。