GeClipMap alpha [SOLVED]



  • On 19/11/2016 at 11:13, xxxxxxxx wrote:

    Hi I would like to import tiff with alpha into a Geclip and still got this alpha but I didn't sucess.
    Thanks in advance here is a little code for testing.

    import c4d
      
    def main() :
            path = "C:\\Program Files\\MAXON\\CINEMA 4D R17\\plugins\\MyPlugin\\res\\add2.tif"
            
            #On init un bitmap ave l'image
            temp = c4d.bitmaps.BaseBitmap()
            if temp.InitWith(path)[0] != c4d.IMAGERESULT_OK:
                return False
            
            size = temp.GetBw()
            alpha = temp.GetInternalChannel()
      
            #Initialize GeClipMap
            cm = c4d.bitmaps.GeClipMap()
            cm.InitWithBitmap(temp,alpha)
            cm.BeginDraw()
      
    	#Some test for rewritting alpha
            if alpha:
                for y in xrange(size) :
                    for x in xrange(size) :
                        a = temp.GetAlphaPixel(alpha,x,y)
                        r,g,b = temp.GetPixel(x,y)
                        cm.SetPixelRGBA(x, y, r, g, b,a)    
            
            #draw a square
            cm.SetDrawMode(c4d.GE_CM_DRAWMODE_BLEND, 255)
            cm.SetColor(150, 150, 150, 150)
            size_pic = cm.GetBw()
            height_pic = cm.GetBh()
            cm.FillRect(0, height_pic - (size/6), size_pic,height_pic )
            
            cm.EndDraw()
            
            #Get bitmap
            bmp = cm.GetBitmap().GetClone()
            cm.Destroy()
      
            c4d.bitmaps.ShowBitmap(bmp)
      
    if __name__=='__main__':
        main()
    


  • On 21/11/2016 at 03:00, xxxxxxxx wrote:

    Hello,

    the BaseBitmap returned by GetBitmap() does not include the alpha channel (see documentation). Also the Picture Viewer would not display the alpha channel.

    So as far as I can see you have to copy the alpha channel manually.

      
    # clone bitmap  
    bitmap = clipMap.GetBitmap().GetClone()  
    # add alpha channel  
    alphaChannel = bitmap.AddChannel(True, False)  
      
    # copy alpha  
      
    clipMap.BeginDraw()  
      
    for x in xrange(clipMapWidth) :  
      for y in xrange(clipMapHeight) :  
            
          r,g,b,a = clipMap.GetPixelRGBA(x,y)  
          bitmap.SetAlphaPixel(alphaChannel, x, y, a)  
            
    clipMap.EndDraw()  
            
    # save bitmap with alpha  
      
    saveImageFile = c4d.storage.SaveDialog(type=c4d.FILESELECTTYPE_IMAGES,title="Save as PNG")  
    if saveImageFile is not None:  
      bitmap.Save(name = saveImageFile,format = c4d.FILTER_PNG,data = None, savebits =c4d.SAVEBIT_ALPHA)   
    

    best wishes,
    Sebasitan



  • On 21/11/2016 at 05:35, xxxxxxxx wrote:

    Thanks you was a missunderstand from me.
    I thinked alpha was not copied into the GeClip.

    Anyway thanks you now all is working as excepted ! :)


Log in to reply