如题: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,需要半透明显示这图像。请高手指点。。

解决方案 »

  1.   

    好像是:
    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.....
      

  2.   

    怎么将BITMAPINFO里的图像数据创建,到hMemDC里去。
    高手在哪里???