首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Windows Mobile >

关于mobile Directshow摄像头拍摄图像保存bmp图片,该如何解决

2012-03-20 
关于mobile Directshow摄像头拍摄图像保存bmp图片最近写了一个关于mobile Directshow摄像头拍摄图像保存bm

关于mobile Directshow摄像头拍摄图像保存bmp图片
最近写了一个关于mobile Directshow摄像头拍摄图像保存bmp图片的程序,可是我的pda取得到的位图是32位的160*120的图片,可是我想要得到的是24位的176*144的bmp图片,我该怎么做呢?

[解决办法]
C#的话转换得需要PixelFormat.Format24bppRgb,但该属性在WM上不支持。
下面是C++的方法,楼主参考下吧

C/C++ code
HBITMAP ConvTo24Bit( HBITMAP h32 ) {     BITMAP bm;     GetObject( h32, sizeof( BITMAP ), &bm );     BITMAPINFOHEADER bi = { 0 };     void *pBits;     bi.biSize = sizeof( BITMAPINFOHEADER );     bi.biBitCount = 24;     bi.biPlanes = 1;     bi.biWidth = bm.bmWidth;     bi.biHeight = bm.bmHeight;     HDC hDC = GetDC( NULL );     HBITMAP h24 = CreateDIBSection( hDC, ( LPBITMAPINFO )&bi, DIB_RGB_COLORS, &pBits, NULL, 0 );     HDC hMemDC1 = CreateCompatibleDC( hDC );     HDC hMemDC2 = CreateCompatibleDC( hDC );     HBITMAP h32Old = ( HBITMAP )SelectObject( hMemDC1, h32 );     HBITMAP h24Old = ( HBITMAP )SelectObject( hMemDC2, h24 );     BitBlt( hMemDC2, 0, 0, bm.bmWidth, bm.bmHeight, hMemDC1, 0, 0, SRCCOPY );     SelectObject( hMemDC1, h32Old );     SelectObject( hMemDC2, h24Old );     DeleteDC( hMemDC1 );     DeleteDC( hMemDC2 );     ReleaseDC( NULL, hDC );     // now ok, 24bit bmp...     return h24;     // 或者改return HBITMAP为BYTE *     DWORD dwImageSize = ( ( ( ( bm.bmWidth * 24 ) + 31 ) >> 5 ) < < 2 ) * bm.bmHeight;     LPBYTE lpData = ( LPBYTE )new BYTE[sizeof( BITMAPINFOHEADER ) + dwImageSize];     memcpy( ( LPBITMAPINFOHEADER )lpData, &bi, sizeof( BITMAPINFOHEADER ) );     memcpy( ( LPVOID )lpData + sizeof( BITMAPINFOHEADER ), pBits, dwImageSize );     DeleteObject( h24 );     return lpData; }
[解决办法]
在CComPtr<IAMStreamConfig>里面用GetNumberOfCapabilities去拿设备支持的resolution
他支持什么 你就可以取到什么 我指的是分辨率
[解决办法]
7楼正解:
使用IAMStreamConfig这个接口。 获得这个接口之后,通过GetNumberOfCapabilities获得stillpin或者capturepin(哪个pin这个由你获得这个接口的时候自己申明)的所支持的功能种类的数量。 再通过GetStreamCaps获得具体的值(如,分辨率,bitcount)。

 具体你看下mobile帮助文档。
[解决办法]
呵呵..
如果你一定要得到你指定的分辨率,看来你只能自己做bmp的转换了。

热点排行