用DIB叠加字符

原创 2008年09月28日 10:40:00


#ifndef __ADD_TEXT_H
#define __ADD_TEXT_H
class CAddText
{
public:
 //叠加字符使用
    CFont m_font;
 CFont *m_poldfont;
 CDC m_memdc;
 CBitmap m_memBitmap,*m_poldBitmap;
 BYTE *m_pTextBits;
    int m_nWidth;
 int m_nHeight;
    CAddText(int nWidth,int nHeight);
 CAddText();
 ~CAddText();
 void InitGdiResource();
 void FreeGdiResource();
    void PrintDataInfo(LPBYTE lpDIB,LPCTSTR szRoadName,int x,int y,int nPitch);

};

#endif

 

 

 

#include "stdafx.h"
#include "AddText.h"

CAddText::CAddText(int nWidth,int nHeight)
{
 m_nWidth = nWidth;
 m_nHeight = nHeight;
 InitGdiResource();
}

CAddText::CAddText()
{
 m_nWidth = 768;
 m_nHeight = 16;
 InitGdiResource();
}

CAddText::~CAddText()
{
 FreeGdiResource();
}

void CAddText::InitGdiResource()
{
    VERIFY(m_font.CreateFont(
  m_nHeight,                        // nHeight
  0,                         // nWidth
  0,                         // nEscapement
  0,                         // nOrientation
  FW_BOLD,                 // nWeight
  FALSE,                     // bItalic
  FALSE,                     // bUnderline
  0,                         // cStrikeOut
  ANSI_CHARSET,              // nCharSet
  OUT_DEFAULT_PRECIS,        // nOutPrecision
  CLIP_DEFAULT_PRECIS,       // nClipPrecision
  DEFAULT_QUALITY,           // nQuality
  DEFAULT_PITCH | FF_SWISS,  // nPitchAndFamily
  _T("宋体")));   
 
 m_memdc.CreateCompatibleDC(NULL);
 m_memBitmap.CreateBitmap(m_nWidth,m_nHeight,1,1,NULL);
 m_poldBitmap = m_memdc.SelectObject(&m_memBitmap);
 m_poldfont = (CFont *)m_memdc.SelectObject(&m_font);
 m_memdc.SetBkColor(0x00);
 m_memdc.SetBkMode(TRANSPARENT);
 m_memdc.SetTextColor(0xffffff);
 m_pTextBits = new BYTE[m_nWidth*m_nHeight/8];
}

void CAddText::FreeGdiResource()
{
    m_memdc.SelectObject(m_poldBitmap);
 m_memdc.SelectObject(m_poldfont);
    m_memBitmap.DeleteObject();
 m_font.DeleteObject();
 m_memdc.DeleteDC();
 delete m_pTextBits;
}

 


//必须保证输入的DIB为768x304
//在图片上打印字符的函数,为了加快速度,并且不破坏原来的图像,采用mask位图的方式
//参数:LPBYTE lpdes, 384*288 24bit位图数据块
//        LPCTSTR szRoadName 要打印的路口名称
void CAddText::PrintDataInfo(LPBYTE lpDIB,LPCTSTR szRoadName,int x,int y,int nPitch)
{
 m_memdc.FillSolidRect(0,0,m_nWidth,m_nHeight,0);
 m_memdc.TextOut(0,0,szRoadName);
 
 BYTE *lpsrc;
    BYTE *lpdes;
 int i,j,k;
 //将掩码位图块拷贝出来
 m_memBitmap.GetBitmapBits(m_nWidth*m_nHeight/8,m_pTextBits);
 lpsrc = m_pTextBits;
 lpdes = lpDIB+nPitch*y+x*3;// + 768*288*3;
 //先将叠加条变成白底色
 INT line = m_nWidth/8;
 for(i=0;i<m_nHeight;i++)
 {
  lpdes = lpDIB+nPitch*(y+i)+x*3;
  for(j=0;j<line;j++)
  {  
   for(k=7;k>=0;k--)
   {
    if((*lpsrc)&(1<<k))
    {
        //叠加蓝色字符,下面的语句相当于 lpdes[0] = 0xff; lpdes[1] = 0x00; lpdes[2] = 0x00;
     *(DWORD *)lpdes = (*(DWORD *)lpdes&0xff0000ff)|0x000000ff; 
    }
    lpdes += 3;
   }
   lpsrc++;
  }

 }
}

