你就用cvSaveImage吧 对OpenCV来说好像没有别的方法 因为OpenCV读入一个图像后已经转换成一个统一的格式了
你想在内存中用Jpg 那么jpg就算是OpenCV给你转换好了 再处理的时候还是跑回统一格式,没有用处了。如果你只想转换格式,直接用CxImage好一点
你想在内存中用Jpg 那么jpg就算是OpenCV给你转换好了 再处理的时候还是跑回统一格式,没有用处了。如果你只想转换格式,直接用CxImage好一点
解决方案 »
- 用ZIP压缩文件做资源所产生的问题
- 基于对话框程序的窗体重绘
- 请问怎么用Classwizard添加一个继承于CWnd的类,急急急!!!!
- 求游戏种背景透明的文字输出代码。谢谢
- vc++ 调用matlab进行 图像处理
- ado+sql
- CRectTracker用在有Scroll的Wnd里时,错误百出。不能正确画Draw和HitTest,怎么解决?
- 如何动态修改控件的属性
- "图片减肥"求教
- 如何自己定义消息函数,如何实现消息响应函数,如何捕获消息,是否能捕获?请解释具体点!谢谢
- 出现了'fstream' : undeclared identifier错误,但程序中包含了#include <iostream>啊
- 求帮忙修改俄罗斯方块源代码
微软的GDI+也可以转换的
CImage mmage;
HWND hWnd = ::GetDesktopWindow();//获得屏幕的HWND.
HDC hScreenDC = ::GetDC(hWnd); //获得屏幕的HDC.
HDC MemDC = ::CreateCompatibleDC(hScreenDC);
RECT rect;
::GetWindowRect(hWnd,&rect);
HBITMAP hBitmap = ::CreateCompatibleBitmap(hScreenDC,rect.right,rect.bottom);
HGDIOBJ hOldBMP = ::SelectObject(MemDC,hBitmap);
::BitBlt(MemDC,0,0,rect.right,rect.bottom,hScreenDC,rect.left,rect.top,SRCCOPY);
hBitmap=(HBITMAP)::SelectObject(MemDC,hOldBMP);
mmage.Attach(hBitmap);
IStream* pStmImage = NULL;
HGLOBAL hMemBmp = GlobalAlloc(GMEM_MOVEABLE,0);//可移动的缓冲区
if (hMemBmp == NULL) return 0;
CreateStreamOnHGlobal(hMemBmp, FALSE, &pStmImage);//将内存区B作为流的起始
if (pStmImage == NULL)
{
GlobalFree(hMemBmp);
AfxMessageBox("为空");
return 0;
}
mmage.Save(pStmImage,Gdiplus::ImageFormatJPEG);
以上是把屏幕截图换成内存BMP
再在内存中把BMP换成JPG
这是我的一个桌面监控用的代码 完全没有文件IO 就在内存中转换
BMP-JPEG