为什么位图叠加文字后,字符是反的,是什么原因?

daisydew 2007-08-31 09:10:00
//在图片底部叠加文字
void TextInBmpFile2(BYTE *pBuf, int nImageWidth, int nImageHeight, const char *pText)
{
BITMAPINFOHEADER bmih;

memset(&bmih,0,sizeof(BITMAPINFOHEADER));
bmih.biSize = sizeof(BITMAPINFOHEADER);
bmih.biWidth = nImageWidth;
bmih.biHeight = nImageHeight;
bmih.biPlanes = 1;
bmih.biBitCount = 24;
bmih.biSizeImage = nImageWidth*nImageHeight*3;

HDC BmpDC;
HBITMAP hBitmap;
RECT rect;

memset(&rect, 0, sizeof(RECT));
rect.right = nImageWidth;
rect.bottom = nImageHeight;

BmpDC = CreateCompatibleDC(NULL);
hBitmap = CreateDIBitmap(GetDC(NULL), &bmih, CBM_INIT, pBuf, (BITMAPINFO*)&bmih, DIB_RGB_COLORS);

if (hBitmap) {
SelectObject(BmpDC, hBitmap);
// SetBkMode(BmpDC, TRANSPARENT);
DrawText(BmpDC, pText, strlen(pText), &rect, DT_SINGLELINE | DT_BOTTOM | DT_LEFT);
GetDIBits(BmpDC, hBitmap, 1, nImageHeight, pBuf, (BITMAPINFO*)&bmih, DIB_RGB_COLORS);
}
DeleteDC(BmpDC);
}

str.Format("%s | %-16s | %.2fkm/h ",
g_pView->CamInfo[nCurCam].strRoadName,
g_pView->m_vehrec.vehid,
nSpeed);
TextInBmpFile2(pByte, pFh->w, pFh->h, str);
pTemp = pByte;
pDstByte = pImageBuf;
memcpy(pImageBuf, pByte, nWidth * nHeight * 3);
...全文
315 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
daisydew 2007-09-01
  • 打赏
  • 举报
回复
是这样的,我从12bit的视频流里取出高8位一帧数据是对的,但直接从8bit的数据就不对了,显示在左上方,而且字体完全翻转过来,图像是正的,就不知是什么原因?是什么参数设置不对吗?所以想请教高人。
yesir1006 2007-09-01
  • 打赏
  • 举报
回复
对,就像 krh2001(边城浪子) 说的,不好意思,我一直用DIB的,忘了交代了。还有,我试了试你的程序,是显示在左下角的,不明白,请高人指点把
BITMAPINFOHEADER bmih;
memset(&bmih,0,sizeof(BITMAPINFOHEADER));
bmih.biSize = sizeof(BITMAPINFOHEADER);
bmih.biWidth = w;
bmih.biHeight = h;
bmih.biPlanes = 1;
bmih.biBitCount = 24;
bmih.biSizeImage = 3*w*h;

HDC BmpDC;
HBITMAP hBitmap;
RECT rect;

memset(&rect, 0, sizeof(RECT));
rect.right = w;
rect.bottom = h;

BmpDC = CreateCompatibleDC(NULL);
hBitmap = CreateDIBitmap(GetDC()->GetSafeHdc(), &bmih, CBM_INIT, im, (BITMAPINFO*)&bmih, DIB_RGB_COLORS);

BYTE* pIm = new unsigned char[w*h*3];
memset(pIm, 0, w*h*3);
if (hBitmap) {
SelectObject(BmpDC, hBitmap);
// SetBkMode(BmpDC, TRANSPARENT);
CString str = "try and try";
DrawText(BmpDC, str, strlen(str), &rect, DT_SINGLELINE | DT_BOTTOM | DT_LEFT);
GetDIBits(BmpDC, hBitmap, 1, h, pIm, (BITMAPINFO*)&bmih, DIB_RGB_COLORS);
StretchDIBits(pDC->GetSafeHdc(), 0, 0, w, h, 0, 0, w, h, pIm, (BITMAPINFO*)&bmih, DIB_RGB_COLORS, SRCCOPY);
}
DeleteDC(BmpDC);
delete [] pIm;
jerry 2007-09-01
  • 打赏
  • 举报
回复
GetDIBits 读取的数据是 DIB数据, 和DDB不一样的, 上下相反的 不能这样做, 某些宽度的图像还会错位, 因为它们的 行字节对齐也不同.
yesir1006 2007-09-01
  • 打赏
  • 举报
