Copy Bitmap with GetPixelCnt



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 23/02/2011 at 05:14, xxxxxxxx wrote:

    User Information:
    Cinema 4D Version:   R12 
    Platform:   Windows  ; Mac  ;  Mac OSX  ; 
    Language(s) :     C++  ;

    ---------
    Hi,

    i want to copy a MultipassBitmap to my own Picturefile.
    Currently i use the GetPixelCnt function to get the Pixels LinePerLine, but it seems that i use it in the wrong way (on some PCs it crashs).

    My Code:

      
      void *linePtr = GeAlloc(sizeX*3); // the buffer where the Pixels per line are stored  
      LONG BytesPerPixel = src->GetBt() / 8;        // src is a MultipassBitmap *  
      src->GetPixelCnt(0, y, sizeX, (UCHAR* )linePtr, BytesPerPixel, COLORMODE_RGB, PIXELCNT_0); // should copy the line to the buffer  
    

    Is it possible what the BytesPerPixel are wrong calculated (I thought the BytesPerPixel are the Bytes used for 1 Pixel in the src Bitmap => so get the bits per pixel and take it throw 8



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 23/02/2011 at 05:30, xxxxxxxx wrote:

    Actually I I am not familiar with C++.
    What about the GetClone() function ? If you want to Copy the Bitmap, it might be useful.

    //Ah, sorry. A MultipassBitmap is not the same as a BaseBitmap. Ignore my comment. 😊



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 23/02/2011 at 05:33, xxxxxxxx wrote:

    well i want to copy the data to my own (RGB 8bit) Pictureclass so i couldnt clone it.



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 23/02/2011 at 06:27, xxxxxxxx wrote:

    The BFF.cpp SDK example uses the GetPixelCnt() method.

    I stripped it down to following code:

      
    LONG            y,bw,bh;  
    UCHAR            *line = NULL;  
      
    //bm is the bitmap  
    bw=bm->GetBw();  
    bh=bm->GetBh();  
      
    line = GeAllocType(UCHAR,3*bw);  
    if (!line)   
    {   
      GeFree(line);   
      return FALSE;   
    }  
      
    for (y=0; y<bh; y++)  
    {  
      bm->GetPixelCnt(0,y,bw,line,COLORBYTES_RGB,COLORMODE_RGB,PIXELCNT_0);  
        
      // do something with line  
    }  
      
    GeFree(line);  
    

    Always free the buffer with GeFree() when you are finished.

    cheers,
    Matthias



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 23/02/2011 at 07:04, xxxxxxxx wrote:

    ah thanks,

    could i dynamical determine which COLORBYTES an COLORMODE return by getColorMode() has?



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 23/02/2011 at 07:31, xxxxxxxx wrote:

    Originally posted by xxxxxxxx

    could i dynamical determine which COLORBYTES an COLORMODE return by getColorMode() has?

    Not that I know of. You have to convert COLORMODE to COLORBYTES yourself.

    something like this:

      
    switch (mode)  
    {  
      case COLORMODE_RGB: return COLORBYTES_RGB;  
      case COLORMODE_GRAY: return COLORBYTES_GRAY;  
        
      // etc.  
        
    }  
    

    cheers,
    Matthias



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 23/02/2011 at 07:33, xxxxxxxx wrote:

    ah ok
    thank you very much.


Log in to reply