Archived

This topic is now archived and is closed to further replies.

DX-ColorKeying prob.

This topic is 6573 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hi, Her''s my problem. I first blt my logo to the screen, which works fine, then i blit my background to the screen and begin animating. However my sprite''s background is being showed, the color keying isnt working. Here''s my code that you may need to help. Also my function order is correct in the calling of them, these are just the definitions. void Animate_Images() { RECT rect; // background lpDDSBack->BltFast(0,0,dojo,NULL,DDBLTFAST_WAIT/DDBLTFAST_SRCCOLORKEY); rect.left = 0; rect.top = 0; rect.bottom = 200; rect.right = 200; // draw the current sprite cell lpDDSBack->BltFast(0,200,arr_anime[current_image],&rect,DDBL TFAST_WAIT/DDBLTFAST_SRCCOLORKEY); lpDDSPrimary->Flip(0,DDFLIP_WAIT); current_image++; if(current_image >= IMAGE_COUNT) current_image = 0; Sleep(200); } void Set_Color_Key() { DDPIXELFORMAT ddpf; ddpf.dwSize = sizeof(ddpf); lpDDSPrimary->GetPixelFormat(&ddpf); // determine proper key for pixel format, green KeyColor = ddpf.dwGBitMask; // set color keys DDCOLORKEY key; key.dwColorSpaceHighValue = KeyColor; key.dwColorSpaceLowValue = KeyColor; for (int i = 0; i < IMAGE_COUNT; i++) arr_anime->SetColorKey(DDCKEY_SRCBLT, &key); dojo->SetColorKey(DDCKEY_SRCBLT, &key); } void Draw_Logo() { // draw my logo lpDDSBack->BltFast(0,0,logo,NULL,DDBLTFAST_WAIT); first_run = false; lpDDSPrimary->Flip(0,DDFLIP_WAIT); Sleep(2000); } ECKILLER

Share this post


Link to post
Share on other sites
The only thing I can see is that in your Bltfast statements in between the parameters instead of having "/" put a "/".
That should clear things up.

Share this post


Link to post
Share on other sites
Is it showing the whole sprite background? You may want to open up an image in a graphics editor (ie-PSP) and double check that your colors are exactly what you set in the color key. Sometimes when resizing an image this can throw the colors off slightly. Also, are you using the DDSD_CKSRCBLT flag when you create the offscreen surfaces? Also check that you call

ie-
lpDDSBack->SetColorkey(DDCKEY_SRCBLT, &colorkey);
=======================================================

I would think one of those has to be the problem. Good luck!



Still Learning...

Share this post


Link to post
Share on other sites
Well, if it wasn''t any of the above problems, I may have just found it on my own game. I had the same problem. How weird. I had my screen set to 32bpp, and my colorkey was RGB(0, 255, 0). I switched my screen depth to 16bpp and suddenly no colorkey. Never crossed my mine. Hope that helped!

Still Learning...

Share this post


Link to post
Share on other sites
To use color keying across different bit depths and surface types, the rgb components of the color key need to be scaled based on the rgb bit masks of the surface you want to color key.

For instance, on a 32 bit surface, the RGB values range from 0 to 255. In 16-bit color, if 555 mode is used, the RGB values range from 0 to 31. If 565 mode is used, the R and B values range from 0 to 31 and the G value ranges from 0 to 63.

So, if your original bitmap is 32 bit color and you want to color key pure green (0,255,0) in 565 mode, you need to set the color key to 00000000000000000000011111100000 (binary).

--Shannon Schlomer, BLAZE Technologies, Inc.

Share this post


Link to post
Share on other sites
Makes sense to me. I just wasn''t thinking when I did it and it caught me off guard.

Still Learning...

Share this post


Link to post
Share on other sites