在对话框中的绘图怎样保存为jpg格式 如题,在对话框的picture控件绘图,我现在可以保存为bmp格式,要保存为jpg格式怎么办? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你需要jpeg压缩算法当然,你也可以直接使用GDI+的函数来实现 建议上网下载一个CxIMAGE,里面对各种格式都支持,免费的开源的,还有例子,在codeproject上面,我给你网址:http://www.codeproject.com/KB/graphics/cximage.aspx先调用CxImage(BYTE * buffer, DWORD size, DWORD imagetype);将buff传入,当然,也可以传入文件名,你自己看头文件;然后再调用 bool Save(const TCHAR* filename, DWORD imagetype);即可!很简单好用! 用GDI+转换图形格式 http://dev.csdn.net/article/50/50911.shtm CxImage是第三方的一个非常好的库,可以对图像作很多需要的操作 用VC自带的CImage就可以了,方法是各种中最简单的。 不用gdi+,用gdi怎么实现呢,保存bmp格式的有一个函数就行了, 可以尝试自己写一个函数把bmp的位图转成jpg图片。只要知道jpg的文件格式就行,网上有很多介绍数据格式的。 void SaveToJpg2D(CString strFilePath){ CBitmapFile jpg;//此处是定义了一个现有类的对象 CBitmap bitmap; CClientDC dc(this); CDC memDC; memDC.CreateCompatibleDC(&dc); //此处仅是赋值了保存区域的宽度和高度 int Width = m_BitmapeCreate.x_pix; int Height = m_BitmapeCreate.y_pix; CRect rectSaveDev(0, 0, Width, Height);//设置保存矩形的设备坐标 rectSaveDev.NormalizeRect(); bitmap.CreateCompatibleBitmap(&dc, Width, Height); CBitmap* pOldBitmap = memDC.SelectObject(&bitmap);//将位图选入设备环境 memDC.FillSolidRect(rectSaveDev, RGB(255,255,255));//绘图区域白色填充 memDC.SetMapMode(MM_LOMETRIC);//设置映射模式 memDC.SetViewportOrg(0,rectSaveDev.bottom);//设置视口坐标 memDC.SetWindowOrg(m_windoworg);//设置窗口坐标 CRect rectSaveLog = rectSaveDev; memDC.DPtoLP(&rectSaveLog);//将保存区域的设备坐标转换为逻辑坐标 rectSaveLog.NormalizeRect(); //==================== //此处是你自己的绘图函数,绘图要在逻辑坐标中绘制 //==================== memDC.SelectObject(pOldBitmap); LPTSTR lpFilePath = const_cast<LPTSTR>(strFilePath.operator LPCTSTR()); jpg.SaveWindowAsFile(lpFilePath, JPG_FILE, &bitmap);} 我是想要把dc上绘制的图形直接保存为jpg或者png啊,非得用格式转换吗》 不需要用GDI+, 也不需要知道JPEG的编码算法, 直接使用jpeglib就可以了: 开源代码, 含Decoder和Encoder程序, 不仅仅可以用在PC上, 甚至可以用在嵌入系统上; 想在wince下实现这种效果?请问有相应的库没?急 关于串口的一个问题 把列表的数据导出到EXCEL的 windows用户登陆有消息么? 问源码管理工具 第一次用vc,就是不顺畅,请教几个问题? 怎样判断文件存储的编码格式 vc可以写程序直接读写网卡寄存器吗? 四舍五入问题 关于在控件里不能发出事件的问题???????? 自绘滚动条-- 使用COOLsblib.c的问题 急求OPENSSL C/C++ 连接HTTPS的例子
当然,你也可以直接使用GDI+的函数来实现
先调用CxImage(BYTE * buffer, DWORD size, DWORD imagetype);将buff传入,当然,也可以传入文件名,你自己看头文件;
然后再调用 bool Save(const TCHAR* filename, DWORD imagetype);即可!很简单好用!
http://dev.csdn.net/article/50/50911.shtm
只要知道jpg的文件格式就行,网上有很多介绍数据格式的。
{
CBitmapFile jpg;//此处是定义了一个现有类的对象 CBitmap bitmap;
CClientDC dc(this);
CDC memDC; memDC.CreateCompatibleDC(&dc); //此处仅是赋值了保存区域的宽度和高度
int Width = m_BitmapeCreate.x_pix;
int Height = m_BitmapeCreate.y_pix; CRect rectSaveDev(0, 0, Width, Height);//设置保存矩形的设备坐标
rectSaveDev.NormalizeRect();
bitmap.CreateCompatibleBitmap(&dc, Width, Height); CBitmap* pOldBitmap = memDC.SelectObject(&bitmap);//将位图选入设备环境 memDC.FillSolidRect(rectSaveDev, RGB(255,255,255));//绘图区域白色填充
memDC.SetMapMode(MM_LOMETRIC);//设置映射模式
memDC.SetViewportOrg(0,rectSaveDev.bottom);//设置视口坐标
memDC.SetWindowOrg(m_windoworg);//设置窗口坐标 CRect rectSaveLog = rectSaveDev;
memDC.DPtoLP(&rectSaveLog);//将保存区域的设备坐标转换为逻辑坐标
rectSaveLog.NormalizeRect(); //====================
//此处是你自己的绘图函数,绘图要在逻辑坐标中绘制
//==================== memDC.SelectObject(pOldBitmap);
LPTSTR lpFilePath = const_cast<LPTSTR>(strFilePath.operator LPCTSTR());
jpg.SaveWindowAsFile(lpFilePath, JPG_FILE, &bitmap);
}
不需要用GDI+, 也不需要知道JPEG的编码算法, 直接使用jpeglib就可以了: 开源代码, 含Decoder和Encoder程序, 不仅仅可以用在PC上, 甚至可以用在嵌入系统上;