VC 创建BMP文件并显示

创建MFC CSTatic的pciture插件 设置为Frame

1 在头文件中初始化BMP文件头信息变量:

BITMAPFILEHEADERm_bmfHeader;
BITMAPINFOHEADERm_bmiHeader;
LPBYTE *lpbbmData;
BITMAPINFO *bmInfo;
UINT Width = 1024;
UINT Height = 768;


2 设置定时器:

SetTimer(1, 55, NULL);


3 初始化BMP文件信息

//m_bmfHeader
m_bmfHeader.bfType = 0x4D42;
m_bmfHeader.bfOffBits = 0x36;
m_bmfHeader.bfSize = 3 * Width * Height + m_bmfHeader.bfOffBits;
m_bmfHeader.bfReserved1 = 0;
m_bmfHeader.bfReserved2 = 0;


//m_bmiHeader
m_bmiHeader.biSize = sizeof(BITMAPINFOHEADER); //指示 文件信息头大小
m_bmiHeader.biWidth = Width; //图片宽度
m_bmiHeader.biHeight = Height; //图片高度
m_bmiHeader.biPlanes = 1;
m_bmiHeader.biBitCount = 24; //图片位数,位24位图
m_bmiHeader.biCompression = 0; //表示没有压缩  //因为没有压缩,所以可以设置为0
m_bmiHeader.biSizeImage = WIDTHBYTES(Width * m_bmiHeader.biBitCount) * Height;
m_bmiHeader.biXPelsPerMeter = 0x0;
m_bmiHeader.biYPelsPerMeter = 0x0;
m_bmiHeader.biClrUsed = 0; //表明使用所有索引色
m_bmiHeader.biClrImportant = 0; //说明对图象显示有重要影响的颜色索引的数目,0表示都重要。
//以上共占据14+16+24个字节
bmInfo = new BITMAPINFO;
bmInfo->bmiHeader = m_bmiHeader;
bmInfo->bmiColors->rgbBlue = 0x0;
bmInfo->bmiColors->rgbGreen = 0x0;
bmInfo->bmiColors->rgbRed = 0x0;
bmInfo->bmiColors->rgbReserved = 0x0;

lpbbmData = new LPBYTE[Height];


4 设置RGB像素

BOOL CShowPicDlg::CreatePic(UINT Width, UINT Height)
{
int i = 0, j = 0;
int WidthBytes = WIDTHBYTES(m_bmiHeader.biBitCount * m_bmiHeader.biWidth);

for (i = 0; i < Height; i++)
{
lpbbmData[i] = new BYTE[WidthBytes];
for (j = 0; j < WidthBytes / 3; j++)
{
lpbbmData[i][3 * j + 0] = (char)(1 * j + 2 * iTimerCount);
lpbbmData[i][3 * j + 1] = (char)(2 * j + 2 * iTimerCount);
lpbbmData[i][3 * j + 2] = (char)(3 * j + 2 * iTimerCount);
}
}

CClientDC cPicDc(GetDlgItem(IDC_STATIC_PICTURE));

CDC *pcPicDc;
CWnd *pWnd = GetDlgItem(IDC_STATIC_PICTURE);
pcPicDc = pWnd->GetDC();

for (i = 0; i < m_bmiHeader.biHeight; i++)
{
SetDIBitsToDevice(cPicDc, 0, 0, m_bmiHeader.biWidth, m_bmiHeader.biHeight, 0, 0, i, 1, lpbbmData[i], bmInfo, DIB_RGB_COLORS);
}

//for (i = 0; i < Height; i++)
//{
// free(lpbbmData[i]);
//}

return TRUE;
}


5 定时器函数

void CShowPicDlg::OnTimer(UINT_PTR nIDEvent)
{
iTimerCount ++;

QueryPerformanceFrequency(&m_nFreq);
QueryPerformanceCounter(&m_nBeginCount);
CreatePic(1024, 768);

//ShowPic(iTimerCount);
QueryPerformanceCounter(&m_nEndCount);

m_dTimer = (double)(((double)(m_nEndCount.QuadPart) - (double)(m_nBeginCount.QuadPart)) / (double)(m_nFreq.QuadPart));

if (iTimerCount == 4)
{
iTimerCount = 0;
}
}


注意事项:

1 计算每次初始化图片数据和显示所花的时间,再设置定时器的时间。

