|
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:
<br />
BLENDFUNCTION blendF; <br />
blendF.BlendOp = AC_SRC_OVER;<br />
blendF.BlendFlags = 0;<br />
blendF.SourceConstantAlpha = 255;<br />
blendF.AlphaFormat = AC_SRC_ALPHA;<br />
<br />
POINT p; p.x=p.y=23; DPtoLP(hdcMem, &p, 1); <br />
AlphaBlend(lpdis->hDC, <br />
x, y, bm.bmWidth, bm.bmHeight, <br />
hdcMem,<br />
0, 0, <br />
p.x,p.y, <br />
blendF); <br />
Am I doing something wrong?
danginkgo
|
|
|
|
|
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.
|
|
|
|
|
Ok,
How can I draw the bitmap without the background?
danginkgo
|
|
|
|
|
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
|
|
|
|
|
Then you have to go for option given by Paresh i.e. TrasparentBlt.
Regards,
Sandip.
|
|
|
|
|
OK, thanks
danginkgo
|
|
|
|
|
|
No, because the background is white, but there are some other white pixels within the bitmap. I don't want that all the white pixels to be transparent.
The alpha channel is defined only for the background pixels.
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, thank you
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++
|
|
|
|
|
i am trying to send a CList of CString elements using SendMessage and WM_COPYDATA to another process. both processes are owned by me.
but the problem is at the receiving end that it gives access violation when i access list elements.
simple data members like int, char array are accessible.
i would like to know whether clist can be send using sendmessage.
thanks
|
|
|
|
|
MSDN documentation for WM_COPYDATA says
Remarks
The data being passed must not contain pointers or other references to objects not accessible to the application receiving the data.
Regards,
Sandip.
|
|
|
|
|
The documentation of WM_COPYDATA says that the data being passed must not contain pointers or other references to objects not accessible to the application receiving the data. The CList contains CStrings as the elements certainly encapsulate pointers which are not accecable by the remote process. So it should not be possible to send a CList object to another process by WM_COPYDATA.
|
|
|
|
|
You can easily serialize the CStrings into a byte stream and send them to the other process.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Hi,
I am currently using the dhtml control to assign the url fo picture element within the web page. After assigning url to image the thick blue border is gets displayed arround it.
For assigning Url I am creating MAP arround the image.
And also this sometimes displays and sometimes not.
I also viewed the HTML source for the wev bage I could not found any attribute which displayes this blue border.
I also previously posted this issue with othere forum and I found replay that I have to set explicitly "border=0" for that object.
But this is also not working.
Pleae help me for this... It's very urgent.
Thank you.
|
|
|
|
|
Hi,
I need to user IsUserAnAdmin api. This is available in shell32.dll. I can see this api through dependency walker. But the header file (shlobj.h) available in \Program Files\Microsoft Visual Studio\VC98\Include is not having this declaration. Can I know whether I need to upgrade any thing or replace any include,binaries.
Thanks,
Venkat
|
|
|
|
|
The documentation for the IsUserAnAdmin[^] states that:
This function is a wrapper for CheckTokenMembership. It is recommended to call that function directly to determine Administrator group status rather than calling IsUserAnAdmin.
Note This function is available through Windows Vista. It might be altered or unavailable in subsequent versions of Microsoft Windows.
It's not a good idea to use this function, but reading the documentation is. In fact, is you look at the documentation for CheckTokenMembership[^] you'll find sample code that pretty much does what you're after.
Steve
|
|
|
|
|
Thanks Steve. But I am also getting a compilation error while using CheckTokenMembership( )
|
|
|
|
|
First read this[^]. Since the minimum OS required for the CheckTokenMembership[^] function is Windows 2000 add/modify your stdafx.h file so it contains the following:
#define _WIN32_WINNT 0x0500
#define WINVER 0x0500
Note: I haven't tried this myself.
Steve
|
|
|
|
|
Thanks Steve.. But its still not working.
|
|
|
|
|
Ok, your original post contains the following:
\Program Files\Microsoft Visual Studio\VC98\Include
Looks like you're using MSVC6, which was released in 1998. Since Windows 2000 was released in (wait for it...) 2000 it's too old. Update to a newer SDK in addition to my previous suggestion. The latest version of the SDK that can be used with MSVC6 can be found here[^] (although I haven't downloaded from here myself).
Steve
|
|
|
|