不使用CFileDialog类产生保存和打开对话框的代码(直接拷贝)

本文详细介绍了如何使用Windows API创建一个BMP文件并生成对应的位图文件,包括获取位图信息、创建BITMAPINFO结构、计算位图大小、写入文件等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#ifdef _DEBUG
#define errhandler(msg,h)  printf("Error   Message:   %s,   HWND   is   %x ",msg, h)
#else
#define errhandler(msg,h)
#endif


PBITMAPINFO   CreateBitmapInfoStruct(HWND   hwnd,   HBITMAP   hBmp)
{  
 BITMAP   bmp;  
 PBITMAPINFO   pbmi;  
 WORD         cClrBits;  

 //   Retrieve   the   bitmap 's   color   format,   width,   and   height.  
 if   (! GetObject(hBmp,   sizeof(BITMAP),   (LPSTR)&bmp) ) 
  errhandler( "GetObject ",   hwnd);  

 //   Convert   the   color   format   to   a   count   of   bits.  
 cClrBits   =   (WORD)(bmp.bmPlanes   *   bmp.bmBitsPixel);  
 if   (cClrBits   ==   1)  
  cClrBits   =   1;  
 else   if   (cClrBits   <=   4)  
  cClrBits   =   4;  
 else   if   (cClrBits   <=   8)  
  cClrBits   =   8;  
 else   if   (cClrBits   <=   16)  
  cClrBits   =   16;  
 else   if   (cClrBits   <=   24)  
  cClrBits   =   24;  
 else   cClrBits   =   32;  

 //   Allocate   memory   for   the   BITMAPINFO   structure.   (This   structure  
 //   contains   a   BITMAPINFOHEADER   structure   and   an   array   of   RGBQUAD  
 //   data   structures.)  

 if   (cClrBits   !=   24)  
  pbmi   =   (PBITMAPINFO)   LocalAlloc(LPTR,
  sizeof(BITMAPINFOHEADER)
  +sizeof(RGBQUAD)*(1<< cClrBits));  

 //   There   is   no   RGBQUAD   array   for   the   24-bit-per-pixel   format.  

 else  
  pbmi   =   (PBITMAPINFO)   LocalAlloc(LPTR,  
  sizeof(BITMAPINFOHEADER));  

 //   Initialize   the   fields   in   the   BITMAPINFO   structure.  

 pbmi-> bmiHeader.biSize   =   sizeof(BITMAPINFOHEADER);  
 pbmi-> bmiHeader.biWidth   =   bmp.bmWidth;  
 pbmi-> bmiHeader.biHeight   =   bmp.bmHeight;  
 pbmi-> bmiHeader.biPlanes   =   bmp.bmPlanes;  
 pbmi-> bmiHeader.biBitCount   =   bmp.bmBitsPixel;  
 if   (cClrBits   <   24)  
  pbmi-> bmiHeader.biClrUsed   =   (1 <<cClrBits);  

 //   If   the   bitmap   is   not   compressed,   set   the   BI_RGB   flag.  
 pbmi-> bmiHeader.biCompression   =   BI_RGB;  

 //   Compute   the   number   of   bytes   in   the   array   of   color  
 //   indices   and   store   the   result   in   biSizeImage.  
 pbmi-> bmiHeader.biSizeImage   =   (pbmi-> bmiHeader.biWidth   +   7)/8
  *   pbmi-> bmiHeader.biHeight*cClrBits;  
 //   Set   biClrImportant   to   0,   indicating   that   all   of   the  
 //   device   colors   are   important.  
 pbmi-> bmiHeader.biClrImportant   =   0;  
 return   pbmi;  
}  


void   CreateBMPFile(HWND   hwnd,   LPTSTR   pszFile,   PBITMAPINFO   pbi,  
      HBITMAP   hBMP,   HDC   hDC)  
{  
 HANDLE   hf;                                   //   file   handle  
 BITMAPFILEHEADER   hdr;               //   bitmap   file-header  
 PBITMAPINFOHEADER   pbih;           //   bitmap   info-header  
 LPBYTE   lpBits;                             //   memory   pointer  
 DWORD   dwTotal;                             //   total   count   of   bytes  
 DWORD   cb;                                       //   incremental   count   of   bytes  
 BYTE   *hp;                                       //   byte   pointer  
 DWORD   dwTmp;  

 pbih   =   (PBITMAPINFOHEADER)   pbi;  
 lpBits   =   (LPBYTE)   GlobalAlloc(GMEM_FIXED,   pbih-> biSizeImage);

 if   (!lpBits)  
  errhandler( "GlobalAlloc ",   hwnd);  

 //   Retrieve   the   color   table   (RGBQUAD   array)   and   the   bits  
 //   (array   of   palette   indices)   from   the   DIB.  
 if   (!GetDIBits(hDC,   hBMP,   0,   (WORD)   pbih-> biHeight,   lpBits,   pbi,  
  DIB_RGB_COLORS))  
 {
  errhandler( "GetDIBits ",   hwnd);  
 }

 //   Create   the   .BMP   file.  
 hf   =   CreateFile(pszFile,  
  GENERIC_READ   |   GENERIC_WRITE,  
  (DWORD)   0,  
  NULL,  
  CREATE_ALWAYS,  
  FILE_ATTRIBUTE_NORMAL,  
  (HANDLE)   NULL);  
 if   (hf   ==   INVALID_HANDLE_VALUE)  
  errhandler( "CreateFile ",   hwnd);  
 hdr.bfType   =   0x4d42;                 //   0x42   =   "B "   0x4d   =   "M "  
 //   Compute   the   size   of   the   entire   file.  
 hdr.bfSize   =   (DWORD)   (sizeof(BITMAPFILEHEADER)   +  
  pbih-> biSize   +   pbih-> biClrUsed  
  *   sizeof(RGBQUAD)   +   pbih-> biSizeImage);  
 hdr.bfReserved1   =   0;  
 hdr.bfReserved2   =   0;  

 //   Compute   the   offset   to   the   array   of   color   indices.  
 hdr.bfOffBits   =   (DWORD)   sizeof(BITMAPFILEHEADER)   +  
  pbih-> biSize   +   pbih-> biClrUsed  
  *   sizeof   (RGBQUAD);  

 //   Copy   the   BITMAPFILEHEADER   into   the   .BMP   file.  
 if   (!WriteFile(hf,   (LPVOID)   &hdr,   sizeof(BITMAPFILEHEADER),  
  (LPDWORD)   &dwTmp,     NULL))  
 {
  errhandler( "WriteFile ",   hwnd);  
 }

 //   Copy   the   BITMAPINFOHEADER   and   RGBQUAD   array   into   the   file.  
 if(!WriteFile(hf,   (LPVOID)   pbih,   sizeof(BITMAPINFOHEADER)  
  +   pbih-> biClrUsed   *   sizeof   (RGBQUAD),  (LPDWORD)   &dwTmp,   (   NULL)) ) 
  errhandler( "WriteFile ",   hwnd);  

 //   Copy   the   array   of   color   indices   into   the   .BMP   file.  
 dwTotal   =   cb   =   pbih-> biSizeImage;  
 hp   =   lpBits;  
 if   (!WriteFile(hf,   (LPSTR)   hp,   (int)   cb,   (LPDWORD)   &dwTmp,NULL))  
  errhandler( "WriteFile ",   hwnd);  

 //   Close   the   .BMP   file.  
 if   (!CloseHandle(hf))  
  errhandler( "CloseHandle ",   hwnd);  

 //   Free   memory.  
 GlobalFree((HGLOBAL)lpBits);
}
///////////////////////////////////////////////////////////////////////////////////////////