2 如果BMP图片的相关参数变量使用的局部变量,再每次显示完数据后需要释放内存。因此最好使用全局变量,不用每次分配内存、释放内存,比较耗费时间。

3 本来是用于接收网络传输过来的视频图片然后显示图片。上述代码只是其中一部分

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
vc 抓屏程序,截取当前屏幕核心代码,为了操作和显示方便,这里为其增加了一套窗体,你只需在启动程序后在窗体的空白处点击右键,即可将当前屏幕的内容截取下来,并显示在窗体中,与QQ抓图十分相似,但要像QQ截图那样细致专业,还需要添加更多的辅助功能 ================================================================================ MICROSOFT 基础类库: Test 项目概述 =============================================================================== 应用程序向导已为您创建了此 Test 应用程序。此应用程序 不仅介绍了使用 Microsoft 基础类的基本知识, 而且是编写应用程序的起点。 此文件包含组成 Test 应用程序的每个文件的内容摘要。 Test.vcproj 这是使用“应用程序向导”生成的 VC 项目的主项目文件。 它包含有关生成文件的 Visual C 版本的信息,以及 有关用“应用程序向导”所选择的平台、配置和 项目功能的信息。 Test.h 这是应用程序的主头文件。 它包含其他 项目特定的头文件(包括 Resource.h),并声明 CTestApp 应用程序类。 Test.cpp 这是包含应用程序 类 CTestApp 的主应用程序源文件。 Test.rc 这是程序使用的所有 Microsoft Windows 资源 的列表。 它包含存储在 RES 子目录中 的图标、位图和光标。 可直接在 Microsoft Visual C 中编辑此文件。 项目资源包含在 2052 中。 res\Test.ico 这是一个图标文件,用作应用程序的图标。 此 图标包含在主资源文件 Test.rc 中。 res\Test.rc2 此文件包含不由 Microsoft Visual C 编辑的资源。 应将所有不能由 资源编辑器编辑的资源放在此文件中。 ///////////////////////////////////////////////////////////////////////////// 对于主框架窗口: 项目将包含标准的 MFC 界面。 MainFrm.h, MainFrm.cpp 这些文件包含框架类 CMainFrame,该类派生自 CFrameWnd 并控制所有的 SDI 框架功能。 res\Toolbar.bmp位图文件用于创建工具栏的平铺图像。 初始工具栏和状态栏在 CMainFrame 类中构造。 使用资源编辑器编辑此工具栏位图,并 更新 Test.rc 中的 IDR_MAINFRAME TOOLBAR 数组以添加 工具栏按钮。 ///////////////////////////////////////////////////////////////////////////// 应用程序向导将创建一种文档类型和一个视图: TestDoc.h、TestDoc.cpp - 文档 这些文件包含 CTestDoc 类。 编辑这些文件 以添加特殊的文档数据并实现文件的保存和加载 (通过 CTestDoc::Serialize)。 TestView.h、TestView.cpp - 文档视图 这些文件包含 CTestView 类。 CTestView 对象用于查看 CTestDoc 对象。 ///////////////////////////////////////////////////////////////////////////// 其他功能: ActiveX 控件 应用程序支持使用 ActiveX 控件。 打印支持和打印预览支持 应用程序向导已生成了一些代码,通过从 MFC 库调用 CView 类中的成员函数来 处理打印、打印设置和打印预览命令。 ///////////////////////////////////////////////////////////////////////////// 其他标准文件: StdAfx.h、StdAfx.cpp 这些文件用于生成名为 Test.pch 的预编译头文件 (PCH) 和名为 StdAfx.obj 的预编译类型文件。 Resource.h 这是标准头文件,它定义新资源 ID。 Microsoft Visual C 将读取并更新此文件。 ///////////////////////////////////////////////////////////////////////////// 其他说明: 应用程序向导使用“TODO:” 来指示 应添加或自定义的源代码部分。 如果应用程序在共享 DLL 中使用 MFC,且应用程序使用的语言不是 操作系统的当前语言,则需要从 Microsoft Visual C 光盘上 Win\System 目录下将相应的本地化资源 MFC70XXX.DLL 复制到计算机的 system 或 system32 目录下, 并将其重命名为 MFCLOC.DLL。 (“XXX”代表 语言缩写。 例如,MFC70DEU.DLL 包含翻译成 德语的资源。) 如果不这样做,应用程序的某些 UI 元素 将保留为操作系统的语言。 /////////////////////////////////////////////////////////////////////////////

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值