代码如下,先抓屏,然后再存图。
用GDI+的Bitmap类直接存的话会默认带Alpha通道,不知道是抓屏的问题还是存图的问题。    GdiplusStartupInput gdiplusStartupInput;
    ULONG_PTR gdiplusToken;
    GdiplusStartup( &gdiplusToken, &gdiplusStartupInput, NULL );
    
    HWND hwnd = ::GetDesktopWindow();   
    HDC hdc = GetWindowDC(hwnd);   
    int x = GetDeviceCaps( hdc, HORZRES );   
    int y = GetDeviceCaps( hdc, VERTRES );   
    HBITMAP hbmp = ::CreateCompatibleBitmap( hdc, x, y );
    HBITMAP hold;   
    HDC hmemdc = ::CreateCompatibleDC(hdc);   
    hold = (HBITMAP)::SelectObject( hmemdc, hbmp );   
    BitBlt( hmemdc, 0, 0, x, y, hdc, 0, 0, SRCCOPY );   
    SelectObject( hmemdc, hold );   
    
    Bitmap bit( xs, ys, PixelFormat32bppRGB ); //生成另一个Bitmap,是不带Alpha通道的
    Bitmap bit2( hbmp, NULL );   
    Graphics g(&bit);   
    g.ScaleTransform((float)xs/x, (float)ys/y);   
    g.DrawImage( &bit2, 0, 0 );   //把抓的图存到那个不带Alpha通道的Bitmap里
    GetEncoderClsid( L"image/png", &encoderClsid );   
    UINT uFlag = bit.GetFlags(); // 这里显示不带Alpha通道
    PixelFormat format = bit.GetPixelFormat(); //这里也显示不带Alpha通道
    bit.Save( pszFileName, &encoderClsid, NULL );//存文件。虽然UINT uFlag = bit.GetFlags(); 和PixelFormat format = bit.GetPixelFormat();显示都不带Alpha通道,但是最后出来的Png图像还是带Alpha通道的。可以在头里看到IHDR头的ColorType是06,而不是02.
这问题困扰我3天了,请各位大侠帮帮忙。