|
how to render32 bit bmp with alpha chanel on devicecontext
Trioum
|
|
|
|
|
You can use the AlphaBlend() function...
Here's an example:
LONG lImageWidth = 640;
LONG lImageHeight = 480;
WORD wBitsPerPixel = 32;
LONG lBytesPerRow = lImageWidth * 4;
BYTE* pBitmapBits;
BITMAPINFO bmi;
memset(&bmi, 0, sizeof(BITMAPINFO));
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biWidth = lImageWidth;
bmi.bmiHeader.biHeight = lImageHeight;
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biBitCount = wBitsPerPixel;
bmi.bmiHeader.biCompression = BI_RGB;
bmi.bmiHeader.biSizeImage = lBytesPerRow * lImageHeight;
HDC hdc = ::CreateCompatibleDC(0);
HBITMAP hBitmap = ::CreateDIBSection(hdc, &bmi, DIB_RGB_COLORS, (void**)&pBitmapBits, NULL, 0);
if (hBitmap)
{
<font color="Green">
RGBQUAD *pCurPixel = (RGBQUAD *)pBitmapBits;
int PixelCount = lImageWidth * lImageHeight;
while (PixelCount > 0)
{
(*pCurPixel).rgbRed = 0x00;
(*pCurPixel).rgbGreen = 0x00;
(*pCurPixel).rgbBlue = 0xA0;
(*pCurPixel).rgbReserved = 0x80; <font color="Green">
pCurPixel++;
PixelCount--;
}
HGDIOBJ hOldBitmap = ::SelectObject(hdc, hBitmap);
HDC hClientDC = ::GetDC(*this);
HPEN hPen = ::CreatePen(PS_SOLID, 10, RGB(255,0,128));
HGDIOBJ hOldPen = ::SelectObject(hClientDC, hPen);
::MoveToEx(hClientDC, 0, 0, NULL);
::LineTo(hClientDC, 650, 490);
::SelectObject(hClientDC, hOldPen);
::DeleteObject(hPen);
BLENDFUNCTION bf;
bf.BlendOp = AC_SRC_OVER;
bf.BlendFlags = 0;
bf.SourceConstantAlpha = 0xFF;
bf.AlphaFormat = AC_SRC_ALPHA;
::AlphaBlend(hClientDC, 0, 0, lImageWidth, lImageHeight,
hdc, 0, 0, lImageWidth, lImageHeight, bf);
::ReleaseDC(*this, hClientDC);
::SelectObject(hdc, hOldBitmap);
::DeleteObject(hBitmap);
}
::DeleteDC(hdc);
Using GDI+ it's easier
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
I am use both code using GDI and GDI+ but alpha channel portion of image
appeared as white
Trioum
|
|
|
|
|
Then you're doing something wrong. Without seeing code it's hard to guess
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Did you use of CImage class?
|
|
|
|
|
<br />
LPBYTE p = new BYTE[1024];<br />
How can swap p into virtual memory?
modified on Wednesday, April 2, 2008 2:41 AM
|
|
|
|
|
Good news, it is already inside it.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
|
|
|
|
|
|
http://en.wikipedia.org/wiki/Virtual_memory[^]
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
|
|
|
|
|
Hi,
I am looking for ways to display RSSI status for wireless connection (basically vertical bars with increasing height). I am looking to see if microsoft provides me an ActiveX control (like a progress bar) to display the signal strength on inputting a value in a range. Please let me know if you know if this is available or a way to implement this using VC++.
Thanks!
-A
|
|
|
|
|
abupriabi@yahoo.com wrote: control (like a progress bar) to display the signal strength on inputting a value in a range. Please let me know if you know if this is available or a way to implement this using VC++.
Take a look at CDC::FillRect Should work.
led mike
|
|
|
|
|
abupriabi@yahoo.com wrote: I am looking to see if microsoft provides me an ActiveX control (like a progress bar) to display the signal strength on inputting a value in a range.
Why do you need an ActiveX control for the above?
Don't you like the standard progress bar control?
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
|
|
|
|
|
CPallini wrote: Why do you need an ActiveX control for the above?
Don't you like the standard progress bar control?
In standard progress bar all the bars are of the same height. I want a control wherein the height of the bars are increasing: Like the signal strength indicator on cell phone.
|
|
|
|
|
CP search engine makes the magic happen [^]
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
|
|
|
|
|
hi
how can i reverse a vertical slider (min at bottom max at top)
"i know there are lots of math functions for reverse it"
i tried TBS_DOWNISLEFT but nothing was happen
this is a VC++ 6.0 project and i.m updating/Compiling it
with VS .NET 2003 it compiles without error but slider seems normal
i am creating it with
CSliderCtrl *m_slider;
m_slider->CreateEx()
at runtime
and a second question
is there any way to set visible or invisible
slider's (standard)tooltip at runtime(after created)
thanks
|
|
|
|
|
Have you tried the SetRange() method?
"Love people and use things, not love things and use people." - Unknown
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
DAVID! Stop passing out those secret documented methods!
led mike
|
|
|
|
|
humm! i got it
|
|
|
|
|
good answers with mockingly
i do not asked how to set range of slider
normally if orientation of slider is vertical
SetRange(0,100); 0 at the top and 100 at the bottom
i want to do 0 at the bottom 100 at the top
i hope you understand me
thanks
|
|
|
|
|
If you want the top and bottom to be the opposite numbers, try setting the range with opposite numbers too.
Eg,
SetRange (100,0);
Iain.
Iain Clarke appears because CPallini still cares.
|
|
|
|
|
Iain Clarke wrote: If you want the top and bottom to be the opposite numbers, try setting the range with opposite numbers too.
Dear Iain Clarke
before open this thread, i have tried it lots of times
SetRange (100,0); << this locks slider have you tried it..?
is it works for you..? if so please tell me what i have to do aditionally
i have used either TBS_DOWNISLEFT and TBS_REVERSED
i have defined different WINVER s
i thing i am doing something wrong but what i do not know
thanks
|
|
|
|
|
I owe you an apology - I was thinking of the up/down control, and just setting the range works fine.
eg:
SendDlgItemMessage (IDC_SEGMENTEDGECORRSPIN, UDM_SETRANGE, 0, MAKELONG((short)20, (short)-20));
is operational.
But the trackbar (as windows rather than MFC) calls it, is a different control.
Rather than MFCs set range, have you tried using: TBM_SETRANGEMIN , TBM_SETRANGEMAX .
TBS_REVERSED is just cosmetic.
Last but not least, just reverse it in your code:
SendDlgItem (hDlg, IDC_zzzzz, TBM_SETPOS, TRUE, (LPARAM)(1000-nPos));
Iain.
Iain Clarke appears because CPallini still cares.
|
|
|
|
|
Grettings everyone, today im dealing with Crypto552 created by Wei Dai.
im converting a project my father did long ago. since we think different i didnt want to have all the crypto files spread across my solution so i created a project for them.
in my visual studio 8 solution i have 2 projects: CRYPTO (In wich the cryptography solucion is written in c++) and builds perfectly; ZEUS08 (Wich is the project thats gonna have the conversion of what my father did in C++) both projects are in C++
inside CRYPTO theres a namespace called CryptoPP. (NAMESPACE_BEGIN(CryptoPP)) wich is in all the files .h and.cpp
since im copying parts from the last version im having some problems.
the most important one is:
im trying to use the namespace CryptoPP in ZEUS08 but it wont allow me...
i have tried
USING_NAMESPACE(CryptoPP);
using namespace CryptoPP;
but it keeps telling me:
error C2781 : 'CryptoPP' : a namespace with this name does not exist
does anybody have an idea why it tortures me with that nonsense?, i mean the project is in my solution why it wont recognize it?
help would be apreciated.
|
|
|
|
|
pabloraul wrote: NAMESPACE_BEGIN
what the heck is that?
pabloraul wrote: i mean the project is in my solution why it wont recognize it?
That means nothing. You have to have the namespace header file included for the compiler to know about the namespace.
led mike
|
|
|
|
|
about the NAMESPACE_BEGIN(CryptoPP), i really dont know. the compiler understands that it its the beggining of the namespace and at the end of the file theres a NAMESPACE_END. when i look at the object browser it has something like this:
CRYPTO
{}CryptoPP //meaning that cryptopp is inside crypto
{}Std
about including the header file of the namespace, i dont now which one since every file of the class has that thing inside...
by the way, i cant even include the files of CRYPTO into de files of ZEUS
example:
#include "config.h" //cannot include file, no such file or directory
modified on Tuesday, April 1, 2008 1:13 PM
|
|
|
|