DX-ColorKeying prob.
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
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.
That should clear things up.
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...
ie-
lpDDSBack->SetColorkey(DDCKEY_SRCBLT, &colorkey);
=======================================================
I would think one of those has to be the problem. Good luck!
Still Learning...
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...
Still Learning...
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.
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.
Makes sense to me. I just wasn''t thinking when I did it and it caught me off guard.
Still Learning...
Still Learning...
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement