存储Bitmap图片
我在模拟实现QQ的屏幕截图功能,然后在保存位图的时候没法改变图片的大小,也就是没实现存储的图片是我截取的图片。这个我的图片是在哦内存中存取的,请问下怎么改变其大小。我用的是VC程序,别说PS的
long lWidth; long lHeight; DWORD dwScanDPI; CString m_szFileName;// 位图文件名称 CWnd* pWnd;// CSampleGrabberCB( ){// strcpy(m_szFileName, "c:\\donaldo.bmp");// } STDMETHODIMP_(ULONG) AddRef() { return 2; } STDMETHODIMP_(ULONG) Release() { return 1; } STDMETHODIMP QueryInterface(REFIID riid, void ** ppv) { if( riid == IID_ISampleGrabberCB || riid == IID_IUnknown ) { *ppv = (void *) static_cast<ISampleGrabberCB*> ( this ); return NOERROR; } return E_NOINTERFACE; } STDMETHODIMP SampleCB( double SampleTime, IMediaSample * pSample ) { return 0; } STDMETHODIMP BufferCB( double dblSampleTime, BYTE * pBuffer, long lBufferSize ) { if( !bSaveFrame )return 0; if(!pBuffer)return E_POINTER; SaveBitmap(pBuffer, lBufferSize); bSaveFrame = FALSE; return 0; } //创建位图文件 BOOL SaveBitmap(BYTE * pBuffer, long lBufferSize ) { BITMAPINFOHEADER * pHeader = new BITMAPINFOHEADER; memset(pHeader, 0, sizeof(BITMAPINFOHEADER)); pHeader->biSize = sizeof(BITMAPINFOHEADER); pHeader->biPlanes = 1; pHeader->biBitCount = 32; pHeader->biCompression = BI_RGB; pHeader->biWidth = lWidth; pHeader->biHeight = lHeight; LPVOID object = image_create_bitmap3(pHeader, NULL); delete pHeader; pHeader=NULL; int cpylen = lWidth*4; BYTE * pDest = image_bitmap_dibits(object); memset(pDest, 0, cpylen*lHeight); BYTE * pSrc; char sTemp[3]; memset(sTemp,0,3); sTemp[0]=255; sTemp[1]=0; sTemp[2]=0; for(int i = lHeight-1; i >=0; i--) { pSrc = pBuffer + (lHeight-i-1)*lWidth*3; for(int j=0; j<lWidth; j++) {// if(j<500&&i>lHeight-1-500)// {// memcpy(pDest,sTemp,3);// }// else memcpy(pDest, pSrc, 3); pDest += 4; pSrc += 3; } } //********************************** image_save_bitmap(object, m_szFileName,IMAGE_JPEG,dwScanDPI); image_delete_bitmap(object); // delete []pBuffer; // pBuffer = NULL; WPARAM TwParam = (WPARAM)(char*)(LPCTSTR)"VEDIOFILESAVEFINISH"; pWnd->SendMessage(WM_IMGSCAN_SCAN_FINISHLOCALFILE,TwParam,0); return 0; }};
hdc, ptBeg.x, ptBeg.y, ptEnd.x - ptBeg.x,
ptEnd.y - ptBeg.y, SRCCOPY) ;//拷贝图片,这里也需要改成你要保存的大小。
[解决办法]
msdn查找copyimage,希望对你有帮助