void CTextOnbmpDlg::OnButton2()

{

 // TODO: Add your control notification handler code here

 FILE *fp=fopen("d:\\temp\\pic16001200\\000.bmp", "rb");

  if(fp == 0)

       return ;

  HDC hDC = ::GetDC(GetSafeHwnd());

     HDC hMemDC = CreateCompatibleDC(hDC);

  fseek(fp, sizeof(BITMAPFILEHEADER), 0);

  BITMAPINFOHEADER head;

  fread(&head, sizeof(BITMAPINFOHEADER), 1, fp);

  int bmpHeight = head.biHeight;

  int bmpWidth = head.biWidth;

  int biBitCount = head.biBitCount;

  int lineByte = (bmpWidth*biBitCount/8+3)/4*4;

  RGBQUAD *pColorTable;

  if(biBitCount == 8)

   {

       pColorTable = new RGBQUAD[256];

       fread(pColorTable, sizeof(RGBQUAD), 256, fp);

   }

  unsigned char *pBmpBuf = new unsigned char[lineByte*bmpHeight];

  fread(pBmpBuf, 1, lineByte*bmpHeight, fp);

  

   CDC *m_pMemDC;

  m_pMemDC = new CDC();

  CDC *pDC;

  pDC = GetDC();

  m_pMemDC->CreateCompatibleDC(pDC);

  CBitmap *m_pOldBmp = NULL;

  CBitmap *m_pMemBmp = new CBitmap();       //根据图片的大小创建一个兼容位图

  m_pMemBmp->CreateCompatibleBitmap(pDC, bmpWidth, bmpHeight);

  m_pOldBmp = m_pMemDC->SelectObject(m_pMemBmp);

  

   // 把图像的数据绘制到兼容位图上

   

   SetDIBits(m_pMemDC->GetSafeHdc(), (HBITMAP)m_pMemBmp->m_hObject,

       0, bmpHeight, (LPVOID)pBmpBuf, (BITMAPINFO*)&head, DIB_RGB_COLORS);

  m_pMemDC->SetBkMode(TRANSPARENT);

  m_pMemDC->SetTextColor(RGB(255, 0, 0));

 

   //设置字体

   CFont font;

  font.CreateFont(10,10,0,0,10,FALSE,FALSE,FALSE,ANSI_CHARSET,OUT_DEFAULT_PRECIS,OUT_DEFAULT_PRECIS,DEFAULT_QUALITY,FF_SWISS,"宋体");

  SelectObject(hMemDC, font);

  // 添加文字到指定位置

   m_pMemDC->TextOut(100, 100, "hello");

  

   unsigned char *pTemp = new unsigned char[lineByte*bmpHeight];

  GetDIBits(m_pMemDC->GetSafeHdc(), (HBITMAP)m_pMemBmp->m_hObject, 0, bmpHeight,

       (LPVOID)pTemp, (BITMAPINFO*)&head, DIB_RGB_COLORS);

  fclose(fp);

  

   char bmpwrite[] = "test2.bmp";

  fp = fopen(bmpwrite,"wb");

  BITMAPFILEHEADER fileHead;

  fileHead.bfType = 0x4D42;

  fileHead.bfSize = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+lineByte*bmpHeight;

  fileHead.bfReserved1 = 0;

  fileHead.bfReserved2 = 0;

  fileHead.bfOffBits = 54;

  fwrite(&fileHead, sizeof(BITMAPFILEHEADER), 1, fp);

  

   fwrite(&head, sizeof(BITMAPINFOHEADER), 1, fp);

  fwrite(pTemp, lineByte*bmpHeight, 1, fp);

  fclose(fp);

  

   delete m_pMemBmp;

  delete m_pMemDC;

  delete[] pBmpBuf;

 delete[] pTemp;

 MessageBox("VOER!");

}

