存储Bitmap图片
我在模拟实现QQ的屏幕截图功能,然后在保存位图的时候没法改变图片的大小,也就是没实现存储的图片是我截取的图片。这个我的图片是在哦内存中存取的,请问下怎么改变其大小。我用的是VC程序,别说PS的
- C/C++ code
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; }};[解决办法]
冷清,帮顶下,可以用鼠标拉小吗?
[解决办法]
那存储的是什么图片??
[解决办法]
查下如何改变位图 直接在内存中处理,然后再保存
[解决办法]
你是说截取的是全屏的图片,而不是你选择区域的小块图片么?
好比截到一个1280*800,你只要靠近左上角的200*200,那么建议你另外建一个200*200新位图,然后把要贴的数据复制过去再保存。不知道是不是你想要的。
[解决办法]
眼花...
我觉得你得搞清楚你在什么地方限制了生成图片的大小?
[解决办法]
hdc = GetDC (hwnd) ; //获取桌面DC,前面锁定桌面窗口
hdcMem = CreateCompatibleDC (hdc) ;//创建内存DC
hBitmap = CreateCompatibleBitmap (hdc,
abs (ptEnd.x - ptBeg.x),
abs (ptEnd.y - ptBeg.y)) ;//创建图片,这里需要改成你要保存的大小。
SelectObject (hdcMem, hBitmap) ;
StretchBlt (hdcMem, 0, 0, abs (ptEnd.x - ptBeg.x),
abs (ptEnd.y - ptBeg.y),
hdc, ptBeg.x, ptBeg.y, ptEnd.x - ptBeg.x,
ptEnd.y - ptBeg.y, SRCCOPY) ;//拷贝图片,这里也需要改成你要保存的大小。
[解决办法]
msdn查找copyimage,希望对你有帮助