社区
图形处理/算法
帖子详情
使用GDI+在图片上叠加文字
jacky198554
2010-05-17 10:29:03
我想请问一下,如何使用GDI+在图片上叠加文字。
也就是说将文字写到图片上,最生成的还是一张图片。
谢谢大家了!
...全文
851
10
打赏
收藏
使用GDI+在图片上叠加文字
我想请问一下,如何使用GDI+在图片上叠加文字。 也就是说将文字写到图片上,最生成的还是一张图片。 谢谢大家了!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
fd0123456789
2010-11-03
打赏
举报
回复
我想问问楼主问题解决了没啊?我也遇到了类似的问题啊
wltg2001
2010-05-17
打赏
举报
回复
[Quote=引用 1 楼 fandh 的回复:]
直接选中图片,然后,在DC上面drawtext;当然,在drawtext以前,必须设置一下DC,SetBkMode(TRANSPARENT),最后,保存图片!
选中与保存图片,网上有很多例子!
[/Quote]
这个是GDI的,基本想法就是将图先贴到一个内存DC中,然后用TextOut去写字,最后保存文件。
下面给段将HBITMAP对象保存为BMP文件的代码:
WORD wbitsCount;//位图中每个像素所占字节数。
DWORD dwpalettelsize=0;//调色板大小
DWORD dwbmdibitsize,dwdibsize,dwwritten;
BITMAP bitmap;//定义了位图的各种的信息。
BITMAPFILEHEADER bmfhdr;//定义了大小、类型等BMP文件的信息。
BITMAPINFOHEADER bi;
LPBITMAPINFOHEADER lpbi;
HANDLE fh,fdib;
GetObject(hBitmap,sizeof(BITMAP),(void *)&bitmap);//得到BITMAP结构。
//以下代码是用BITMAP的信息填充BITMAPINFOHEADER结构
wbitsCount=bitmap.bmBitsPixel;
bi.biSize=sizeof(BITMAPINFOHEADER);
bi.biWidth=bitmap.bmWidth;
bi.biHeight=bitmap.bmHeight;
bi.biPlanes=1;
bi.biBitCount= bitmap.bmBitsPixel ;
bi.biClrImportant=0;
bi.biClrUsed=0;
bi.biCompression=BI_RGB;
bi.biSizeImage=0;
bi.biYPelsPerMeter=0;
bi.biXPelsPerMeter=0;
//以下代码是获取调色板的长度,调色板现在的用处很少,因为256色的位图已经不多了。
if(wbitsCount<=8)
dwpalettelsize=(1<<wbitsCount)*sizeof(RGBQUAD);
//计算位图的大小,并分配相应的内存空间,注意的是没有分配BITMAPFILEHEADER。
dwbmdibitsize=((bitmap.bmWidth*wbitsCount+31)/8)*bitmap.bmHeight;
fdib=GlobalAlloc(GHND,dwbmdibitsize+dwpalettelsize+sizeof(BITMAPINFOHEADER));
lpbi=(LPBITMAPINFOHEADER)::GlobalLock(fdib);
*lpbi=bi;//将bi中的数据写入分配的内存中。
hdc=::GetDC(NULL);
GetDIBits(hdc,hBitmap,0,(UINT)bitmap.bmHeight,(LPSTR)lpbi+sizeof(BITMAPINFOHEADER)+dwpalettelsize,(BITMAPINFO *)lpbi,DIB_RGB_COLORS);
/*GetDIBits是最重要的函数,真正获得位图数据的工作就由它完成,它第一个参数为HDC,第二个参数为位图句柄,第三个参数为扫描行的开始行,一般为0,第四个为结束行,一般就是高度,第四个参数最重要,它表示接收数据的起始地址,这个地址一般是在调色板之后。第五个参数指的是接收BITMAPINFO结构的地址,这个结构上面没有写,它其实就是BITMAPINFO结构加上调色板信息。最后一个参数是格式。一般是DIB_RGB_COLORS*/
//创建文件以及文件信息头
fh=CreateFile(FileName,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_SEQUENTIAL_SCAN,NULL);
if(fh==INVALID_HANDLE_VALUE)
return FALSE;
bmfhdr.bfType=0x4d42;//BMP类型,一定要这样写
dwdibsize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+dwbmdibitsize+dwpalettelsize;//文件总长,由几个部分组成
bmfhdr.bfSize=dwdibsize;
bmfhdr.bfReserved1=0;
bmfhdr.bfReserved2=0;
bmfhdr.bfOffBits=(DWORD)sizeof(BITMAPFILEHEADER)+(DWORD)sizeof(BITMAPINFOHEADER)+dwpalettelsize;//位图数据相对于文件头的偏移量
//将文件信息头写入文件
WriteFile(fh,(LPSTR)&bmfhdr,sizeof(BITMAPFILEHEADER),&dwwritten,NULL);
//将数据写入文件,包含BITMAPINFO结构、调色板、数据
WriteFile(fh,(LPSTR)lpbi,dwdibsize,&dwwritten,NULL);
//关闭相关句柄
::GlobalUnlock(fdib);
::GlobalFree(fdib);
::CloseHandle(fh);
return TRUE;
蒋晟
2010-05-17
打赏
举报
回复
GDI+的话用Graphics::FromImage创建一个Graphics之后在上面画
jacky198554
2010-05-17
打赏
举报
回复
谢谢您了
fandh
2010-05-17
打赏
举报
回复
这是gdi,你自己转换为gdi+
fandh
2010-05-17
打赏
举报
回复
HBITMAP hbmp= (HBITMAP)::LoadImage(AfxGetInstanceHandle(),filename,IMAGE_BITMAP,
SCREEN_WIDTH,SCREEN_HEIGHT,LR_LOADFROMFILE);
CBitmap bmpBackground;
bmpBackground.Attach(hbmp);
CDC *pDC = GetDC();
CBitmap* pOldBitmap = pDC->SelectObject(&bmpBackground);
int oldmode = pDC->SetBkMode(TRANSPARENT);
pDC->DrawText(...);
pDC->SetBKMode(oldmode);
pDC->SeleteObject(pOldBitmap);
下面是保存,你自己搞定!
jacky198554
2010-05-17
打赏
举报
回复
谢谢您了,您能不能给我提供一下代码啊
C瓜哥
2010-05-17
打赏
举报
回复
楼上正解!
fandh
2010-05-17
打赏
举报
回复
直接选中图片,然后,在DC上面drawtext;当然,在drawtext以前,必须设置一下DC,SetBkMode(TRANSPARENT),最后,保存图片!
选中与保存图片,网上有很多例子!
jacky198554
2010-05-17
打赏
举报
回复
各为能不能给我已个全的代码啊,谢谢大家了
3天掌握Windows
GDI+
图形编程
GDI+
(Graphics Device Interface plus)是以前版本GDI的继承者,出于兼容性考虑,Windows XP仍然支持以前版本的GDI,但是在开发新应用程序的时候,开发人员为了满足图形输出需要应该
使用
GDI+
,因为
GDI+
对以前的...
使用
GDI+
给
图片
添加汉字
1、配置
GDI+
VS2010自带
GDI+
,直接
使用
。 (1)首先要添加头文件和库 #pragma comment( lib, "gdiplus.lib" ) #include "gdiplus.h" using namespace Gdiplus; 建议添加到stdafx.h里 (2)然后添加全局变量 static ULONG_PTR m_gdiplusToken; 该成员变量用来保存
GDI+
被初始化后在应用程序中的
GDI+
标识。 (3)在OnInitDialog()之类的初始化函数中
利用MFC和
GDI+
给图像指定位置加上汉字
以下仅是核心代码,还需要遵守
GDI+
一般
使用
过程,即先完成
GDI+
安装及其在VC中配置,
使用
前要进行初始化等。以前收藏的网页找不到了,请上百度查询。 已经证实在VC6.0中可用,
使用
中有问题可联系我,QQ:39541895 核心代码: Image image( L"IMG_3143.JPG" ); //加载原图,格式可以有很多种,具体查
GDI+
Graph
WPF中
GDI+
图形图像的绘制:(一)绘制文本——动态设置字体、大小、颜色
GDI+
(Graphics Device Interface Plus图形设备接口加)是.NET框架的重要组成部分,负责在屏幕和打印机上绘制图形图像和显示信息。
GDI+
不但在功能上比GDI 要强大很多,而且在代码编写方面也更简单,因此很快成为了Windows图形图像程序开发的首选。 从程序设计的角度看,GDI包括两部分:GDI对象和GDI函数。GDI对象定义了GDI函数
使用
的工具和环境变量;而G...
WPF中
GDI+
图形图像的绘制:(二)绘制文本——字体描边、渐变、
图片
叠加
先放效果: 1、在上一节WPF中
GDI+
图形图像的绘制:(一)绘制文本——动态设置字体、大小、颜色 的基础上继续添加字体描边、渐变和
图片
叠加
相关控件,窗体xaml如下: <Window x:Class="DrawDemo.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentat...
图形处理/算法
19,468
社区成员
50,698
社区内容
发帖
与我相关
我的任务
图形处理/算法
VC/MFC 图形处理/算法
复制链接
扫一扫
分享
社区描述
VC/MFC 图形处理/算法
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章