图片与文字
前言
基础部分就稍快一点,但是一天一篇笔者也累啊!上一篇除笔者外只有3个浏览记录,好悲伤,如果不是引擎制作而是游戏制作是不是人会多一点。
正文
以下代码接上篇文章。
接下来绘制图片,需要引入新头文件:
#include <Wincodec.h>
在初始化d2d后添加初始化WIC(direct2D中常用WIC来加载图片)的方法:
IWICImagingFactory* wicFactory = NULL;
ID2D1Bitmap* pBitmap = NULL;
CoInitialize(NULL);
CoCreateInstance(CLSID_WICImagingFactory, nullptr, CLSCTX_INPROC_SERVER,IID_PPV_ARGS(&wicFactory));
加载每个图片的方法一样,可以封装到一个方法里:
IWICBitmapDecoder* decoder;
IWICBitmapFrameDecode* source;
IWICFormatConverter* converter;
IWICBitmap* wicBitmap;
wicFactory->CreateDecoderFromFilename(bitmapName.c_str(), NULL, GENERIC_READ, WICDecodeMetadataCacheOnLoad, &decoder);
decoder->GetFrame(0, &source);
wicFactory->CreateFormatConverter(&converter);
converter->Initialize(source, GUID_WICPixelFormat32bppPBGRA, WICBitmapDitherTypeNone, nullptr, 0, WICBitmapPaletteTypeMedianCut);
wicFactory->CreateBitmapFromSource(converter, WICBitmapCacheOnDemand, &wicBitmap);
pRenderTarget->CreateBitmapFromWicBitmap(wicBitmap, &pBitmap);
decoder->Release();
decoder = NULL;
source->Release();
source = NULL;
converter->Release();
converter = NULL;
wicBitmap->Release();
wicBitmap = NULL;
绘制图片,在原有绘制矩形函数前加一句:
pRenderTarget->DrawBitmap(pBitmap, D2D1::RectF(100.f, 100.f, 500.f, 500.f));
运行效果。
添加文字,需要引入新头文件:
#include <dwrite.h>
#pragma comment(lib,"dwrite.lib")
初始化方法:
DWriteCreateFactory(DWRITE_FACTORY_TYPE_SHARED, __uuidof(IDWriteFactory), (IUnknown**)&writeFactory);
writeFactory->CreateTextFormat(L"宋体", NULL,DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL, DWRITE_FONT_STRETCH_NORMAL, 30, L"chs", &textFormat);
//每需要一种字体需要生成一个textFormat,只生成一个在改属性也可以。
绘制文字,在原有绘制图片函数后加一句:
pRenderTarget->DrawTextW(text.c_str(), text.size(), textFormat, D2D1::RectF(100.f, 100.f, 500.f, 500.f), pBlackBrush);
运行效果。
至此,简单显示部分算完成了,绘制其它图形方法相似,只是更改函数,至于画路径那种的暂时用不到,使用到了再看即可,想学习其它方法的读者可以到上篇文章中Direct2D教程链接中查看。
结束语
多说一句,编写博客的工具Markdown,功能是很强大,但好像直接从word中拷贝文字复制过来会显示不正常,可能是文字中有隐藏的字符吧!