DrawBitmap and AllowAlpha

On 29/06/2017 at 03:03, xxxxxxxx wrote:

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

---------
Hello.

I have a GeUserArea and I inherit its DrawMsg to draw 2 bitmaps on top of each other.
First, I use DrawBitmap to draw the background image and then I draw the topmost bitmap which requires BMP_ALLOWALPHA .

The problem is that using BMP_ALLOWALPHA shows the background color DrawSetPen(COLOR_BG) instead of the background image.

How can I fix that ?

Thank you.

On 29/06/2017 at 11:30, xxxxxxxx wrote:

As far as I know, the only solution is to use a GeClipMap. However, that class does only support direct
blitting, without scaling.. Doing the scaling in C++ is pretty darn slow on bigger images and causes my
dialog to lag horribly when the user area is resized.

I'd love to know if there was actually a way to use DrawBitmap() with proper alpha support, too.

On 30/06/2017 at 03:11, xxxxxxxx wrote:

Hello and thank you very much for your answer.

So basically, I will set the bitmap to a GeClipMap and draw the stored bitmap, correct ?
Inside DrawMsg:

BeginDraw();
BaseBitmap* base_bitmap = clip_map->GetBitmap();
DrawBitmap(base_bitmap, ........);
EndDraw();

I couldn't find any reference in the examples.

Thank you.

On 30/06/2017 at 03:29, xxxxxxxx wrote:

You would need to create a GeClipMap on which you combine the two BaseBitmaps to get your
final "image" that you want to draw on the GeUserArea. Something like

AutoAlloc<GeClipMap> map;  // cache that somewhere maybe
map->BeginDraw();
map->Blit(image1, ...);
map->Blit(image2, ...);
map->EndDraw();
BaseBitmap* final = map->GetBitmap();
userArea->DrawBitmap(final, ...);

On 30/06/2017 at 03:56, xxxxxxxx wrote:

I don't think this is going to work because my background image is scaled since it is drawn in a GeUserArea with DrawBitmap.

I have tried using Init (BaseBitmap *bm, BaseBitmap *alpha_channel) passing the image and a black/white image indicating the transparent regiong but it didn't work 😞

So it appears that my only solution is to use a fixed background and use GeClipMap's blit, right ?

Thank you.

On 06/07/2017 at 09:27, xxxxxxxx wrote:

I'm sorry, we haven't come up with any other idea here.