社区
图形处理/算法
帖子详情
怎样在图像上绘制文字?
gbstar2021
2002-12-22 12:39:17
- 有一个包含图像的缓冲区,如何向它的上面绘制文字?
- 怎样才能直接在一个缓冲区创建一个 DC 呢?(就像 DirectDraw 中直接可以使用 GetDC 创建一个可以访问表面的 DC)
...全文
335
18
打赏
收藏
怎样在图像上绘制文字?
- 有一个包含图像的缓冲区,如何向它的上面绘制文字? - 怎样才能直接在一个缓冲区创建一个 DC 呢?(就像 DirectDraw 中直接可以使用 GetDC 创建一个可以访问表面的 DC)
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
C#在图片上
绘制
文字
摘要:C#源码,图形
图像
,
绘制
文字
C#实现在图片上
绘制
文字
,使用DrawString方法
绘制
的
文字
。打开任意一幅图片,然后在文本框中输入任意你想要的
文字
,点击“
绘制
文字
”按钮,你输入的
文字
会显示在打开图片的左上角位置。 new Font("宋体", 50),
绘制
的字体名称和字号 new SolidBrush(Color.Red)字体的颜色,可自己改。
PHP
绘制
各种统计图
PHP
绘制
各种统计图 支持饼状统计图, 柱形统计图,和折线统计图的
绘制
支持2D和3D2两种绘图模式 目前使用的
图像
颜色为随机色。 支持画布大小,标题,注解
文字
的字体,字号,颜色等的自定义。 支持
图像
的输出与保存
Java写的为图片添加水印的软件(含源代码)
Java写的为图片添加水印的软件(含源代码) 具体可以参看:http://blog.csdn.net/cannel_2020/article/details/7525047
WindowsXP自带画图工具
WindowsXP自带画图工具 不用安装
java 绘图板 java源代码
java 小小绘图板 各种图形的
绘制
和
文字
的写入,也可以调整
文字
画笔的粗细 。还可以保存
图像
图形处理/算法
19,472
社区成员
50,678
社区内容
发帖
与我相关
我的任务
图形处理/算法
VC/MFC 图形处理/算法
复制链接
扫一扫
分享
社区描述
VC/MFC 图形处理/算法
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章