MFC基础知识(三)——用DIB位图显示图像

本文主要介绍:DIB位图的一些基础知识和在MFC中如何利用DIB位图显示图像。 一、DIB位图结构及注意点: 1.DIB结构: 一个完整的DIB由两部分组成:一个BITMAPINFO结构和一个存...
  • hong__fang
  • hong__fang
  • 2015年03月11日 15:35
  • 2360

opencv字符叠加

主要参考文献:  参考1  参考2 参考3 参考4  putText() 函数是不支持\n换行的。。 所以要自己去换行。 CvScalar font_size; Text.getFont(N...
  • nemo2011
  • nemo2011
  • 2015年02月06日 11:53
  • 2518

MFC绘图必知 DDB与DIB的区别

DDB与DIB的区别(转载): DDB(设备相关位图) DDB依赖于具体设备: DDB的颜色模式必需与输出设备相一致。例如,如果当前的显示设备是256色模式,那么DDB必然也是256色的...
  • hnust_xiehonghao
  • hnust_xiehonghao
  • 2014年07月10日 13:02
  • 3873

视频监控系统中的字符叠加设计

1 实现OSD功能的传统方案视频监控系统通常存在多个被监控点,最终送入监视器的信号可能来自几十路、甚至几百路视频信号源。在监控端,这些视频信号可通过大规模视频矩阵 开关切换到有限的监视器上。这样,在对...
  • xianfengdesign
  • xianfengdesign
  • 2007年06月11日 18:20
  • 839

DIB位图文件的格式、读取、保存和显示

一、位图文件结构位图文件由三部分组成:文件头 + 位图信息 + 位图像素数据1、位图文件头。位图文件头主要用于识别位图文件。以下是位图文件头结构的定义:typedef struct tagBITMAP...
  • sjiang2142
  • sjiang2142
  • 2011年05月25日 15:39
  • 7632

海康摄像头实时显示与字符叠加详解

说明文章详细叙述了海康摄像头的两种实时显示方法——基于SDK 实现解码显示和基于数据流回调显示,并且讲述了这在两种显示方法下如何往画面添加字符和图像,最后比较了这两种方法的优劣。文章全程给以详细的程序...
  • u013288466
  • u013288466
  • 2017年08月26日 17:38
  • 3538

DirectX--yuv420p上实现的字符叠加

unsigned char *pTemp; BYTE OsdY = 0;BYTE OsdU = 0;BYTE OsdV = 0;void OSDSetTextColor(BYTE OsdR, BYTE...
  • mao0514
  • mao0514
  • 2014年12月17日 11:15
  • 2391

视频矩阵系统中三代OSD字符叠加技术全面解析

视频矩阵系统中三代OSD字符叠加技术全面解析屏显信息更丰富 中文效果更出色 使用设置更灵活   ——视频矩阵系统中三代OSD字符叠加技术全面解析   前言:    在以矩阵为控制中枢的视...
  • dongliqiang2006
  • dongliqiang2006
  • 2010年08月12日 10:57
  • 2420

unknown dib file format

Opengl:unknown dib file format
  • chenqiai0
  • chenqiai0
  • 2012年12月19日 09:27
  • 3418

Opencv310图片Mat中叠加汉字(freetype+VS2015)

新版opencv图片中叠加汉字(Freetype)
  • zmdsjtu
  • zmdsjtu
  • 2016年11月11日 21:27
  • 2332
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用DIB叠加字符
举报原因:
原因补充:

(最多只允许输入30个字)