- 热门文章:
- · 一款简单的RPG游戏
- · 一个简单字体察看器的实现
- · 实时语音通信的实现
- · VC中的图象打印问题
- · 通用图像类算法扩充库
- · 自己写 FILTER 改变画面颜色
- · 模拟 Windows 开机动态色带条
- · C++实现CD抓轨转WAV
- · 具有多种动态效果的闪屏
- · 规则迷宫的一种求解思想及算法
- · 坐标变换
- · 用DirectShow抓取影片帧
上一篇:VC实现波形不闪烁动态绘图 >>
图像与文字的合成
图像与文字的合成 下载本文示例工程 这个函数把位图数据一个像素一个像素的贴到一个兼容位图上,hdc是选择了兼容位图的兼容DC。 2.int GetDIBits( HDC hdc, // 兼容DC的句柄 HBITMAP hbmp, // 兼容位图的句柄 UINT uStartScan, // 扫描起始行的编号 UINT cScanLines, // 扫描的行的数目 LPVOID lpvBits, // 位图缓冲区的指针,要求已经分配空间 LPBITMAPINFO lpbi, // 位图信息 UINT uUsage // 颜色格式 ); 这个函数的作用和SetDIBits刚好相反,它把兼容位图内已存在的数据一个像素一个像素的拷贝到数据缓冲区(lpvBits)中。这样程序的实现就比较明朗了,首先根据位图的尺寸,创建一个兼容位图,然后把图片绘制到兼容位图,接着把文字也写到兼容位图上,然后再从兼容位图得到合成的数据。 二、关键程序段 CreateMemObject(CDC *pDC, BITMAPINFO *lpbmi, int* pnLineChar) { if (NULL == m_pMemDC) { m_pMemDC = new CDC(); m_pMemDC->CreateCompatibleDC(pDC); } if (m_pMemBmp != NULL) { m_pMemDC->SelectObject(m_pOldBmp); delete m_pMemBmp; m_pMemBmp = NULL; } m_pMemBmp = new CBitmap(); //根据图片的大小创建一个兼容位图 m_pMemBmp->CreateCompatibleBitmap(pDC, m_lpBMPHdr->biWidth, m_lpBMPHdr->biHeight); m_pOldBmp = m_pMemDC->SelectObject(m_pMemBmp); m_pMemDC->FillSolidRect(0, 0, m_lpBMPHdr->biWidth, m_lpBMPHdr->biHeight, RGB(255, 255, 255)); //把图像的数据绘制到兼容位图上 SetDIBits(m_pMemDC->GetSafeHdc(), (HBITMAP)m_pMemBmp->m_hObject, 0, m_lpBMPHdr->biHeight, (LPVOID)m_lpDIBits, (BITMAPINFO*)m_lpBMPHdr, DIB_RGB_COLORS); } SetBmpText(const CString &strText, BOOL bRepaint) { //本函数在位图上添加文本 m_strBmpText = strText; SetDIBits(m_pMemDC->GetSafeHdc(), (HBITMAP)m_pMemBmp->m_hObject, 0, m_lpBMPHdr->biHeight, (LPVOID)m_lpDIBits, (BITMAPINFO*)m_lpBMPHdr, DIB_RGB_COLORS); if (m_strBmpText.GetLength() > 0) { //制造透明和重影效果 m_pMemDC->SetBkMode(TRANSPARENT); m_pMemDC->SetTextColor(RGB(0, 0, 0)); m_pMemDC->TextOut(10, 10, m_strBmpText); m_pMemDC->SetTextColor(RGB(255, 255, 255)); m_pMemDC->TextOut(11, 11, m_strBmpText); } if (bRepaint) { Invalidate(); } }SetSaveBmpPath(LPCTSTR pszPath) { //从兼容位图中取出合成的数据 BYTE *pTemp = new BYTE[m_dwImageSize]; ZeroMemory(pTemp, m_dwImageSize); int nCount = GetDIBits(m_pMemDC->GetSafeHdc(), (HBITMAP)m_pMemBmp->m_hObject, 0, m_lpBMPHdr->biHeight, (LPVOID)pTemp, (BITMAPINFO*)m_lpBMPHdr, DIB_RGB_COLORS); } 三、图例 添加文字的效果图 四、结束语 有关位图的读写,参考了VC知识库在线杂志第21期中胡卓玮朋友写的《位图文件读写综述》一文。 本程序在win2000、vc6、174*218 24位真彩色图片下调试通过。 本程序存在以下问题: 1.不能在兼容DC里选择画笔、字体; 2.从兼容位图里取数据,仅对真彩色位图有效。 如果您知道如何解决以上问题,欢迎赐教。 地址:南京世纪新讯科技有限公司;msn:kylin_wei@hotmail.com |
下一篇:一款简单的RPG游戏 >>
相关文章:
- · WINCE下小游戏习作(Q11战斗机)
- · 地图比例尺绘制
- · 关于《黑白棋》网络版的开发文档和使用说明
- · 基于API的录音机程序
- · 虚拟地景生成系统 1.1v 介绍
- · 文本语音转换入门
- · 如何在VC中显示动态的GIF
- · Direct3D9初级教程
- · 利用OpenGL实现三维绘图
- · OpenGL入门介绍
- · MFC架构下的DirectX8
- · 真彩色转成高彩色的快速算法
- · 用MFC构造DIRECTX应用框架
- · 和我一起写屏保
- · 轻松实现对外部位图的浏览
- · 位图文件读写综述
- · 类似画笔的绘图控件
- · 利用OpenGL实现动画效果
- · 在VC++中实现自动连续播放多媒体
- · 如何播放 WAV 文件?
- · 池塘夜降彩色雨
- · 一个对话框里的动圆
- · 用RealPlayer控件制作的播放器
- · 透明位图的显示
- · 在资源文件中加入声音资源
- · 三元光栅操作
- · 图形显示特技算法
- · 使用DirectShow驱动摄像头
- · 在VC中调用DirectShow全屏播放视频
- · 闪屏图形特技效果的实现
- · (GDI+)Image类的序列化
- · 浮动窗体中的OpenGL多视图的实现
- · 使用GDI+进行图像处理
- · 在MFC程序中显示JPG/GIF图像
- · 如何获取屏幕上各颜色的红、绿、蓝值
- · 位图的淡入淡出显示
- · 根据文本串的长度改变窗口的大小
- · UDP轻松应用
