Update MultipassBitmap

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

On 18/10/2011 at 00:44, xxxxxxxx wrote:

User Information:
Cinema 4D Version:   12 
Platform:      
Language(s) :     C++  ;

---------
Hy there,

I want to set floating-point values to an allocated MultipassBitmap. I find it strange, that there is no method to set floating-point values, I can just see `

Bool SetPixel(LONG x, LONG y, LONG r, LONG g, LONG b);

`from the BaseBitmap class.

After a while of searching I then figured out, that I could maybe use the GetLine and SetLine if casted to a VPBuffer. Now I use the example code from the invert-image example to read a line into a buffer and set the buffer back.

When I set it back, it always returns FALSE, so the SetLine is not working. For testing purpose I didn't change the buffer that I read out, but that doesn't change the outcome. I do all this within a TagData plugin's message-callback method.

What can I do?

Is there another method I can use to update a MultipassBitmap with Real values?

Is it possible, to write data to a Bitmap residing in a Bitmap shader?

Thank you,
maxx

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

On 19/10/2011 at 02:58, xxxxxxxx wrote:

Originally posted by xxxxxxxx

Is there another method I can use to update a MultipassBitmap with Real values?

Here is a simple example how to create and access a 32bit floating point MultipassBitmap:

  
Bool MenuTest::Execute(BaseDocument *doc)  
{  
  MultipassBitmap *mbmp = NULL;  
  SReal *buffer = NULL;  
  
  mbmp = MultipassBitmap::Alloc(512, 512, COLORMODE_RGBf);  
  if (!mbmp) goto Error;  
  
  buffer = GeAllocType(SReal, 512*3);  
  if (!buffer) goto Error;  
  
  //fill a line; I used a brightness over 100% (4.0)  
  for (LONG i=0; i<512*3; i++)  
      buffer[i] = 4.0;  
  
  //cast the SReal buffer into UCHAR; inc parameter is 3*4bytes (3*32bit) because of floating point image format  
  for (LONG y=0; y<512; y++)  
      if (!mbmp->SetPixelCnt(0, y, 512, (UCHAR* )buffer, 12, COLORMODE_RGBf, PIXELCNT_0)) goto Error;  
  
  ShowBitmap(mbmp);  
  
  MultipassBitmap::Free(mbmp);  
  GeFree(buffer);  
  
  return TRUE;  
  
Error:  
  MultipassBitmap::Free(mbmp);  
  GeFree(buffer);  
  
  return FALSE;  
}  

Is it possible, to write data to a Bitmap residing in a Bitmap shader?

Unfortunatly not.

cheers,
Matthias

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

On 19/10/2011 at 09:18, xxxxxxxx wrote:

Thanks a lot for the example!

Cheers,
maxx