RT

解决方案 »

  1.   

    绘制到DC,获取DC的像素,然后判断透明度是否为0,不为0,则创建一个像素区域加和即可
      

  2.   

    只知道获取某个像素的ALPHA值,整块区域不知道怎么弄.
      

  3.   

    bmp可以的,png好像是没有办法
      

  4.   

    CT2CW strFileName(_T("test.png"));
    m_pImage = Image::FromFile((LPCWSTR)strFileName); PixelFormat pf = m_pImage->GetPixelFormat();
    int nWidth = m_pImage->GetWidth();
    int nHeight = m_pImage->GetHeight(); BitmapData Bitdata;
    Rect rc(0,0,nWidth,nHeight);
    ((Bitmap *)m_pImage)->LockBits(&rc, ImageLockModeRead, pf, &Bitdata); BYTE * p = (BYTE *)Bitdata.Scan0;
    BYTE * pA = NULL; //创建区域
    CRgn rgnImage;
    rgnImage.CreateRectRgn(0,0,0,0);
    for (INT nYPos=0;nYPos<nHeight;nYPos++)
    {
    for (INT nXPos=0;nXPos<nWidth;nXPos++)
    {
    INT nXStartPos=nXPos;

    //透明判断
    do
    {
    pA = (p + nWidth*nYPos+nXPos*4);
    BYTE by = *pA;
    if ((*pA) == 255) break;
    } while ((++nXPos)<nWidth); if ((nXPos-nXStartPos)>0)
    {
    //创建区域
    CRgn RgnUnite;
    RgnUnite.CreateRectRgn(nXStartPos,nYPos,nXPos,nYPos+1); //合并区域
    CombineRgn(rgnImage,RgnUnite,rgnImage,RGN_OR);
    }
    }
    } ((Bitmap *)m_pImage)->UnlockBits(&Bitdata);这个是我写的  但是好像不对,不知道哪出了问题
      

  5.   

    CT2CW strFileName(_T("test.png"));
    m_pImage = Image::FromFile((LPCWSTR)strFileName); PixelFormat pf = m_pImage->GetPixelFormat();
    int nWidth = m_pImage->GetWidth();
    int nHeight = m_pImage->GetHeight(); BitmapData Bitdata;
    Rect rc(0,0,nWidth,nHeight);
    ((Bitmap *)m_pImage)->LockBits(&rc, ImageLockModeRead, pf, &Bitdata); BYTE * p = (BYTE *)Bitdata.Scan0;
    BYTE * pA = NULL; //创建区域
    CRgn rgnImage;
    rgnImage.CreateRectRgn(0,0,0,0);
    for (INT nYPos=0;nYPos<nHeight;nYPos++)
    {
    for (INT nXPos=0;nXPos<nWidth;nXPos++)
    {
    INT nXStartPos=nXPos;

    //透明判断
    do
    {
    pA = (p + 4*nWidth*nYPos+nXPos*4);
    if ((*pA) == 255) break;
    } while ((++nXPos)<nWidth); if ((nXPos-nXStartPos)>0)
    {
    //创建区域
    CRgn RgnUnite;
    RgnUnite.CreateRectRgn(nXStartPos,nYPos,nXPos,nYPos+1); //合并区域
    CombineRgn(rgnImage,RgnUnite,rgnImage,RGN_OR);
    }
    }
    } ((Bitmap *)m_pImage)->UnlockBits(&Bitdata); SetWindowRgn(rgnImage, TRUE);搞定结贴 谢谢各位