回复
我是指对应于图像数据,图像的(0,0)点显示在左下角,(h-1,0)显示在左上角
jerry 2007-09-01
  • 打赏
  • 举报
回复
DIB 是 从左下角 开始的

DDB 是左上角开始的, 不一样的. 所以要注意怎么计算文字的位置
daisydew 2007-09-01
  • 打赏
  • 举报
回复
主要不是位置的意思,连文字都反了啊。
tracing 2007-09-01
  • 打赏
  • 举报
回复
左下角为(0, 0)?????????有没搞错
yesir1006 2007-09-01
  • 打赏
  • 举报
回复
在vc里,图像绘制的时候左下角为(0, 0),而不是左上角
daisydew 2007-08-31
  • 打赏
  • 举报
回复
DrawText可以设置回来吗?
daisydew 2007-08-31
  • 打赏
  • 举报
回复
本来是想在底部左边的,后来到顶部右边,图像没反,字符字体都反了,什么原因?
《图像处理软件Photoshop》课程标准 一、课程概述 1.课程性质、任务与目的 《图像处理软件Photoshop》这门课程是平面设计专业的职业技能课,课程主要任务是 介绍PHOTOSHOP CS版工作界面、设计基础、工作范围的选取、图像描绘的方法和技巧、文字特效的制作 、图像编辑技巧、路径的应用、图层的应用、通道的功能与使用、滤镜的使用方法与技 巧。学习Photoshop的目的在于使学生熟练掌握现代化的设计工具的使用技巧,进行各种 版式设计、产品包装设计、工业产品模型制作、产品设计报告书制作,提高设计效率, 适应社会要求,能够顺利的走上社会,并为以后独立的设计打下坚实的基础。 2.教学基本要求 1) 能够了解数字图像的基本理论、有关色彩理论和颜色模式的理论知识。 2) 熟练掌握PHOTOSHOP CS的工作界面以及一些基础操作,例如:对图像文件的新建、打开和保存操作, 以及使用PHOTOSHOP CS中的各种辅助工具等。 3) 能够熟练利用PHOTOSHOP CS中的工具和命令创建、编辑和保存选区;熟练掌握创建、编辑路径的方法与技 巧。 4) 熟练掌握图层的一些概念、基本操作。 5) 对通道与蒙版的概念有一个清晰的认识,轻松掌握通道与蒙版的操作方法与技巧。 6) 掌握滤镜的一些基础的操作。 3.课程特点 《图像处理软件PHOTOSHOP》是一门实践性很强的课程,必须通过大量的上机实例操作才 能熟练掌握所学的知识,在上课的全过程必须保证大部分的时间来上机。 二、教学内容描述 第一章 Photoshop CS 基础知识 (一) 教学内容 1. 功能介绍 a) 基本功能 b) 新增功能 c) 应用领域 2. 图像处理基本知识 a) 像素与分辨率 b) 位图与矢量图 c) 图像颜色模式 d) 图像文件格式 3. 工作环境:标题栏、菜单栏、工具栏、工具属性栏、工作区、状态栏、浮动面板 4. 基本操作 a) 常用文件操作 b) 图像的显示 c) 辅助工具的应用 d) 图像与画布尺寸的调整 e) 前景色与背景色 (二) 教学重点 1.像素与分辨率、位图与矢量图、颜色模式、文件格式的概念 2.软件的基本操作 第二章 工具编辑工具 (一)教学内容 1. 绘图工具:画笔工具、铅笔工具 2. 颜色填充工具:油漆桶工具、渐变工具 3. 修饰工具:图章工具、修复工具、图像修饰工具、色彩修饰工具 (二) 教学重点 画笔的设置和使用、抹除和填充工具组的使用以及图像的处理操作 (三)教学难点 画笔的创意应用、各种修饰修补工具的特点和使用 第三章 选区的创建与编辑 (一)教学内容 1. 选区工具 a) 选框工具 b) 套索工具 c) 魔棒工具 2. 编辑选区 a) 移动和取消选区 b) 修改选区 c) 变换选区 d) 存储和载入选区 e) 羽化选区 3. 填充和描边选区 (二) 教学重点 本章各章节均为重点。 (三)教学难点 创建、编辑和修饰选区。 第四章 图层 (一) 教学内容 1. 图层的基本概念:图层类型和图层面板 2. 图层的基本操作 a) 新建、复制和删除图层 b) 显示和隐藏图层 c) 锁定和链接合并图层 d) 对齐和分布图层 3. 编辑图层:智能对象、调整图层、编组图层 4. 图层效果和样式 a) 图层样式对话框 b) 投影和外发光样式效果 c) 斜面和浮雕与图案叠加样式效果 d) 内阴影和颜色叠加样式效果 e) 内发光和简便叠加样式效果 f) 光泽和描边样式效果 5. 图层的高级操作 a) 复制和粘贴图层样式 b) 缩放和清除图层样式 c) 图层的混合模式 (二) 教学重点 本章各章节均为重点。 (三)教学难点 设置图层效果和样式以及图层混合模式。 第五章 路径与文字工具 (一)教学内容 1. 路径在处理图像时的作用 2. 创建路径:路径面板与路径编辑工具 3. 编辑路径 a) 选择路径和节点 b) 存储/输出/复制/删除/填充/描边工作路径 c) 路径与选区的转换 4. 文字的输入 a) 横排文字和直排文字 b) 横排和直排文字蒙板 c) 点文字和段落文字 d) 创建路径文字效果 5. 文字的编辑与转换 a) 通过"字符面板"编辑文字 b) 通过"段落面板"编辑文字 c) 将文字转换为路径 d) 栅格化文字 e) 编辑变形文字效果 (二) 教学重点 路径的创建和调整、形状工具组的使用、文字工具的使用和编辑 (三)教学难点 路径的创建和调整、文字图层的编辑 第六章 色彩与色调的调整 (一) 教学内容 1. 色彩基本理论 2. 色调调整命令:色阶、曲线、亮度/对比度 3. 色彩调整 1) 色彩平衡 2) 色相/饱和度 3) 替换颜色 4) 可选颜色 5) 通道混合器 6) 变化 4. 特殊色调控制 1) 色彩相 2) 色调均化 3) 阈值
介绍:本书是“DirectShow专业著作”丛书的第二本,侧重介绍了DirectShow技术在当前主要的几个领域中的应用,包括音视频采集、视频聊天、视频点播、视频叠加、媒体播放等。在介绍各种应用的同时,辅助以大量详尽的实例源代码。这些实例,不仅具有很强的实用价值和指导意义,更让读者理论联系实践,使学习DirectShow技术变得轻松自如。本书的配套光盘提供了DirectShow SDK 9.0的安装程序及书中各章节涉及的所有实例源代码。 本书结构合理,内容丰富新颖、条理清晰,适合广大的流媒体应用开发人员、系统设计人员、以及对Windows平台上多媒体处理感兴趣的编程爱好者学习和参考。 目录: 第1章 DirectShow系统 1 1.1 系统概述 1 1.2 使用GraphEdit 3 1.3 最后的话 6 第2章 音视频采集 9 2.1 功能介绍 9 2.2 通用采集 13 2.2.1 采集设备枚举 13 2.2.2 采集设备创建 25 2.2.3 开始视频预览 29 2.2.4 使用高效的VMR 45 2.2.5 选择输入端子 55 2.2.6 采集参数设置 64 2.2.7 支持数码摄像机 76 2.2.8 支持热插拔 82 2.2.9 支持即时抓图 93 2.2.10 采集到AVI文件 114 2.2.11 视频的压缩方案 118 2.3 电视接收 121 2.3.1 预备工作 121 2.3.2 电视选台 124 2.3.3 支持VBI 125 2.4 程序导读 130 2.4.1 一种不错的设计模式 130 2.4.2 程序结构 137 2.4.3 流程概要 141 第3章 网络应用 144 3.1 网络编程基础 144 3.1.1 TCP传输 145 3.1.2 UDP传输 166 3.1.3 IP组播技术 176 3.2 视频聊天 185 3.2.1 功能介绍 185 3.2.2 实现原理 187 3.2.3 采集设备自检 190 3.2.4 角色控制实现 204 3.2.5 开发网络发送Filter 223 3.2.6 开发网络接收Filter 230 3.2.7 程序导读 240 3.3 视频点播 244 3.3.1 功能介绍 244 3.3.2 实现原理 247 3.3.3 开发网络接收Filter 250 3.3.4 支持MPEG1、MP3 261 3.3.5 支持MPEG2 268 3.3.6 支持AVI 270 3.3.7 程序导读 275 第4章 视频叠加 311 4.1 视频抠像 311 4.1.1 抠像原理 311 4.1.2 抠像算法实现 312 4.1.3 MMX算法优化 318 4.1.4 开发抠像Filter 321 4.1.5 模拟实时源 339 4.1.6 应用演示 348 4.2 字符叠加 350 4.2.1 开发字符叠加Filter 350 4.2.2 与媒体播放集成 353 第5章 SDK源码赏析 361 5.1 DSNetwork例子 361 5.1.1 程序结构分析 361 5.1.2 模拟MPEG2-TS源 372 5.1.3 应用演示 380 5.2 VMR-9典型应用 385 5.2.1 位图叠加例子BitmapMix 385 5.2.2 字符叠加例子Ticker 396 5.2.3 流混合例子Blender 405 附录A DirectShow常见问题解答 411 A.1 一般性问题 411 A.2 编程问题 413 附录B PID扩展插件开发 420 B.1 PID应用原理 420 B.2 PID插件开发 421 B.3 PID插件的使用 429 附录C DES扩展Source(实现字符叠加) 432 C.1 自动化基础 433 C.2 字符叠加基础 433 C.3 Source Filter的开发 436 C.4 Source Filter的调试 448 C.5 DES应用举例 449 附录D 让Windows Media Player播放自定义格式文件 452 D.1 播放媒体文件的Filter Graph构建过程 452 D.2 两种解决方案 454 D.3 自定义格式文件的生成 455 D.4 Source Filter的开发 457 D.5 体验QQ文件的播放 471
目录 第一章 1·带图标的菜单 2·显示倾斜文字文字的颜色渐变 4·设置并叠加透明图片 5·颜色渐变进度条 6·透明窗体 第二章 7·调色程序 8·颜色下拉框 9·模拟拷贝进程 10·通用对话框 11·窗体分割 12·实现QQ程序的抽屉效果 13·以动画方式弹出,关闭窗口 14·半透明窗体 15·获得指定点颜色 16·判知图片大小 17·图片的伸缩显示 18·浏览大图 19·放大局部图形 20·屏幕抓图 21·裁剪位图 22·填充区域图象 23·列表项的提示条 24·浮动的鼠标提示 25·控制工具栏的按钮组 26·工具栏上设置下拉按钮 27·使窗体保持在最前 28·模仿windows任务拦 29·定义光标热区 30·拖放选中对象 第三章 31·调节系统音量 32·控制混音效果 33·播放WAV文件 34·再现windows的CD播放器 35·小解霸--VCD经典控制 36·播放rm文件 第四章 37·文字逐个出现模仿打字 38·嵌入式时钟 39·程序中嵌入日历 40·毫秒级的控制 41·读写系统时间 42·同步网络时间 第五章 43·编写屏保程序 44·屏蔽系统热键和隐藏任务拦 45·动态调整屏幕分辨率 46·获取系统硬件信息 47·编辑注册表信息 48·重启动和关闭计算机 49·获取windows版本号和运行模式 50·枚举可用字体 第六章 51·向导程序 52·系统托盘程序 53·隐藏程序不被关闭程序发现 54·枚举系统正在运行的程序 55·启动并控制其他exe程序 56·禁止运行程序多个实力 57·禁止程序右上角各按钮 58·多线程方式同时进行多项任务 59·线程优先级示例==赛马 60·利用剪贴板实现exe程序间的数据交换 61·通过内存映射实现exe程序间的数据交换 62·通过消息机制实现exe程序间的数据交换 第七章 63·获取驱动器序列号 64·获取磁盘空间数据 65·判别并定位到光驱(软驱) 66·嫡归法遍历磁盘目录 67·获得文件属性 68·删除不为空的目录 69·快速检索指定文件 70·拷贝,删除和移动文件 71·读写INI文件 72·读写大块资料(二进制) 73·文件变更通知 第八章 74·格式化数字 75·中文大写数字 76·存取图象字段 77·ADO控制access数据库 78·SQL语句中设置时段检索条件 79·SQL语句中设置字符串检索条件 80·SQL语句中设置多个字符串检索条件 81·SQL语句嵌套 82·代码控制链接ODBC 第九章 83·获取网卡地址 84·获得主机名和IP地址 85·端口扫描 86·判断网址是否有效 87·枚举局域网内计算机 88·连续批量Ping测试 89·设置IE的标题 90·收发电子邮件 91·FTP上传下载 92·网络聊天WINSOCK-TCP 93·广播信息WINSOCK-UDP 94·电话拨号上网 第十章 95·进制转换 96·随机选号 97·统计中英文字符数 第十一章 98·鼠标位置追踪 99·代码控制光标 100·模拟鼠标单双击 101·模拟键盘输入 102·限定鼠标区域 103·截获鼠标移开事件 104·截获键盘信息 第十二章 105·产生程序序列号 106·建立一个快捷方式 107·设置程序为自动被执行 108·注册与卸载OCX 109·限定程序的使用时限 110·在IE工具栏中加入快捷图标
公交查询系统(易语言2005年大赛特等奖)曾劲松 2005/6/5《武汉人·公交查询系统》是一款基于武汉市电子地图的公交线路查询系统,它允许你非常方便地搜寻武汉市从甲地到乙地的行车线路并将行车线路在地图上绘制出来,快速准确地查找离某地最近的公交站,查找某公交站的位置,查看某公交线路所经过的站名并绘制于地图之上,在后续版本中将增加搜索其他地理位置(公司、企业、医院、学校、商场等等……)。本程序核心技术:1.       完全采用面向对象的编程方法。因为本程序设计到很多矢量图绘制,所以最适合采用面向对象的方法来开发了。有几个重要的类说明如下:1>     交通图元类。这是所有交通元素类的基类,包含了名称、颜色、描述、是否被选中等几个属性和绘制到内存位图、绘制到画板等几个方法。2>     点图元类。该类用来描述仅仅用于定位的交通元素,比如公交站、学校、企业等,该类继承自交通图元类,新增加有 取横坐标,取纵坐标,置横坐标,置纵坐标,取边界矩形等方法。3>     公交站类。该类用来描述公交站,继承自点图元类。增加了 从字符串创建、取点半径、置点半径、取字体大小、置字体大小、绘制到画板、绘制到内存位图等方法。4>     公交线路类。本类用来描述公交线路,提供了以下方法:查询公交站在公交线路中的索引、从数字字符串创建、绘制到内存位图、取边界矩形、取公交线路号、取公交站编号、取经过的公交站名、取数字化的线路文本、是否经过某公交站等。5>     连通线路类。本类用来描述两个公交站之间的连通线路,提供了 绘制到内存位图、取边界矩形、取详细信息、是否要专车、检验索引、置公交线路一、置公交线路二、置线路一起止索引、置线路二起止索引、重置等方法。6>     视图历史类。本来用来记录视图书签,提供以下方法:清除视图历史、取当前视图、取当前索引、取视图、取视图名称、取视图总数、删除当前视图、上一视图、是否可删除视图、是否有上一视图、是否有下一视图、跳到视图、下一视图、显示于列表框、置视图名称、追加视图等。7>     内存位图类。本来用来增强易语言自身的画板,因为易语言自身的画板未提供绘制EMF文件和EMF字节集的方法,所以专门写了这个类。这个类很多方法跟易语言自身的画板差不多,扩展的方法有 创建位图、复制到画板、复制到画布、洪水填充、画EMF文件、画EMF字节集、画多边形点数组、画多义线点数组、画多边形横纵坐标数组、画多义线横纵坐标数组、画曲线点数组、画曲线横纵坐标数组、绘制文本在矩形内、拉伸复制到画板、拉伸复制到画布、取高度、取宽度、取画布句柄、取位图句柄、实色填充、置画笔属性、置交叉线画刷、置实色画刷、置文本属性等。主要增加了两个画EMF的方法和画曲线的方法。8>     图层类。本类用来组织各种交通图元,只可惜易语言目前尚不支持方法覆盖和强制类型转换,不得已采用全局数组来替换它了。2.       矢量图形绘制技术。在程序中要绘制地图,显然地图不能直接使用位图,因为要无限放大,要分层叠加,而且始终清晰,这样就必然要使用矢量图形技术。幸好Windows 已经为我们提供了操作矢量图形 EMF文件的相关函数,这里我已将其封装到内存位图中去了。3.       快速的路径寻找。在实际乘坐公交的过程中,难免会有转车的现象发生。本程序通过建立公交站索引的方法,能够快速搜索出所有的直达车或一次转车线路,通常这已经能够满足需求,能够搜索出可行的乘车方案。对于两次或两次以上的转车方案,本程序没有实现,一方面实现起来难度大,另一方面也没有必要,因为在实际乘车的过程中,极少有要转两次车的情况。4.       方便的数据库维护。对于一个公交查询(或曰电子地图)系统来说,数据量之大是可想而知的。偌大一个城市,一个人不可能完全了解其公交站和公交线路的分布情况,况且公交线路也经常处于变化之中,所以本程序提供了灵活的方法允许用户自己来维护数据库的方便方法。具体操作方法请查看本软件帮助。源代码总共3600行。

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