代码如下,先抓屏,然后再存图。
用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天了,请各位大侠帮帮忙。
用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天了,请各位大侠帮帮忙。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货