社区
图形处理/算法
帖子详情
怎样在图像上绘制文字?
gbstar2021
2002-12-22 12:39:17
- 有一个包含图像的缓冲区,如何向它的上面绘制文字?
- 怎样才能直接在一个缓冲区创建一个 DC 呢?(就像 DirectDraw 中直接可以使用 GetDC 创建一个可以访问表面的 DC)
...全文
361
18
打赏
收藏
怎样在图像上绘制文字?
- 有一个包含图像的缓冲区,如何向它的上面绘制文字? - 怎样才能直接在一个缓冲区创建一个 DC 呢?(就像 DirectDraw 中直接可以使用 GetDC 创建一个可以访问表面的 DC)
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
18 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
gbstar2021
2002-12-24
打赏
举报
回复
上面 忘了点事情,没有dc是不能用 TransparentBlt()的,看来只能一个 BYTE by BYTE 的复制内存了,不过这样好像效率更低。
gbstar2021
2002-12-24
打赏
举报
回复
to cmzxlinhai
几个问题
1、我是在 directshow 中创建的 filter 中处理这个缓冲区,不能使用 directdraw 的表面。
2、在位图上创建 dc 可以实现,这需要做一次图像的复制,效率太低(一个 20f/s 的播放程序中,这种复制就是 20 次/秒)
3、创建一个专门用于写字的 dc 应该是个好方法,不过贴图的时候如何去掉文字的背景呢?TransparentBlt() 效率应该没有问题吧?
cmzxlinhai
2002-12-24
打赏
举报
回复
我有一个建议,看看行不行:
用memcpy拷贝您的Filter缓冲区待写字部分区域到Bmp缓冲,利用DC向Bmp写字,再回拷Bmp缓冲到您的Filter缓冲区,当然也可以考虑用汇编解决这一小段代码,但不知会快多少。
cmzxlinhai
2002-12-23
打赏
举报
回复
还没解决?
顺便做个更正,在下以上所说,如果与DirectX有关创建一个表面在上面写字后Blt或操作象素。
还有:
很难直接在缓冲中画字,在下觉得可以建立一个BMP和DC并写字,找出BMP的位地址,并将文字象素拷贝至您的缓冲
gbstar2021
2002-12-23
打赏
举报
回复
顶一下
flysundy
2002-12-23
打赏
举报
回复
那么多颗红星??!!!俺要何年何月才能出头,管理员也不给俺加个三角星来鼓励鼓励!!呵呵~~
小元宝
2002-12-23
打赏
举报
回复
你可以现在内存中将要画的字画上,然后用memDC.GetPixel()取得每个像素点的颜色,然后根据不同位的位图来取得它的颜色表重新负值就行了!
saucer
2002-12-22
打赏
举报
回复
yes, you need to get it the back through API GetDIBits or GetBitmapBits
see
http://www.codeguru.com/bitmap/ddb_to_dib.shtml
or
http://groups.google.com/groups?selm=8taqke%24ckb%241%40j1-035.rd.j-mac.co.jp&oe=UTF-8&output=gplain
gbstar2021
2002-12-22
打赏
举报
回复
to saucer:
这是我的一段测试代码:
BYTE* pBits=new BYTE[100*100*2];
ZeroMemory(pBits,100*100*2);
bmp.CreateBitmap(100,100,1,16,pBits);
memdc.CreateCompatibleDC(NULL);
memdc.SelectObject(&bmp);
memdc.FillSolidRect(0,0,100,100,RGB(255,255,0));
memdc.TextOut(0,0,"hello");
...
问题是 CreateBitmap 之后 CBitmap 好像是创建了一份图像的副本,在 memdc 上的操作并不能影响 pBits 指向的内存空间。
cmzxlinhai
2002-12-22
打赏
举报
回复
1、如果您的程序与DirectX有关,可以用Windows GDI的TextOut写完文字到一个位图后再复制过去(Blt方法)或直接操作像素复制过去,在我所碰到的文字记载中多数都是用Blt操作的。
2、您一定是先调入某个图象并且获得它的句柄,例如上面例子中的BMP图像句柄HBITMAP bmp,并得到它的图像缓冲区: c的方法是 用SelectObject(HDC,GDIObject) 然后TextOut(HDC......)
3、如果您用MFC 把HBITMAP Attach到CBitmap 再操作 而后CDC::SelectObject(&CBitmap)
在下只知道这些
gbstar2021
2002-12-22
打赏
举报
回复
to cmzxlinhai(老头)
图像缓冲区我已经可以获得,问题就是怎样才能在上面画文字,直接操作像素的方法画文字很困难。
zhenxizhou
2002-12-22
打赏
举报
回复
gz
cmzxlinhai
2002-12-22
打赏
举报
回复
补充一下:有了位图的句柄后您就很容易在位图上写文字,有了地址又可以定位、操作某个象素了,献丑!
cmzxlinhai
2002-12-22
打赏
举报
回复
这是一个32位位图的例子,24位、16位、8位位图类似
long * CBmp32View::GetBmp32PixAddress(HBITMAP bmp, int x, int y)
{
BITMAP bm;
BYTE* b;
long *address=NULL;
GetObject(bmp,sizeof(bm),&bm);
while(bm.bmWidthBytes %4 )bm.bmWidthBytes++;
b=(BYTE *)bm.bmBits + (bm.bmHeight-1) * bm.bmWidthBytes;
b=b-(y+1)*bm.bmWidthBytes+x*4;
address=(long *)b;
return address;
}
得到位图的内存地址
gbstar2021
2002-12-22
打赏
举报
回复
to saucer
谢谢你的回答,我是想创建一个 directshow 的 filter 在 mediasample 上绘制文字(字幕),如果使用上面的方法应该可以实现这个功能,不过可能效率太低(要额外的复制一份图像),有没有更好的方法呢?
cbc
2002-12-22
打赏
举报
回复
gz
Rigel
2002-12-22
打赏
举报
回复
今晚好多星星啊!
saucer
2002-12-22
打赏
举报
回复
create a memory DC, select your bitmap into it, get the DC handle, use TextOut or similar functions to draw text....
for example, see
http://www.vclife.com/makeprog.htm
Java写的为图片添加水印的软件(含源代码)
源代码的学习可以帮助开发者了解如何在Java环境中进行
图像
处理,包括读取和写入
图像
文件、使用`Graphics2D`进行
图像
绘制
、处理透明度等关键技能。同时,对于想要深入了解Java图形处理和GUI编程的初学者,这是一个很...
WindowsXP自带画图工具
这款工具虽然功能相对基础,但对于日常的一些简单
图像
处理工作,如裁剪、
绘制
基本图形、添加
文字
等,都能满足需求。下面我们将详细探讨“画图”工具的各种特性和使用方法。 1. **启动画图工具**:在Windows XP系统...
java 绘图板 java源代码
Java绘图板是一款基于Java语言开发的简单图形编辑器,它允许用户
绘制
各种形状并添加
文字
,同时提供了调整画笔粗细和保存
图像
的功能。这个项目对于初学者来说,是学习Java图形用户界面(GUI)编程的一个好实例,尤其...
c# GDI+ 完整例子
9. **旋转
文字
(Rotated Text)**:除了常规的文本
绘制
,GDI+还可以实现旋转
文字
,这在创建动态图形或艺术效果时非常有用。 10. **箭头(Arrows)**:GDI+可以
绘制
各种形状的箭头,这对于创建图表、指示器或地图应用...
OpenCV在
图像
上
绘制
文字
示例
这个函数可以简单地在
图像
上
绘制
一些
文字
,由text指定的
文字
将在以左上角为原点的
文字
框中以color指定的颜色
绘制
出来,...OpenCV中除了提供
绘制
各种图形的函数外,还提供了一个特殊的
绘制
函数,用于在
图像
上
绘制
文字
。
图形处理/算法
19,467
社区成员
50,678
社区内容
发帖
与我相关
我的任务
图形处理/算法
VC/MFC 图形处理/算法
复制链接
扫一扫
分享
社区描述
VC/MFC 图形处理/算法
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章