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

 1 unsigned char *pTemp;
 2 BYTE OsdY = 0;
 3 BYTE OsdU = 0;
 4 BYTE OsdV = 0;
 5
 6 void OSDSetTextColor(BYTE OsdR, BYTE OsdG, BYTE OsdB)
 7 {
 8     OsdY = 0.25*OsdR+0.504*OsdG+0.098*OsdB+16;
 9     OsdU = -0.148*OsdR-0.291*OsdG+0.439*OsdB+128;
10     OsdV = 0.439*OsdR-0.368*OsdG-0.071*OsdB+128;
11 }
12
13 void CTest0Dlg::setOSD()
14 {
15     FILE *fp=fopen("d:\\temp\\OSD.bmp", "rb");
16     if (fp == 0)
17         return;
18
19     HDC hDC = ::GetDC(GetSafeHwnd());
20     HDC hMemDC = CreateCompatibleDC(hDC);
21     fseek(fp, sizeof(BITMAPFILEHEADER), 0);
22     BITMAPINFOHEADER head;
23     fread(&head, sizeof(BITMAPINFOHEADER), 1, fp);
24     int bmpHeight = head.biHeight;
25     int bmpWidth = head.biWidth;
26     int biBitCount = head.biBitCount;
27     int lineByte = (bmpWidth*biBitCount/8+3)/4*4;
28     RGBQUAD *pColorTable;
29     unsigned char *pBmpBuf = new unsigned char[lineByte*bmpHeight];
30     fread(pBmpBuf, 1, lineByte*bmpHeight, fp);
31     memset(pBmpBuf,0, lineByte*bmpHeight);
32
33     CDC *m_pMemDC;
34     m_pMemDC = new CDC();
35     CDC *pDC;
36     pDC = GetDC();
37     m_pMemDC->CreateCompatibleDC(pDC);
38     CBitmap *m_pOldBmp = NULL;
39     CBitmap *m_pMemBmp = new CBitmap();//根据图片的大小创建一个兼容位图
40     m_pMemBmp->CreateCompatibleBitmap(pDC, bmpWidth, bmpHeight);
41     m_pOldBmp = m_pMemDC->SelectObject(m_pMemBmp);
42
43     // 把图像的数据绘制到兼容位图上
44     SetDIBits(m_pMemDC->GetSafeHdc(), (HBITMAP)m_pMemBmp->m_hObject, 0, bmpHeight, (LPVOID)pBmpBuf, (BITMAPINFO*)&head, DIB_RGB_COLORS);
45     m_pMemDC->SetBkMode(TRANSPARENT);
46     m_pMemDC->SetTextColor(RGB(255, 0, 0));//RGB标记色
47     OSDSetTextColor(0, 0, 0);//OSD显示色
48
49     //设置字体
50     CFont font;
51     font.CreateFont(20,15,0,0,10,FALSE,FALSE,FALSE,ANSI_CHARSET,OUT_DEFAULT_PRECIS,OUT_DEFAULT_PRECIS,DEFAULT_QUALITY,FF_SWISS,"宋体");
52     SelectObject(hMemDC, font);
53     ///////////////////////////
54     SYSTEMTIME st;
55     CString strDate,strTime;
56     GetLocalTime(&st);
57     strDate.Format("时间 %04d-%02d-%02d ",st.wYear,st.wMonth,st.wDay);
58     strTime.Format("%02d:%02d:%02d",st.wHour,st.wMinute,st.wSecond);
59     // 添加文字到指定位置
60     m_pMemDC->TextOut(20, 40, strDate+strTime);
61
62     pTemp = new unsigned char[lineByte*bmpHeight];
63     GetDIBits(m_pMemDC->GetSafeHdc(), (HBITMAP)m_pMemBmp->m_hObject, 0, bmpHeight, (LPVOID)pTemp, (BITMAPINFO*)&head, DIB_RGB_COLORS);
64     fclose(fp);
65
66     delete m_pMemBmp;
67     delete m_pMemDC;
68     delete[] pBmpBuf;
69
70
71     //MessageBox("VOER!");
72 }
73
74 调用部分
75 //////////////////////////////////////////////////////////////////////////////////////
76     setOSD();
77     for (int i=0;i<80;i++)
78     {
79         for (int k=0;k<640;k++)
80         {
81             //dc.SetPixel(k,79-i,RGB(pTemp[(i*640+k)*3+2],pTemp[(i*640+k)*3+1],pTemp[(i*640+k)*3+0]));
82             if (pTemp[(i*640+k)*3+2]!=0)//需要叠加  通过标记色过滤
83             {
84                 pFrameYUV->data[0][(79-i)*720+k]=OsdY;
85                 if ((79-i)%2==0)
86                 {
87                     pFrameYUV->data[1][(79-i)*720/4+k/2]=OsdU;
88                     pFrameYUV->data[2][(79-i)*720/4+k/2]=OsdV;
89                 }
90             }
91         }
92     }
93 /////////////////////////////////////////////////////////////////////////////////////////
94
95     //拷贝数据yuv420,也可预先改变指针
96     memcpy(image->pixels[0],    pFrameYUV->data[0],720*576);
97     memcpy(image->pixels[2],    pFrameYUV->data[1],720*576/4);
98     memcpy(image->pixels[1],    pFrameYUV->data[2],720*576/4);

http://blog.csdn.net/mao0514/article/details/41979245

时间: 2024-11-07 18:46:34