标题基于SpringBoot+Vue的学生交流互助平台研究AI更换标题第1章引言介绍学生交流互助平台的研究背景、意义、现状、方法与创新点。1.1研究背景与意义分析学生交流互助平台在当前教育环境下的需求及其重要性。1.2国内外研究现状综述国内外在学生交流互助平台方面的研究进展与实践应用。1.3研究方法与创新点概述本研究采用的方法论、技术路线及预期的创新成果。第2章相关理论阐述SpringBoot与Vue框架的理论基础及在学生交流互助平台中的应用。2.1SpringBoot框架概述介绍SpringBoot框架的核心思想、特点及优势。2.2Vue框架概述阐述Vue框架的基本原理、组件化开发思想及与前端的交互机制。2.3SpringBoot与Vue的整合应用探讨SpringBoot与Vue在学生交流互助平台中的整合方式及优势。第3章平台需求分析深入分析学生交流互助平台的功能需求、非功能需求及用户体验要求。3.1功能需求分析详细阐述平台的各项功能需求,如用户管理、信息交流、互助学习等。3.2非功能需求分析对平台的性能、安全性、可扩展性等非功能需求进行分析。3.3用户体验要求从用户角度出发,提出平台在易用性、美观性等方面的要求。第4章平台设计与实现具体描述学生交流互助平台的架构设计、功能实现及前后端交互细节。4.1平台架构设计给出平台的整体架构设计,包括前后端分离、微服务架构等思想的应用。4.2功能模块实现详细阐述各个功能模块的实现过程,如用户登录注册、信息发布与查看、在线交流等。4.3前后端交互细节介绍前后端数据交互的方式、接口设计及数据传输过程中的安全问题。第5章平台测试与优化对平台进行全面的测试,发现并解决潜在问题,同时进行优化以提高性能。5.1测试环境与方案介绍测试环境的搭建及所采用的测试方案,包括单元测试、集成测试等。5.2测试结果分析对测试结果进行详细分析,找出问题的根源并
内容概要:本文详细介绍了一个基于灰狼优化算法(GWO)优化的卷积双向长短期记忆神经网络(CNN-BiLSTM)融合注意力机制的多变量多步时间序列预测项目。该项目旨在解决传统时序预测方法难以捕捉非线性、复杂时序依赖关系的问题,通过融合CNN的空间特征提取、BiLSTM的时序建模能力及注意力机制的动态权重调节能力,实现对多变量多步时间序列的精准预测。项目仅涵盖了数据预处理、模型构建与训练、性能评估,还包括了GUI界面的设计与实现。此外,文章还讨论了模型的部署、应用领域及其未来改进方向。 适合人群:具备一定编程基础,特别是对深度学习、时间序列预测及优化算法有一定了解的研发人员数据科学家。 使用场景及目标:①用于智能电网负荷预测、金融市场多资产价格预测、环境气象多参数预报、智能制造设备状态监测与预测维护、交通流量预测与智慧交通管理、医疗健康多指标预测等领域;②提升多变量多步时间序列预测精度,优化资源调度风险管控;③实现自动化超参数优化,降低人工调参成本,提高模型训练效率;④增强模型对复杂时序数据特征的学习能力,促进智能决策支持应用。 阅读建议:此资源仅提供了详细的代码实现模型架构解析,还深入探讨了模型优化实际应用中的挑战与解决方案。因此,在学习过程中,建议结合理论与实践,逐步理解各个模块的功能实现细节,并尝试在自己的项目中应用这些技术方法。同时,注意数据预处理的重要性,合理设置模型参数与网络结构,控制多步预测误差传播,防范过拟合,规划计算资源与训练时间,关注模型的可解释性透明度,以及持续更新与迭代模型,以适应数据分布的变化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值