windows GDI+ 离屏绘制文字图片
2017-08-01 17:53
585 查看
windows GDI+ 离屏绘制文字图片
由于之前都是在linux开发界面,转到windows还真不适应,然后开发工具是VS2015,目的就是不需要把图片文字绘制到界面上,而是绘制到一张透明图上,方便我们对图片进行操作。之前也在网上搜索过相关资料,确实挺少的,现在把实现的功能分享给大家,省的大家走弯路。
1. 创建 bitmap 以及 graphic句柄
m_gdiBitmap = new Bitmap(width, height, PixelFormat32bppARGB); m_s_gdiGraphics = new Graphics(m_gdiBitmap);
2. 创建字体
FontFamily fontfamily(L"宋体"); pfont = new Font(&fontfamily, 60, FontStyleRegular, UnitPixel);
3. 绘制文字
StringFormat strformat; strformat.SetAlignment(StringAlignmentCenter);//水平居左 strformat.SetLineAlignment(StringAlignmentCenter);//垂直居中 m_s_gdiGraphics->SetTextRenderingHint(TextRenderingHintAntiAlias); m_s_gdiGraphics->DrawString((WCHAR *)text, -1, pfont, RectF(0, 0, width, height), &strformat, &SolidBrush(Color::Black));
4. 绘制图片
s_schar_2_wchar("C:\\Users\\Administrator\\Desktop\\test.png", &p); Image *newImage = Image::FromFile(p); m_s_gdiGraphics->DrawImage(newImage, 0, 0);
5. 保存图片验证是否正确
INT GetEncoderClsid(const WCHAR *format, CLSID *pClsid) { UINT num = 0; // number of image encoders UINT size = 0; // size of the image encoder array in bytes ImageCodecInfo* pImageCodecInfo = NULL; GetImageEncodersSize(&num, &size); if (size == 0) return -1; // Failure pImageCodecInfo = (ImageCodecInfo*)(malloc(size)); if (pImageCodecInfo == NULL) return -1; // Failure GetImageEncoders(num, size, pImageCodecInfo); for (UINT j = 0; j < num; ++j) { if (wcscmp(pImageCodecInfo[j].MimeType, format) == 0) { *pClsid = pImageCodecInfo[j].Clsid; free(pImageCodecInfo); return j; // Success } } free(pImageCodecInfo); return -1; // Failure }
CLSID pngClsid; s_schar_2_wchar("image/png", &p); GetEncoderClsid(p, &pngClsid); s_schar_2_wchar("C:\\Users\\Administrator\\Desktop\\result.png", &p); m_gdiBitmap->Save(p, &pngClsid, NULL);
6. 总结以下是完整代码
MInt32 GdiDrawText::doInit() { if (m_s_nRefCount == 0) { Gdiplus::GdiplusStartupInput gdiStartupInput; Gdiplus::Status gdiStatus = Gdiplus::GdiplusStartup(&m_gdiToken, &gdiStartupInput, NULL); if (Gdiplus::Status::Ok != gdiStatus) return -1; m_gdiBitmap = new Bitmap(480, 480); m_s_gdiGraphics = new Graphics(m_gdiBitmap); WCHAR *p = MNull; FontFamily fontfamily(L"宋体"); Font font(&fontfamily, 60, FontStyleRegular, UnitPixel); StringFormat strformat; strformat.SetAlignment(StringAlignmentCenter);//水平居左 strformat.SetLineAlignment(StringAlignmentCenter);//垂直居中 m_s_gdiGraphics->DrawRectangle(&Pen(Color::Green, 2), RectF(0, 0, 480, 480)); m_s_gdiGraphics->DrawString(L"什么玩意", -1, &font, RectF(0, 0, 480, 480), &strformat, &SolidBrush(Color::Black)); CLSID pngClsid; s_schar_2_wchar("image/png", &p); GetEncoderClsid(p, &pngClsid); s_schar_2_wchar("C:\\Users\\Administrator\\Desktop\\result.png", &p); m_gdiBitmap->Save(p, &pngClsid, NULL); delete m_s_gdiGraphics; delete m_gdiBitmap; } m_s_nRefCount++; return QVET_ERR_NONE; }
相关文章推荐
- Gdi+绘制半透明文字并保存为透明背景图片
- GDI+(绘制图片背景文字)
- 向图片上绘制文字
- C# Windows Mobile 利用Com 透明图片绘制
- Xcode绘制文字及图片
- IOS Quartz 各种绘制图形用法---实现画图片、写文字、画线、椭圆、矩形、棱形等
- IOS Quartz 各种绘制图形用法---实现画图片、写文字、画线、椭圆、矩形、棱形等
- IOS Quartz 各种绘制图形用法---实现画图片、写文字、画线、椭圆、矩形、棱形等
- 利用GDI+绘制验证码图片
- IOS:手写签名的实现(实现了手势绘制字体,添加文字水印,图片剪切、图片压缩)
- iOS绘制图片与文字
- VB6 GDI+ 入门教程[4] 文字绘制
- Quartz 各种绘制图形用法 Quartz 实现画图片、写文字、画线、椭圆、矩形、棱形等。
- IOS Quartz 各种绘制图形用法---实现画图片、写文字、画线、椭圆、矩形、棱形等
- GDI文字绘制和windows下opengl文字绘制小结
- Qt自定义控件的创建与初步使用(二)之图片上绘制文字、箭头、曲线
- Core Graphics之(二):绘制:矩形、椭圆、圆形、文字、图片
- android开发 之 Canvas绘制文字,图片
- 源码0305-画饼图-柱状图-绘制文字和图片
- C#利用GDI+给图片添加文字(文字自适应矩形区域)