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. CSS——选择器2

    1.子选择器 (1).用于指定标签元素的第一代子元素,使用">"号. (2).例子: <style type="text/css"> .foo ...

  2. 史上最全的JFinal源码分析(不间断更新)

    打算 开始 写 这么 一个系列,希望 大家 喜欢,学习 本来就是 一个查漏补缺的过程,希望大家能提出建议.本篇 文章 是整个目录的向导,希望 大家 喜欢.本文 将以 包的形式跟大家做向导. Handl ...

  3. 高通HAL层之Sensor HAL

    高通的HAL层其实分为两种,一种是直接从kernel这边报数据上来的,由sensor HAL层来监听,另一种是走ADSP的模式,HAL层是通过qmi的形式进行监听的: 走ADSP架构的可以看下面的博客 ...

  4. es随想一

    一.安全问题 前段时间网上看到的,大量的MongoDB服务器和ElasticSearch服务器被黑客攻击,留下勒索信息. ElasticSearch的2种客户端连接方式,transport方式默认的9 ...

  5. RMI基础篇

    远程方法调用(Remote Method Invocation,RMI)从JDK1.1就已经实现,它大大增强了Java开发分布式应用的能力. RMI可以实现通过网络完成不同JVM间的通信,不仅可以传递 ...

  6. 济南清北学堂游记 Day 5.

    十一月的第一天.算下来在济南已经呆了接近一星期了...... 还剩九天...看着洛谷的倒计时心里直发慌. 也许我不该过多纠结于高级算法,基础也是很重要的. 今天晚上就自由的敲一些板子吧.最后的九天,让 ...

  7. Codeforces Round #402 (Div. 2)

    Codeforces Round #402 (Div. 2) A. 日常沙比提 #include<iostream> #include<cstdio> #include< ...

  8. 解决asp.net MVC中 当前上下文中不存在名称“model” 的问题

    在vs2013下打开同事上传的cshtml视图文件报错,出现当前上下文中不存在名称“model”,ViewBag,Url等等,在视图中也没有智能提示了:但是不影响编译运行,只是开发时候比较麻烦,但在同 ...

  9. django-rest-framework快速入门

    前言:第一次接触django-rest-framework是在实习的时候.当时也不懂,看到视图用类方法写的感觉很牛逼的样子.因为官网是英文的,这对我的学习还是有一点的阻力的,所以当时也没怎么学.真是太 ...

  10. 安装gitlab8.0在reconfigure报错

    现象: https://gitlab.com/gitlab-org/omnibus-gitlab/issues/303 参考方法: https://forum.gitlab.com/t/gitlab- ...