请问有谁知道怎样让位图具有淡入淡出的效果吗!  如果各位要是有原码的话请发到以下的信箱中,谢谢了!!
[email protected]

解决方案 »

  1.   

    你可以画一个背景位图,然后逐步(设置时钟)改变背影位图的亮度,然后将位图与其运算(AND,OR,XOR,取决你需的效果),直到让背影完全无效为止,而淡出效果的过程与其相反。
      

  2.   

    或者:取得背景像素的颜色值,隔行或隔像素点进行覆盖,直至最终覆盖掉所有前景位图——以前在DOS下使用过此方法,效果还可以。
      

  3.   

    http://www.vckbase.com/document/viewdoc.asp?id=313
      

  4.   

    我没有什么现成的代码,我给你个简单的函数就能实现。
    AlphaBlend(),必须用在Win2000之后的环境中。
    效果比较专业。
      

  5.   

    晕~~~~你个鸟人,真懒不过我还是告诉你,在isee这个自由软件的开发主页上有,自己去找
      

  6.   

    背景的淡入淡出 
    ----------------------------------------------------------------
      如果系统支持调色板,创建动态调色板pAnimate与初始调色板pOriginal。从位图中获取初始调色板,若为淡入将背景色赋予动态调色板。利用前面所提到的公式,根据淡入淡出标志,在循环中更改动态调色板,用AnimatePalette函数设置调色板,改变显示结果。
      如果系统不支持调色板,保存位图调色板到初始调色板,若为淡入将背景色赋予位图调色板,利用前面所提到的公式,根据淡入淡出标志,在循环中更改位图调色板,显示位图改变显示结果。返回:位图的淡入淡出。//参数说明: 
    //hDIB -位图句柄 
    //color -指定背景色 
    //xDest -显示位图的左上角x坐标 
    //yDest -显示位图的左上角y坐标 
    //nLoops -循环次数 
    //nDelay -每次循环中的延时 
    //nFlag -淡入淡出标志 1--淡入 其它--淡出 
    void FadeInORFadeOut( CDC *pDC, HANDLE hDIB, COLORREF color, int xDest, int yDest,
    int nLoops, int nDelay ,int nFlag) 

       int i,j; 
       HPALETTE hPal; 
       PALETTEENTRY pAnimate[256]; 
       PALETTEENTRY pOriginal[256]; 
       CPalette pal; 
       // 创建236色调色板 
       BITMAPINFO &bmInfo = *(LPBITMAPINFO)hDIB ; 
       int nColors = bmInfo.bmiHeader.biClrUsed ? bmInfo.bmiHeader.biClrUsed : 1 << bmInfo.bmiHeader.biBitCount; 
       int nWidth = bmInfo.bmiHeader.biWidth; 
       int nHeight = bmInfo.bmiHeader.biHeight; 
       LPVOID lpDIBBits = (LPVOID)(bmInfo.bmiColors + nColors); 
       int clrRValue = GetRValue(color); 
       int clrGValue = GetGValue(color); 
       int clrBValue = GetBValue(color); 
       if( pDC->GetDeviceCaps(RASTERCAPS) & RC_PALETTE && nColors <= 256 ) 
       { 
          if (!(hPal = Create236Palette(hDIB))) 
          return; 
          pal.Attach( hPal ); 
          // 得到调色板初始值 
          GetPaletteEntries(hPal, 0, nColors, (LPPALETTEENTRY)&pOriginal); 
          // 设定动态调色板初始值为指定色 
          if(nFlag==1) 
          { 
             for (j = 0; j < nColors; j++) 
             { 
                pAnimate[j].peRed = clrRValue; 
                pAnimate[j].peGreen = clrGValue; 
                pAnimate[j].peBlue = clrBValue; 
                pAnimate[j].peFlags = PC_RESERVED; 
             } 
          } 
          else 
          {
             GetPaletteEntries(hPal, 0, nColors, (LPPALETTEENTRY)&pAnimate); 
             CPalette *pOldPalette = pDC->SelectPalette(&pal, FALSE); 
             pDC->RealizePalette(); 
             CDC memDC; 
             memDC.CreateCompatibleDC( pDC ); 
             CBitmap bmp; 
             bmp.CreateCompatibleBitmap( pDC, nWidth, nHeight ); 
             CBitmap *pOldBitmap = memDC.SelectObject( &bmp ); 
             CPalette *pOldMemPalette = memDC.SelectPalette(&pal, FALSE); 
             memDC.RealizePalette(); 
             ::SetDIBitsToDevice(memDC.m_hDC,0,0,nWidth,nHeight,0,0,0,nHeight,lpDIBBits,(LPBITMAPINFO)hDIB,DIB_RGB_COLORS); 
             AnimatePalette(hPal, 0, nColors, (LPPALETTEENTRY)&pAnimate); 
             pDC->BitBlt(xDest, yDest, nWidth, nHeight, &memDC,0,0,SRCCOPY ); 
             // 淡入淡出 
             for( i=1; i <= nLoops; i++ ) 
             { 
                for (j = 0; j < nColors; j++) 
                { 
                   if(nFlag==1) 
                   { 
                      pAnimate[j].peRed = clrRValue - ((clrRValue-pOriginal[j].peRed)*i)/nLoops; 
                      pAnimate[j].peGreen = clrGValue - ((clrGValue-pOriginal[j].peGreen)*i)/nLoops; 
                      pAnimate[j].peBlue = clrBValue - ((clrBValue-pOriginal[j].peBlue)*i)/nLoops; 
                   } 
                   else 
                   { 
                      pAnimate[j].peRed = pOriginal[j].peRed - ((pOriginal[j].peRed - clrRValue)*i)/nLoops; 
                      pAnimate[j].peGreen = pOriginal[j].peGreen - ((pOriginal[j].peGreen - clrGValue)*i)/nLoops; 
                      pAnimate[j].peBlue = pOriginal[j].peBlue - ((pOriginal[j].peBlue - clrBValue)*i)/nLoops; 
                   } 
                } 
                pal.AnimatePalette(0, nColors, (LPPALETTEENTRY)&pAnimate); 
                // Delay... 
                Sleep(nDelay); 
             } 
             memDC.SelectPalette(pOldMemPalette, FALSE); 
             memDC.SelectObject( pOldBitmap ); 
             pDC->SelectPalette(pOldPalette, FALSE); 
          } 
          else if( (pDC->GetDeviceCaps(RASTERCAPS) & RC_PALETTE) == 0 && nColors <= 256 ) 
          { 
             for( int i=0; i < nColors; i++) 
             { 
                pOriginal[i].peRed = bmInfo.bmiColors[i].rgbRed ; 
                pOriginal[i].peGreen = bmInfo.bmiColors[i].rgbGreen; 
                pOriginal[i].peBlue = bmInfo.bmiColors[i].rgbBlue ; 
                if(nFlag==1) 
                { 
                   bmInfo.bmiColors[i].rgbRed = clrRValue; 
                   bmInfo.bmiColors[i].rgbGreen = clrGValue; 
                   bmInfo.bmiColors[i].rgbBlue = clrBValue; 
                } 
             } 
             ::SetDIBitsToDevice(pDC->m_hDC,0,0,nWidth,nHeight,0,0,0,nHeight,lpDIBBits,(LPBITMAPINFO)hDIB,DIB_RGB_COLORS); 
             // 淡入淡出 
             for( i=1; i <= nLoops; i++ ) 
             { 
                for (j = 0; j < nColors; j++) 
                { 
                   if(nFlag==1) 
                   { 
                      bmInfo.bmiColors[j].rgbRed = clrRValue - ((clrRValue-pOriginal[j].peRed)*i)/nLoops; 
                      bmInfo.bmiColors[j].rgbGreen = clrGValue - ((clrGValue-pOriginal[j].peGreen)*i)/nLoops; 
                      bmInfo.bmiColors[j].rgbBlue = clrBValue - ((clrBValue-pOriginal[j].peBlue)*i)/nLoops; 
                   } 
                   else 
                   { 
                      bmInfo.bmiColors[j].rgbRed = pOriginal[j].peRed - ((pOriginal[j].peRed-clrRValue)*i)/nLoops; 
                      bmInfo.bmiColors[j].rgbGreen = pOriginal[j].peGreen - ((pOriginal[j].peGreen-clrGValue)*i)/nLoops; 
                      bmInfo.bmiColors[j].rgbBlue = pOriginal[j].peBlue - ((pOriginal[j].peBlue-clrBValue)*i)/nLoops; 
                   }
                } 
                ::SetDIBitsToDevice(pDC->m_hDC,0,0,nWidth,nHeight,0,0,0,nHeight,lpDIBBits,(LPBITMAPINFO)hDIB,DIB_RGB_COLORS); 
                // Delay... 
                Sl
      

  7.   

    ::SetDIBitsToDevice(pDC->m_hDC,0,0,nWidth,nHeight,0,0,0,nHeight,lpDIBBits,(LPBITMAPINFO)hDIB,DIB_RGB_COLORS); 
                // Delay... 
                Sleep(nDelay);
             }
          } 
      

  8.   

    AlphaBlend在98下就可以用了,不过效果不如2000。
    你循环调用AlphaBlend,每次给不同的Alpha就实现了淡入淡出。
    http://vip.6to23.com/NowCan1/tech/AlphaBlend1.htm
    可惜是个VB程序。