在bmp上添加字符2的更多相关文章

  1. 在bmp上添加字符

    //打开位图文件,得到位图句柄   HBITMAP OpenBmpFile(HDC hDC, LPSTR lpszFileName)   {       HBITMAP hBmp = NULL;    ...

  2. linux shell 用sed命令在文本的行尾或行首添加字符

    转自 http://www.cnblogs.com/aaronwxb/archive/2011/08/19/2145364.html 昨天写一个脚本花了一天的2/3的时间,而且大部分时间都耗在了sed ...

  3. C#在图片上添加文字代码

    创建.NET WinForm程序,设置项目的默认命名空间为Keleyi.Com,在窗体上添加一个PictureBox控件pictureBox_keleyi_com和一个Button控件button_A ...

  4. 4.关于QT中的QFile文件操作,QBuffer,Label上添加QPixmap,QByteArray和QString之间的区别,QTextStream和QDataStream的区别,QT内存映射(

     新建项目13IO 13IO.pro HEADERS += \ MyWidget.h SOURCES += \ MyWidget.cpp QT += gui widgets network CON ...

  5. [Kernel]内核版本添加字符和内核版本'+'解决

    转自:http://blog.csdn.net/adaptiver/article/details/7225980 之前每次由于git仓库编译出来每次都带有'+', 导致都需要使用git archiv ...

  6. notepad++ 行首行尾添加字符

    有一次要处理SQL,拿到了脚本.但是要将其写入java 代码中,要在行首和行尾添加上引号.利用notepad++进行编辑. $表示行尾,^表示行首. 如上图,就这样.很高效. 如果只是在行尾添加字符, ...

  7. Linux sed命令操作 删除文件每一行的前k个字符、在文本的行尾或行首添加字符

    删除文件每一行的前k个字符 $ cat tmp.txt # 删除每行第一个字符 $ sed 's/.//' tmp.txt # 删除每行前两个字符 $ sed 's/..//' tmp.txt # 删 ...

  8. Linux shell sed命令在文件行首行尾添加字符

    昨天写一个脚本花了一天的2/3的时间,而且大部分时间都耗在了sed命令上,今天不总结一下都对不起昨天流逝的时间啊~~~ 用sed命令在行首或行尾添加字符的命令有以下几种: 假设处理的文本为test.f ...

  9. 如何在MyEclipse上添加更换JRE

    如何在myeclipse上添加更换JRE 由于兼容性的问题,有些WEB项目会依赖jdk的版本.如果需要更换jdk,那么,知道如何更换JRE的方法很有必要. 一种在myeclipse上添加和更换JRE的 ...

随机推荐

  1. Ubuntu16.04下伪分布式环境搭建之hadoop、jdk、Hbase、phoenix的安装与配置

    一.准备工作 安装包链接: https://pan.baidu.com/s/1i6oNmOd 密码: i6nc 环境准备 修改hostname: $ sudo vi /etc/hostname why ...

  2. css选择器:nth-child()与:nth-of-type()的差异

    :nth-child()和:nth-of-type()都是Css3中的伪类选择器,其作用相似却又不完全相同. 名词解释 :nth-child()选择器匹配其父元素的第n个子元素,不论元素类型. :nt ...

  3. Python基础篇(一)

    首先需要从Python的官网下载python的安装程序,下载地址为:www.python.org/downloads.最新的版本为3.4.1,下载和操作系统匹配的安装程序并安装即可. 安装好了后,在开 ...

  4. 利用QuickCHM制作chm

    CHM是一种常见的帮助文件格式,也是电子书的一种格式. 下面是使用QuickCHM制作chm的步骤: 1.先将所有的word文档存储为mht格式,点击,文件--另存为网页,如下 2.确保所有的word ...

  5. bzoj 4869: [Shoi2017]相逢是问候 [扩展欧拉定理 线段树]

    4869: [Shoi2017]相逢是问候 题意:一个序列,支持区间\(a_i \leftarrow c^{a_i}\),区间求和.在模p意义下. 类似于开根操作,每次取phi在log次后就不变了. ...

  6. 夏令营讲课内容整理 Day 3.

    本日主要内容是树与图.   1.树 树的性质 树的遍历 树的LCA 树上前缀和   树的基本性质: 对于一棵有n个节点的树,必定有n-1条边.任意两个点之间的路径是唯一确定的.   回到题目上,如果题 ...

  7. BZOJ 3514: Codechef MARCH14 GERALD07加强版 [LCT 主席树 kruskal]

    3514: Codechef MARCH14 GERALD07加强版 Time Limit: 60 Sec  Memory Limit: 256 MBSubmit: 1312  Solved: 501 ...

  8. FileBeat安装配置

    在ELK中因为logstash是在jvm上跑的,资源消耗比较大,对机器的要求比较高.而Filebeat是一个轻量级的logstash-forwarder,在服务器上安装后,Filebeat可以监控日志 ...

  9. ------ 解析因内核栈溢出导致的 “double fault” 蓝屏 ------

    -------------------------------------------------------------------------- 前一篇指出 tail_recursivef_fac ...

  10. MarkDown 编辑数学公式

    1. 参考博客:http://blog.csdn.net/smstong/article/details/44340637 1 数学公式的web解决方案 在网页上显示漂亮的数学公式,是多年来数学工作者 ...