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. Sonar 常用代码规则整理(二)

    摘要:公司部署了一套sonar,经过一段时间运行,发现有一些问题出现频率很高,因此有必要将这些问题进行整理总结和分析,避免再次出现类似问题. 作者原创技术文章,转载请注明出处 ============ ...

  2. 纯静态界面中(html)中通过js调用dll中的方法从数据库中读取数据

    最近接到一个离职员工的任务,一个搭好框架的ERP系统,看了两天,说一下看到的东西,整个项目目录中我没发现一个.aspx后缀的文件,全是静态HTML文件,之后发现他用的jquery简直看的头疼,不过大概 ...

  3. Go笔记-流程控制

    [if] if 是用于测试某个条件的语句,如果该条件(逻辑型或布尔型)成立,则会执行大括号内的代码,第一个大括号必须和if 或者else同行,否则非法 // 方式1 if condition { // ...

  4. MySQL计划任务(事件调度器)(Event Scheduler)[转]

    原文链接: http://www.cnblogs.com/c840136/articles/2388512.html MySQL5.1.x版本中引入了一项新特性EVENT,顾名思义就是事件.定时任务机 ...

  5. BZOJ 2743: [HEOI2012]采花 [树状数组 | 主席树]

    题意: 查询区间中出现次数$>2$的颜色个数 一眼主席树,区间中$l \le last[i] \le r$的个数减去$l \le last[last[i]] \le r$的个数,搞两颗主席树来做 ...

  6. POJ2318 TOYS[叉积 二分]

    TOYS Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 14433   Accepted: 6998 Description ...

  7. javascript 一些特殊的字符运算

    1.什么是 --> ? 这两个分开是很简单的两个运算符,比如--,一般表示自减,var i = 5;while(i){console.log(i--);},会打印出5,4,3,2,1: > ...

  8. Redis 学习(一) —— 安装、通用key操作命令

    一.Redis介绍 1.介绍 通常,在系统中,我们会把数据交由数据库来存储,但传统的数据库增删查改的性能较差,且比较复杂.根据 80/20 法则,百分之八十的业务访问集中在百分之二十的数据上.是否可以 ...

  9. Bruce Eckel的资源

    1 GitHub的技术博客 2 On Java 8 – Bruce Eckel 3 artima_weblogs - Bruce Eckel 4 back issues 5 eckel-oo-prog ...

  10. Vue.js源码——事件机制

    写在前面 因为对Vue.js很感兴趣,而且平时工作的技术栈也是Vue.js,这几个月花了些时间研究学习了一下Vue.js源码,并做了总结与输出.文章的原地址:https://github.com/an ...