DirectX--yuv420p上实现的字符叠加的相关文章

RGB图像数据字符叠加,图像压缩(ijl库),YUV转RGB

jackyhwei 发布于 2010-01-01 12:02 点击:3218次  来自:CSDN.NET 一些非常有用的图像格式转换及使用的源代码,包括RGB图像数据字符叠加,图像压缩(ijl库),YUV转RGB等等. TAG: YUV  YUV转RGB  RGB  BMP转JPG  文字叠加   /**************************************File: yuvrgb24.hDescription: header file for yuvrgb24.cDate:

嵌入式开发之字符叠加---gb2313 国标码,utf8 国际码,unicode 无码

(1)国标码简介 (2)编码转换 (3)时间获取 (4)显示切换 最近做了个字符叠加,包括时间叠加,字符中文叠加,位置移动,等功能开启.因为一般的字符叠加的点阵式16位,然后填充着16位的编码是gb2313编码,比如说视讯两个字, 先是视: 编码类型 二进制编码 十六进制编码 Unicode 10001001 11000110 0x89C6 UTF-8 11101000 10100111 10000110 0xE8A786 GB2312 11001010 11010011 0xCAD3 然后讯:

树莓派上的GPIO字符驱动程序

前言 主要是在嵌入式Linux(树莓派)中如何使用已有的函数库编写应用程序操纵GPIO,如何编写字符设备驱动程序在内核程序中使用GPIO 硬件连接图 虚拟文件系统操作GPIO Linux可以通过访问sys/class/gpio下的一些文件,通过对这些文件的读写来实现对于GPIO的访问. 树莓派下面的可用的GPIO如下图所示,需要注意树莓派一代和二代的区别 首先用一个小灯来测试下操作.首先向export中写入18,表示启用18号gpio端口,执行之后,可以看到该目录下多出了一个gpio18的目录.

地图组件上的自定义区域叠加层显示 ArcGis + GeoJson

最近参与了一个IOT环境项目,需要对某个城市的某几个区域做环境监控与治理,其中就用到了地图叠加层的功能,粗看很复杂,其实很简单,先来看一下效果,然后再来讲一下如何实现的: 中间的黄色轮廓线包括的几块区域就是通过gis坐标和百度的叠加层来实现的,来简单说一下实现的步骤吧: 首先需要有每块区域的坐标集合,这个主要是由工程队施工人员,在当地采集坐标,采集后会生成相应的文件给到开发人员 这些文件主要为如下: 其中这个红框内的文件是我们最需要的文件,他是一个shp文件,轮廓文件,开发人员需要转换为一个js

poj1423---求一个大数的位数方法,我猜网站上统计输入字符少于多少位的那个算法

法一:对一个数求它的对数,+1取整为其位数 问题转化为int (log10(N!)+1),对数性质log10(N!)=log10(N)+log10(N-1)+...+log10(1) /*用log10求位数*/ #include<stdio.h> #include<math.h> int main() { int tim,N; scanf("%d",&tim); while(tim--) { int i; double NumOfDigit=1; sca

MFC初步----用C语言调用winapi在HDC上画图或字符

HDC是一种“可画”的设备,WIN_PAINT是windows的一种消息事件,所有窗体可见部分都是他的杰作 实验环境:win7下vs2010 定义hdc设备,并利用WIN_PAINT绘画 LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT pt; HDC hdc;//DC句柄,可供画的设备 RECT rect;//方框,也就是窗体的空白部分,可供放置组件和其他元

在开发板上显示字符和中文

我们在写lcd驱动程序时,测试时可以在lcd上显示信息,那么他怎么能显示出信息呢,内核里有字符点阵编码,我们在内核里打开字符编码,可以看到很多字符点阵也称为字体.下面我们来自已写一个应用程序在lcd显示屏上显示字母以及显示中文.字符编码 在前面有一个随笔里有写,对于英文字母,用ascii码即可,那么如果我们要显示中文的话应该是要用到汉字库编码即GBK编码表,下面来写一段程序来试验和理解如何在开发板的lcd上显示. 一.首先我们要获得lcd的信息,例:固定信息和可变信息等 这些我们都需要知道可以操

史上最通俗,彻底搞懂字符乱码问题的本质

1.引言 IM等社交应用的开发工作中,乱码问题也很常见,比如: 1)IM聊天消息中的Emoji表情为什么发给后端后MySQL数据库里会乱码: 2)文件名中带有中文的大文件聊天消息发送后,对方看到的文名是乱码: 3)Http rest接口调用时,后端读取到APP端传过来的参数有中文乱码问题: ... ... 那么,对于乱码这个看似不起眼,但并不是一两话能讲清楚的问题,是很有必要从根源了解字符集和编码原理,知其然知其所以然显然是一个优秀码农的基本素养,所以,便有了本文,希望能帮助到你. 2.正文概述

DirectX中文手册

目  录 第一章 DirectX基础(初级篇) 第一节  什么是DirectX 一.什么是DirectX ? 二.DirectX的组成部分 三.关于DirectDraw 四.为什么要使用DirectDraw? 五.DirectX5.0的新特性? 六.什么是部件对象模型(COM) 七.自我检测 第二节  如何安装和使用DirectX 一.编译库和运行库 二.安装 VC++ 5.0 三.安装 DirectX5.0 的 SDK 四.DirectX 5.0 的文件说明 五.卸载 DirectX 第三节