有什么方法,可以用vc++,实现截图? 我用的是VC6.0,完成了视频有加载播放,还想实现像现在常用播放器一样的视频截图,但是不知道应该怎么去着手,请各位大侠可以指点指点,最好是能够有相关的源程序,发到小弟的邮箱,[email protected].在这先谢过了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 个截图的代码给你,你好好的看一看(这里面我还把位图写进了文件):HBITMAP CClipPictureDlg::ScreenCapture(LPSTR filename,WORD bitCount,LPRECT lpRect){ HBITMAP hBitmap; HDC hScreenDC=CreateDC("DISPLAY",NULL,NULL,NULL); HDC hmemDC=CreateCompatibleDC(hScreenDC); int ScreenWidth=GetDeviceCaps(hScreenDC,HORZRES); int ScreenHeight=GetDeviceCaps(hScreenDC,VERTRES); HBITMAP hOldBM; PVOID lpData; int startX; int startY; int width; int height; DWORD BitmapSize; DWORD BitsOffset; DWORD ImageSize; DWORD FileSize; BITMAPINFOHEADER bmInfo; BITMAPFILEHEADER bmFileHeader; HANDLE bmFile,hpal,holdpal=NULL;; DWORD dwWritten; if(lpRect==NULL) { startX=startY=0;width=ScreenWidth;height=ScreenHeight; } else { startX=lpRect->left;startY=lpRect->top;width=lpRect->right-lpRect->left;height=lpRect->bottom-lpRect->top; } hBitmap=CreateCompatibleBitmap(hScreenDC,width,height); hOldBM=(HBITMAP)SelectObject(hmemDC,hBitmap); BitBlt(hmemDC,0,0,width,height,hScreenDC,startX,startY,SRCCOPY); hBitmap=(HBITMAP)SelectObject(hmemDC,hOldBM); if(filename==NULL) { DeleteDC(hScreenDC);DeleteDC(hmemDC);return hBitmap; } BitmapSize=((((width*32)+31)/32)*4)*height; lpData=HeapAlloc(GetProcessHeap(),HEAP_NO_SERIALIZE,BitmapSize); ZeroMemory(lpData,BitmapSize); ZeroMemory(&bmInfo,sizeof(BITMAPINFOHEADER)); bmInfo.biSize=sizeof(BITMAPINFOHEADER); bmInfo.biWidth=width; bmInfo.biHeight=height; bmInfo.biPlanes=1; bmInfo.biBitCount=bitCount; bmInfo.biCompression=BI_RGB; ZeroMemory(&bmFileHeader,sizeof(BITMAPFILEHEADER)); BitsOffset=sizeof(BITMAPFILEHEADER)+bmInfo.biSize; ImageSize=((((bmInfo.biWidth*bmInfo.biBitCount)+31)/32)*4)*bmInfo.biHeight; FileSize=BitsOffset+ImageSize; bmFileHeader.bfType=0x4d42;//'B'+('M'<<8); bmFileHeader.bfSize=FileSize; bmFileHeader.bfOffBits=BitsOffset; hpal = GetStockObject(DEFAULT_PALETTE);if (hpal){holdpal = SelectPalette(hmemDC, (HPALETTE)hpal, false);RealizePalette(hmemDC);} GetDIBits(hmemDC,hBitmap,0,bmInfo.biHeight,lpData,(BITMAPINFO *)&bmInfo,DIB_RGB_COLORS); if (holdpal){SelectPalette(hmemDC, (HPALETTE)holdpal, true);RealizePalette(hmemDC);} bmFile=CreateFile(filename,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL); if(bmFile==INVALID_HANDLE_VALUE) { AfxMessageBox("Create File Error!!"); } WriteFile(bmFile,&bmFileHeader,sizeof(BITMAPFILEHEADER),&dwWritten,NULL); WriteFile(bmFile,&bmInfo,sizeof(BITMAPINFOHEADER),&dwWritten,NULL); WriteFile(bmFile,lpData,ImageSize,&dwWritten,NULL); CloseHandle(bmFile); HeapFree(GetProcessHeap(),HEAP_NO_SERIALIZE,lpData); ::ReleaseDC(0,hScreenDC); DeleteDC(hmemDC); return hBitmap;} BitBlt(hmemDC,0,0,width,height,hScreenDC,startX,startY,SRCCOPY);你换换这个参数试试吧@ 好像不行,是不是应该用VFW来编程,对视频数据流进行控制? 视频播放是用什么做的,在那个SDK里应该有截图的函数,如果没有,要自己用diectshow做视频播放 双缓冲问题 改变标题栏后遇到问题,急急急 为什么我的WM_COPYDATA消息响应中接受的参数与发送参数不一致? 将第一个RichEdit控件中的bmp图片,拖放到第二个RichEdit控件中如何实现? CEDIT 的一般用法? 请教一个关于Socket的简单问题,写过关于Socket的大侠们一定知道的,赐教! 提问,如何读取Mp3的ID3V2的信息?? 如何让视频文件的图标与播放器图表不一样? 消息循环Run() 在CVIEW中能实现添加控件吗?如果不能,在哪种VIEW上能实现!formView? 有没有办法截得屏幕外的图像内容? 对话框的使用
HBITMAP CClipPictureDlg::ScreenCapture(LPSTR filename,WORD bitCount,LPRECT lpRect)
{
HBITMAP hBitmap;
HDC hScreenDC=CreateDC("DISPLAY",NULL,NULL,NULL);
HDC hmemDC=CreateCompatibleDC(hScreenDC);
int ScreenWidth=GetDeviceCaps(hScreenDC,HORZRES);
int ScreenHeight=GetDeviceCaps(hScreenDC,VERTRES);
HBITMAP hOldBM;
PVOID lpData;
int startX;
int startY;
int width;
int height;
DWORD BitmapSize;
DWORD BitsOffset;
DWORD ImageSize;
DWORD FileSize;
BITMAPINFOHEADER bmInfo;
BITMAPFILEHEADER bmFileHeader;
HANDLE bmFile,hpal,holdpal=NULL;;
DWORD dwWritten;
if(lpRect==NULL)
{
startX=startY=0;
width=ScreenWidth;
height=ScreenHeight;
}
else
{
startX=lpRect->left;
startY=lpRect->top;
width=lpRect->right-lpRect->left;
height=lpRect->bottom-lpRect->top;
}
hBitmap=CreateCompatibleBitmap(hScreenDC,width,height);
hOldBM=(HBITMAP)SelectObject(hmemDC,hBitmap);
BitBlt(hmemDC,0,0,width,height,hScreenDC,startX,startY,SRCCOPY);
hBitmap=(HBITMAP)SelectObject(hmemDC,hOldBM);
if(filename==NULL)
{
DeleteDC(hScreenDC);
DeleteDC(hmemDC);
return hBitmap;
}
BitmapSize=((((width*32)+31)/32)*4)*height;
lpData=HeapAlloc(GetProcessHeap(),HEAP_NO_SERIALIZE,BitmapSize);
ZeroMemory(lpData,BitmapSize);
ZeroMemory(&bmInfo,sizeof(BITMAPINFOHEADER));
bmInfo.biSize=sizeof(BITMAPINFOHEADER);
bmInfo.biWidth=width;
bmInfo.biHeight=height;
bmInfo.biPlanes=1;
bmInfo.biBitCount=bitCount;
bmInfo.biCompression=BI_RGB;
ZeroMemory(&bmFileHeader,sizeof(BITMAPFILEHEADER));
BitsOffset=sizeof(BITMAPFILEHEADER)+bmInfo.biSize;
ImageSize=((((bmInfo.biWidth*bmInfo.biBitCount)+31)/32)*4)*bmInfo.biHeight;
FileSize=BitsOffset+ImageSize;
bmFileHeader.bfType=0x4d42;//'B'+('M'<<8);
bmFileHeader.bfSize=FileSize;
bmFileHeader.bfOffBits=BitsOffset;
hpal = GetStockObject(DEFAULT_PALETTE);
if (hpal)
{
holdpal = SelectPalette(hmemDC, (HPALETTE)hpal, false);
RealizePalette(hmemDC);
}
GetDIBits(hmemDC,hBitmap,0,bmInfo.biHeight,lpData,(BITMAPINFO *)&bmInfo,DIB_RGB_COLORS);
if (holdpal)
{
SelectPalette(hmemDC, (HPALETTE)holdpal, true);
RealizePalette(hmemDC);
}
bmFile=CreateFile(filename,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
if(bmFile==INVALID_HANDLE_VALUE)
{
AfxMessageBox("Create File Error!!");
}
WriteFile(bmFile,&bmFileHeader,sizeof(BITMAPFILEHEADER),&dwWritten,NULL);
WriteFile(bmFile,&bmInfo,sizeof(BITMAPINFOHEADER),&dwWritten,NULL);
WriteFile(bmFile,lpData,ImageSize,&dwWritten,NULL);
CloseHandle(bmFile);
HeapFree(GetProcessHeap(),HEAP_NO_SERIALIZE,lpData);
::ReleaseDC(0,hScreenDC);
DeleteDC(hmemDC);
return hBitmap;
}
你换换这个参数试试吧@
视频播放是用什么做的,在那个SDK里应该有截图的函数,如果没有,要自己用diectshow做视频播放