如题:typedef struct
{
DWORD Size;
LONG Width;
LONG Height;
WORD Planes;
WORD BitCount;
DWORD Compression;
DWORD SizeImage;
LONG XPelsPerMeter;
LONG YPelsPerMeter;
DWORD ClrUsed;
DWORD ClrImportant;
ISLCOLOR Colors[256];
LPVOID Raster;
} ISLBITMAP, *PISLBITMAP;
调用: PISLBITMAP m_pIslBmp;
....
m_pIslBmp里已有图像数据(且用SetDIBitsToDevice())能正常显示图像。
但我现在需要半透明,用AlphaBlend时,我用下面这种方法调用:
DrawSemiTransparentRect(hDC,p_dc,rectThumb,(COLORREF)m_pIslBmp->Colors,(BITMAPINFO*)m_pIslBmp,m_pIslBmp); void CImageo::DrawSemiTransparentRect(HDC hDC,CDC *pDstDC, CRect rtTran, COLORREF clrSrc, BITMAPINFO *pbinfo,PISLBITMAP imgg)
{
HBITMAP hBitmap = 0;
PVOID pvBits = NULL; hBitmap = CreateDIBSection(hDC, (PBITMAPINFO)&pbinfo->bmiHeader, DIB_RGB_COLORS, &pvBits, NULL, 0); size_t BitsSize = 2048;
memcpy(pvBits,m_pIslBmp->Raster,BitsSize);
HDC hMemDC = CreateCompatibleDC(hDC);
HBITMAP hOld = ( HBITMAP )SelectObject( hMemDC, hBitmap ); BLENDFUNCTION bf;
bf.AlphaFormat=AC_SRC_OVER;
bf.BlendFlags=0;
bf.BlendOp=0;
bf.SourceConstantAlpha=50;//透明度0-255
BOOL b = AlphaBlend(hDC,
rtTran.left, // DestX
rtTran.top, // DestY
rtTran.right - rtTran.left, // nDestWidth
rtTran.bottom - rtTran.top, // nDestHeight
//m_pIslBmp->Width, // nDestWidth
//m_pIslBmp->Height, // nDestHeight
hMemDC,
0 // DestX
0 // DestY
m_pIslBmp->Width, // nDestWidth
m_pIslBmp->Height, // nDestHeight
bf
);
if(b == 0)
DispSysteMessage(); // release..
SelectObject( hMemDC, hOld );
DeleteDC( hMemDC );
DeleteObject(hBitmap);
} 结果:能画出半透明,但是没有图像信息我跟踪时,发现AlphaBlend(...)里的hMemDC没有位图数据。我的目的:我有BITMAPINFO,需要半透明显示这图像。请高手指点。。
{
DWORD Size;
LONG Width;
LONG Height;
WORD Planes;
WORD BitCount;
DWORD Compression;
DWORD SizeImage;
LONG XPelsPerMeter;
LONG YPelsPerMeter;
DWORD ClrUsed;
DWORD ClrImportant;
ISLCOLOR Colors[256];
LPVOID Raster;
} ISLBITMAP, *PISLBITMAP;
调用: PISLBITMAP m_pIslBmp;
....
m_pIslBmp里已有图像数据(且用SetDIBitsToDevice())能正常显示图像。
但我现在需要半透明,用AlphaBlend时,我用下面这种方法调用:
DrawSemiTransparentRect(hDC,p_dc,rectThumb,(COLORREF)m_pIslBmp->Colors,(BITMAPINFO*)m_pIslBmp,m_pIslBmp); void CImageo::DrawSemiTransparentRect(HDC hDC,CDC *pDstDC, CRect rtTran, COLORREF clrSrc, BITMAPINFO *pbinfo,PISLBITMAP imgg)
{
HBITMAP hBitmap = 0;
PVOID pvBits = NULL; hBitmap = CreateDIBSection(hDC, (PBITMAPINFO)&pbinfo->bmiHeader, DIB_RGB_COLORS, &pvBits, NULL, 0); size_t BitsSize = 2048;
memcpy(pvBits,m_pIslBmp->Raster,BitsSize);
HDC hMemDC = CreateCompatibleDC(hDC);
HBITMAP hOld = ( HBITMAP )SelectObject( hMemDC, hBitmap ); BLENDFUNCTION bf;
bf.AlphaFormat=AC_SRC_OVER;
bf.BlendFlags=0;
bf.BlendOp=0;
bf.SourceConstantAlpha=50;//透明度0-255
BOOL b = AlphaBlend(hDC,
rtTran.left, // DestX
rtTran.top, // DestY
rtTran.right - rtTran.left, // nDestWidth
rtTran.bottom - rtTran.top, // nDestHeight
//m_pIslBmp->Width, // nDestWidth
//m_pIslBmp->Height, // nDestHeight
hMemDC,
0 // DestX
0 // DestY
m_pIslBmp->Width, // nDestWidth
m_pIslBmp->Height, // nDestHeight
bf
);
if(b == 0)
DispSysteMessage(); // release..
SelectObject( hMemDC, hOld );
DeleteDC( hMemDC );
DeleteObject(hBitmap);
} 结果:能画出半透明,但是没有图像信息我跟踪时,发现AlphaBlend(...)里的hMemDC没有位图数据。我的目的:我有BITMAPINFO,需要半透明显示这图像。请高手指点。。
hBitmap = CreateDIBSection(hDC, (PBITMAPINFO)&pbinfo->bmiHeader, DIB_RGB_COLORS, &pvBits, NULL, 0); size_t BitsSize = 2048;
memcpy(pvBits,m_pIslBmp->Raster,BitsSize);
HDC hMemDC = CreateCompatibleDC(hDC);
HBITMAP hOld = ( HBITMAP )SelectObject( hMemDC, hBitmap ); 这里有问题怎么由一个已BITMAPINFO建一个AlphaBlend()用的hMemDC.....
高手在哪里???