How can I use AlphaBlend API to display a transparent background bitmap?
-
I have a bitmap that has an alpha channel for the background. I tried using AlphaBlend, but the background was't displayed transparent. The background was white. This is the code that I'm using:
BLENDFUNCTION blendF; blendF.BlendOp = AC_SRC_OVER; blendF.BlendFlags = 0; blendF.SourceConstantAlpha = 255; blendF.AlphaFormat = AC_SRC_ALPHA; POINT p; p.x=p.y=23; DPtoLP(hdcMem, &p, 1); AlphaBlend(lpdis->hDC, x, y, bm.bmWidth, bm.bmHeight, hdcMem, 0, 0, p.x,p.y, blendF);
Am I doing something wrong?danginkgo
-
I have a bitmap that has an alpha channel for the background. I tried using AlphaBlend, but the background was't displayed transparent. The background was white. This is the code that I'm using:
BLENDFUNCTION blendF; blendF.BlendOp = AC_SRC_OVER; blendF.BlendFlags = 0; blendF.SourceConstantAlpha = 255; blendF.AlphaFormat = AC_SRC_ALPHA; POINT p; p.x=p.y=23; DPtoLP(hdcMem, &p, 1); AlphaBlend(lpdis->hDC, x, y, bm.bmWidth, bm.bmHeight, hdcMem, 0, 0, p.x,p.y, blendF);
Am I doing something wrong?danginkgo
-
I have a bitmap that has an alpha channel for the background. I tried using AlphaBlend, but the background was't displayed transparent. The background was white. This is the code that I'm using:
BLENDFUNCTION blendF; blendF.BlendOp = AC_SRC_OVER; blendF.BlendFlags = 0; blendF.SourceConstantAlpha = 255; blendF.AlphaFormat = AC_SRC_ALPHA; POINT p; p.x=p.y=23; DPtoLP(hdcMem, &p, 1); AlphaBlend(lpdis->hDC, x, y, bm.bmWidth, bm.bmHeight, hdcMem, 0, 0, p.x,p.y, blendF);
Am I doing something wrong?danginkgo
Hi, Will TransparentBlt[^] helpful ? Regards, Paresh.
-
Hi, Will TransparentBlt[^] helpful ? Regards, Paresh.
-
danginkgo wrote:
blendF.SourceConstantAlpha = 255;
I think problem is value 255 which is opaque 0 value is complete transparent Try to specify some other value in range 0-255. I hope it helps.
Regards, Sandip.
-
I tried other values but it did't display the way I need. I want only the background to be complete transparent. The rest of the image must be opaque.
danginkgo
-
You are not doing anything to background so how it will be transparent. This function will only affect the way source bitmap is combined with destination (background). and if you don't want background why are you drawing it??
Regards, Sandip.
-
danginkgo wrote:
How can I draw the bitmap without the background?
What do you mean? From your post understood following 1. There is a background 2. There is a bitmap which you need to draw on that background isn't it?? Can you explain what are you doing exactly??
Regards, Sandip.
-
danginkgo wrote:
How can I draw the bitmap without the background?
What do you mean? From your post understood following 1. There is a background 2. There is a bitmap which you need to draw on that background isn't it?? Can you explain what are you doing exactly??
Regards, Sandip.
OK, For example, I want to display the bitmap on a red background. The bitmap image has also a background ( a black pen on a gray background ). I want the bitmap background to be transparent, so the image (black pen)will apear on red background.
danginkgo
-
I have a bitmap that has an alpha channel for the background. I tried using AlphaBlend, but the background was't displayed transparent. The background was white. This is the code that I'm using:
BLENDFUNCTION blendF; blendF.BlendOp = AC_SRC_OVER; blendF.BlendFlags = 0; blendF.SourceConstantAlpha = 255; blendF.AlphaFormat = AC_SRC_ALPHA; POINT p; p.x=p.y=23; DPtoLP(hdcMem, &p, 1); AlphaBlend(lpdis->hDC, x, y, bm.bmWidth, bm.bmHeight, hdcMem, 0, 0, p.x,p.y, blendF);
Am I doing something wrong?danginkgo
Changing direction for the solution, I wrote some software a while ago that put together irregular chunks of bitmaps (a jigsaw game).
pDC->SetTextColor (RGB(255,255,255)); pDC->SetBkColor (RGB(0,0,0)); pDC->BitBlt (pt.x, pt.y, m\_rcOriginal.Width () + (2\*m\_nBorderSize), m\_rcOriginal.Height () + (2\*m\_nBorderSize), &m\_dcMaskBW, 0,0, SRCAND); pDC->BitBlt (pt.x, pt.y, m\_rcOriginal.Width () + (2\*m\_nBorderSize), m\_rcOriginal.Height () + (2\*m\_nBorderSize), &m\_dcTile, 0,0, SRCPAINT);
The SetText/BkColor are because the source DC was a 1bit colour depth DC, and acted as a mask. The background was white, and the middle area was black. So it made a black area on the destination. The second BitBlt ORed in a DC which had the interesting bits of the picture. The area I wanted to be transparent was black, not grey. This would mean adapting your code to two DCs, but that should not be too hard. It also would not work if you wanted partial transparency, but it does not appear that you do. Lastly, you could get flicker if you were unlucky - so my whole drawing code is wrapped using Keith Rule's excellent CMemDC class. Flicker Free Drawing In MFC[^] Iain.
Plz sir... CPallini CPallini abuz drugz, plz plz help urgent.
-
OK, For example, I want to display the bitmap on a red background. The bitmap image has also a background ( a black pen on a gray background ). I want the bitmap background to be transparent, so the image (black pen)will apear on red background.
danginkgo
-
Changing direction for the solution, I wrote some software a while ago that put together irregular chunks of bitmaps (a jigsaw game).
pDC->SetTextColor (RGB(255,255,255)); pDC->SetBkColor (RGB(0,0,0)); pDC->BitBlt (pt.x, pt.y, m\_rcOriginal.Width () + (2\*m\_nBorderSize), m\_rcOriginal.Height () + (2\*m\_nBorderSize), &m\_dcMaskBW, 0,0, SRCAND); pDC->BitBlt (pt.x, pt.y, m\_rcOriginal.Width () + (2\*m\_nBorderSize), m\_rcOriginal.Height () + (2\*m\_nBorderSize), &m\_dcTile, 0,0, SRCPAINT);
The SetText/BkColor are because the source DC was a 1bit colour depth DC, and acted as a mask. The background was white, and the middle area was black. So it made a black area on the destination. The second BitBlt ORed in a DC which had the interesting bits of the picture. The area I wanted to be transparent was black, not grey. This would mean adapting your code to two DCs, but that should not be too hard. It also would not work if you wanted partial transparency, but it does not appear that you do. Lastly, you could get flicker if you were unlucky - so my whole drawing code is wrapped using Keith Rule's excellent CMemDC class. Flicker Free Drawing In MFC[^] Iain.
Plz sir... CPallini CPallini abuz drugz, plz plz help urgent.
-
I have a bitmap that has an alpha channel for the background. I tried using AlphaBlend, but the background was't displayed transparent. The background was white. This is the code that I'm using:
BLENDFUNCTION blendF; blendF.BlendOp = AC_SRC_OVER; blendF.BlendFlags = 0; blendF.SourceConstantAlpha = 255; blendF.AlphaFormat = AC_SRC_ALPHA; POINT p; p.x=p.y=23; DPtoLP(hdcMem, &p, 1); AlphaBlend(lpdis->hDC, x, y, bm.bmWidth, bm.bmHeight, hdcMem, 0, 0, p.x,p.y, blendF);
Am I doing something wrong?danginkgo
Yesterday, I gave you code that demonstrates AlphaBlend() does indeed work. Did you verify that your bitmap actually has alpha channel values set to something other than 255?
Mark Salsbery Microsoft MVP - Visual C++ :java: