`
netcome
  • 浏览: 479504 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

用VC实现将CView自绘图形输出为bmp文件

阅读更多
void CTrainView::SaveAsBmp(CString filename)
{
		//定义图形大小
	    CRect clientRC;
		this->GetClientRect(clientRC);
		int iWidth = clientRC.Width();
		int iHeight = clientRC.Height();
		int iPixel = 16;
		//图形格式参数
		BITMAPINFO *lpbmih = new BITMAPINFO;
		lpbmih->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
		lpbmih->bmiHeader.biWidth = iWidth;
		lpbmih->bmiHeader.biHeight = iHeight;
		lpbmih->bmiHeader.biPlanes = 1;
		lpbmih->bmiHeader.biBitCount = iPixel;
		lpbmih->bmiHeader.biCompression = BI_RGB;
		lpbmih->bmiHeader.biSizeImage = 0;
		lpbmih->bmiHeader.biXPelsPerMeter = 0;
		lpbmih->bmiHeader.biYPelsPerMeter = 0;
		lpbmih->bmiHeader.biClrUsed = 0;
		lpbmih->bmiHeader.biClrImportant = 0;

		//创建位图数据
		HDC hdc,hdcMem;
		HBITMAP hBitMap = NULL;
		CBitmap *pBitMap = NULL;
		CDC *pMemDC = NULL;
		BYTE *pBits;

		hdc = CreateIC(TEXT("DISPLAY"),NULL,NULL,NULL);
		hdcMem = CreateCompatibleDC(hdc);
		hBitMap = CreateDIBSection(hdcMem,lpbmih,DIB_PAL_COLORS,(void **)&pBits,NULL,0);
		pBitMap = new CBitmap;
		pBitMap->Attach(hBitMap);
		pMemDC = new CDC;
		pMemDC->Attach(hdcMem);
		pMemDC->SelectObject(pBitMap);
		//
		CRect rc(0,0,iWidth,iHeight);
		pMemDC->SetBkMode(TRANSPARENT);
		//添加自绘图形
		OnDraw(pMemDC);
														//DrawCurve(pMemDC,rc);
		//保存到文件并创建位图结构
		BITMAPFILEHEADER bmfh;
		ZeroMemory(&bmfh,sizeof(BITMAPFILEHEADER));
		*((char *)&bmfh.bfType) = 'B';
		*(((char *)&bmfh.bfType) + 1) = 'M';
		bmfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
		bmfh.bfSize = bmfh.bfOffBits + (iWidth * iHeight) * iPixel / 8;

		TCHAR szBMPFileName[128];
		int iBMPBytes = iWidth * iHeight * iPixel / 8;
		strcpy(szBMPFileName,filename);
		CFile file;
		if(file.Open(szBMPFileName,CFile::modeWrite | CFile::modeCreate))
		{
			file.Write(&bmfh,sizeof(BITMAPFILEHEADER));
			file.Write(&(lpbmih->bmiHeader),sizeof(BITMAPINFOHEADER));
			file.Write(pBits,iBMPBytes);
			file.Close();
		}

		pMemDC->DeleteDC();
		delete pMemDC; pMemDC = NULL;
		delete pBitMap; pBitMap = NULL;
		delete lpbmih; lpbmih = NULL;
}


void CTrainView::OnFileSaveAs()
{
	// TODO: 在此添加命令处理程序代码
		CFileDialog dlg(false,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "位图文件(*.bmp)|*.bmp|",NULL);
		if (dlg.DoModal()!= IDOK) return;
		CString filename = dlg.GetFileName() + ".bmp";
		SaveAsBmp(filename);
}
 
分享到:
评论

相关推荐

    vc++实现多文档预览dwg文件,并且可保存成bmp文件

    在VC++编程环境中,实现多文档预览DWG(AutoCAD图形数据格式)文件并将其保存为BMP(位图)文件是一项具有挑战性的任务,涉及到图形界面设计、文件读取与解析、图像处理等多个技术领域。下面我们将深入探讨这个过程...

    VC6.0环境实现图片播放的特效

    在本文中,我们将深入探讨如何在Visual C++ 6.0(简称VC6.0)环境中实现图片播放的特效。这对于初学者来说是一次宝贵的学习机会,能够帮助他们理解图形处理的基本原理,并掌握如何在MFC(Microsoft Foundation ...

    MFC图形在文档中的保存

    保存图形时,可以选择不同的文件格式,如.BMP、.PNG、.JPEG等。对于自定义的图形数据,可能需要选择一个能容纳复杂数据结构的格式,如XML,以便于解析和恢复。 7. **性能优化**: 对于大量图形的保存和加载,可能...

    vc简单画板实现

    6. 保存与加载:为了让用户能够保存和恢复他们的作品,你需要实现文件操作功能,如保存为BMP或PNG等图像格式。这需要用到Windows API中的文件I/O函数,以及图像数据的序列化和反序列化知识。 7. 用户界面设计:一个...

    VC图标处理与工具栏制作软件

    开发者可以利用这款工具创建符合项目风格的图标和工具栏资源,然后将它们集成到VC项目中。 总之,"VC图标处理与工具栏制作软件"是一个全面的解决方案,涵盖了从图标设计到工具栏制作的全过程。它对于那些需要提升...

    用VC++做的一个绘图功能程序

    8. **文件保存与加载**:为了保存用户的绘图作品,程序需要支持将图像数据导出为常见的图像格式,如BMP、JPEG或PNG。这通常涉及到使用GDI+或其他图像处理库来读写文件。 9. **用户界面设计**:除了核心绘图功能,...

    vc实现图片的百叶窗效果

    在VC++编程环境中,"vc实现图片的百叶窗效果"是一种常见的图形用户界面(GUI)特效,可以为应用程序增添动态感和趣味性。这种效果通常通过编程技术来实现,尤其是利用GDI(Graphics Device Interface)或者GDI+库来...

    VC 开发单文档多视图-支持显示bmp位图图片和txt文本源码

    在这个场景下,"VC开发单文档多视图-支持显示bmp位图图片和txt文本源码"是指一个使用C++编程语言和MFC(Microsoft Foundation Classes)库构建的项目,该项目实现了显示BMP图像和TXT文本的功能。以下将详细解释这个...

    visual c++ vc mfc 对话框 能打印文字(可指定字体字号) 图形(线条椭圆) 位图文件bmp.rar

    本教程将深入探讨如何在MFC对话框中实现打印功能,包括打印文字、指定字体和字号,以及绘制图形如线条、椭圆,并显示位图文件(BMP)。首先,我们需要了解MFC中的打印机制。 MFC提供了CPrintInfo类来处理打印相关的...

    MFC计算机图形学旋转变换,比例变换程序源代码

    旋转变换通常通过矩阵运算实现,使用一个旋转矩阵将原始坐标转换为旋转后的坐标。旋转矩阵是一个2x2的矩阵,其中包含旋转角度的余弦和正弦值。在MFC中,你可以使用`CDC`(设备上下文)类的成员函数来执行这些矩阵...

    VC_print.rar_VC_print_vc 打印

    本文将深入探讨“VC_print.rar_VC_print_vc 打印”这一主题,结合描述和标签,我们可以推测这是一个使用Visual C++(简称VC)实现的打印和打印预览解决方案。 1. **Visual C++简介**: Visual C++是微软公司开发的...

    vc-mfc图形界面编程

    通过创建一个设备上下文,然后复制屏幕内容到内存位图,最后保存为图像文件,如BMP、JPEG或PNG格式。 总的来说,"vc-mfc图形界面编程"实例集涵盖了创建GUI应用的基本步骤,包括窗口和控件的创建、用户事件的响应,...

    VC++实现图像读写

    使用CImage对象的`Load`函数,传入BMP文件的路径,将文件内容加载到对象中。例如:`CImage image; image.Load("path_to_your_image.bmp");` 4. **显示图像**: 可以通过CDC(Device Context)对象将图像绘制到...

    类似winodws画图程序的源码(VC)

    在VC++中,可以使用标准C++库(如fstream)来处理文件读写,然后利用GDI函数将图形数据转换为位图并保存到文件。 7. **撤销/重做机制**: 提供撤销和重做功能是提高用户体验的关键。这需要程序员设计一个栈结构来...

    VC游览大图

    在CView或CDialog派生类中,我们需要重载OnPaint函数,利用CDC对象在此函数中实现大图的绘制。 4. 图像的平滑缩放:对于大图,我们可能需要进行缩放以适应窗口大小。为了保持图像质量,可以使用CImage的 ...

    MFC绘图程序

    本篇文章将深入探讨基于VC 6.0 MFC编写的绘图程序,包括其核心功能、实现原理以及如何进行图形绘制和存储。 首先,MFC绘图程序的核心在于对Windows消息处理机制的运用和GDI(Graphics Device Interface)图形接口的...

    vc6使用CImage的示例程序

    例如,你可以使用`Load`函数加载一个BMP、JPEG或PNG文件。 2. **绘图操作**:`CImage`提供了丰富的绘图函数,如`Draw`用于在设备上下文上绘制图像,`StretchDraw`用于拉伸绘制,`DrawTransparent`实现透明绘制。 3...

    用MFC画图 打印 保存

    通过使用CDC、CView、CPrintInfo、CFile等类,开发者可以在VC6.0环境下构建功能丰富的Windows应用程序,实现丰富的图形交互和文件操作。在实际开发中,你可能需要根据具体需求调整和扩展这些基本示例,以满足更复杂...

    VC++多文档程序(可新建文本编辑器和画图程序)

    在打开文件时,CFile::Open函数用于打开文件,然后使用CEditView::SetWindowText或CEditView::LoadFile将文件内容加载到编辑器;保存文件时,使用CEditView::GetWindowText获取当前编辑区的内容,然后通过CFile::...

    vc编程实例

    在VC++编程环境中,"vc编程实例"通常指的是使用Microsoft Visual C++开发应用程序的实际示例。这个描述中的"BmpBrowser"可能是一个项目或程序的名字,它专注于处理位图(BMP)图像文件,这是一种常见的图像格式。让...

Global site tag (gtag.js) - Google Analytics