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(AutoCAD图形数据格式)文件并将其保存为BMP(位图)文件是一项具有挑战性的任务,涉及到图形界面设计、文件读取与解析、图像处理等多个技术领域。下面我们将深入探讨这个过程...
在本文中,我们将深入探讨如何在Visual C++ 6.0(简称VC6.0)环境中实现图片播放的特效。这对于初学者来说是一次宝贵的学习机会,能够帮助他们理解图形处理的基本原理,并掌握如何在MFC(Microsoft Foundation ...
保存图形时,可以选择不同的文件格式,如.BMP、.PNG、.JPEG等。对于自定义的图形数据,可能需要选择一个能容纳复杂数据结构的格式,如XML,以便于解析和恢复。 7. **性能优化**: 对于大量图形的保存和加载,可能...
6. 保存与加载:为了让用户能够保存和恢复他们的作品,你需要实现文件操作功能,如保存为BMP或PNG等图像格式。这需要用到Windows API中的文件I/O函数,以及图像数据的序列化和反序列化知识。 7. 用户界面设计:一个...
开发者可以利用这款工具创建符合项目风格的图标和工具栏资源,然后将它们集成到VC项目中。 总之,"VC图标处理与工具栏制作软件"是一个全面的解决方案,涵盖了从图标设计到工具栏制作的全过程。它对于那些需要提升...
8. **文件保存与加载**:为了保存用户的绘图作品,程序需要支持将图像数据导出为常见的图像格式,如BMP、JPEG或PNG。这通常涉及到使用GDI+或其他图像处理库来读写文件。 9. **用户界面设计**:除了核心绘图功能,...
在VC++编程环境中,"vc实现图片的百叶窗效果"是一种常见的图形用户界面(GUI)特效,可以为应用程序增添动态感和趣味性。这种效果通常通过编程技术来实现,尤其是利用GDI(Graphics Device Interface)或者GDI+库来...
在这个场景下,"VC开发单文档多视图-支持显示bmp位图图片和txt文本源码"是指一个使用C++编程语言和MFC(Microsoft Foundation Classes)库构建的项目,该项目实现了显示BMP图像和TXT文本的功能。以下将详细解释这个...
本教程将深入探讨如何在MFC对话框中实现打印功能,包括打印文字、指定字体和字号,以及绘制图形如线条、椭圆,并显示位图文件(BMP)。首先,我们需要了解MFC中的打印机制。 MFC提供了CPrintInfo类来处理打印相关的...
旋转变换通常通过矩阵运算实现,使用一个旋转矩阵将原始坐标转换为旋转后的坐标。旋转矩阵是一个2x2的矩阵,其中包含旋转角度的余弦和正弦值。在MFC中,你可以使用`CDC`(设备上下文)类的成员函数来执行这些矩阵...
本文将深入探讨“VC_print.rar_VC_print_vc 打印”这一主题,结合描述和标签,我们可以推测这是一个使用Visual C++(简称VC)实现的打印和打印预览解决方案。 1. **Visual C++简介**: Visual C++是微软公司开发的...
通过创建一个设备上下文,然后复制屏幕内容到内存位图,最后保存为图像文件,如BMP、JPEG或PNG格式。 总的来说,"vc-mfc图形界面编程"实例集涵盖了创建GUI应用的基本步骤,包括窗口和控件的创建、用户事件的响应,...
使用CImage对象的`Load`函数,传入BMP文件的路径,将文件内容加载到对象中。例如:`CImage image; image.Load("path_to_your_image.bmp");` 4. **显示图像**: 可以通过CDC(Device Context)对象将图像绘制到...
在VC++中,可以使用标准C++库(如fstream)来处理文件读写,然后利用GDI函数将图形数据转换为位图并保存到文件。 7. **撤销/重做机制**: 提供撤销和重做功能是提高用户体验的关键。这需要程序员设计一个栈结构来...
在CView或CDialog派生类中,我们需要重载OnPaint函数,利用CDC对象在此函数中实现大图的绘制。 4. 图像的平滑缩放:对于大图,我们可能需要进行缩放以适应窗口大小。为了保持图像质量,可以使用CImage的 ...
本篇文章将深入探讨基于VC 6.0 MFC编写的绘图程序,包括其核心功能、实现原理以及如何进行图形绘制和存储。 首先,MFC绘图程序的核心在于对Windows消息处理机制的运用和GDI(Graphics Device Interface)图形接口的...
例如,你可以使用`Load`函数加载一个BMP、JPEG或PNG文件。 2. **绘图操作**:`CImage`提供了丰富的绘图函数,如`Draw`用于在设备上下文上绘制图像,`StretchDraw`用于拉伸绘制,`DrawTransparent`实现透明绘制。 3...
通过使用CDC、CView、CPrintInfo、CFile等类,开发者可以在VC6.0环境下构建功能丰富的Windows应用程序,实现丰富的图形交互和文件操作。在实际开发中,你可能需要根据具体需求调整和扩展这些基本示例,以满足更复杂...
在打开文件时,CFile::Open函数用于打开文件,然后使用CEditView::SetWindowText或CEditView::LoadFile将文件内容加载到编辑器;保存文件时,使用CEditView::GetWindowText获取当前编辑区的内容,然后通过CFile::...
在VC++编程环境中,"vc编程实例"通常指的是使用Microsoft Visual C++开发应用程序的实际示例。这个描述中的"BmpBrowser"可能是一个项目或程序的名字,它专注于处理位图(BMP)图像文件,这是一种常见的图像格式。让...