画刷的使用方法
需要包含的文件:<wincodec.h>
需要包含的库: "windowscodecs.lib"
 
1.颜色——D2D_COLOR_F 结构体
D2D_COLOR_F 结构体的原型是D3DCOLORVALUE
typedef struct _D3DCOLORVALUE {
float r;  //红色分量值,范围0-1
float g;  //绿色分量值,范围0-1
float b;  //蓝色分量值,范围0-1
float a;  //alpha分量值(透明度),范围0-1
} D3DCOLORVALUE;

其中,四个属性的取值范围是0-1。
可以通过D2D1::ColorF方法获取颜色

D2D1::ColorF(0.0f, 0.0f, 0.0f, 1.0f);      //rgba形式
D2D1::ColorF(0x000000, 1.0f);          //UINT32形式
D2D1::ColorF(D2D1::ColorF::Pink, 1.0f);    //Enum形式特定值
2.位图的加载——ID2D1Bitmap
从文件中加载位图:
以下代码可以看作是一个模板,除了第2步中的文件名”filename",以及第4步中的width/height需要更改,其他的只需套用即可完成位图ID2D1Bitmap的初始化,因此一般把它封装成一个函数使用。
//1初始化IWICImagingFactory
IWICImagingFactory *pIWICFactory;
CoInitialize(NULL);
CoCreateIstance(
CLSID_WICImagingFactory,
NULL,
CLSCTX_INPROC_SERVER,
IID_PPV_ARGS(&pIWICFactory)
); ID2D1Bitmap *pBitmap;
IWICBitmapDecoder *pDecoder;
IWICBitmapFrameDecode *pSource;
IWICStream *pStream;
IWICFormatConverter *pConverter;
IWICBitmapScaler *pScaler; //2初始化IWICBitmapDecoder
pIWICFactory->CreateDecoderFromFilename(
"filename",    //修改为图片的路径名
NULL,
GENERIC_READ,
WICDecodeMetadataCacheOnload,
&pDecoder
); //3初始化IWICBitmapFrameDecode
pDecoder->GetFrame(, &pSource);
//4初始化IWICBitmapScaler
pIWICFactory->CreateBitmapScaler(&pScaler);
pScaler->Initialize(
pSource,
width,   //缩放至width宽度
height,   //缩放至height高度
WICBitmapInterpolationModeCubic
); //4初始化IWICFormatConverter
pIWICFactory->CreateFormatConverter(&pConverter);
pConverter->Initialize(
pScaler,
GUID_WICPixelFormat32bppPBGRA,
WICBitmapDitherTypeNone,
NULL,
0.0f,
WICBitmapPaletteTypeMedianCut
); //5从WIC中加载位图
pRenderTarget->CreateBitmapFromWicBitmap(
pConvert,
NULL,
&pBitmap
); //6释放临时对象
XXXXX->Release();
3.画刷类型
单色刷——ID2D1SolidColorBrush

ID2D1SolidColorBrush *pscBrush;
//创建单色画刷
RenderTarget->CreateSolidColorBrush(
D2D1::ColorF(, 1.0f),
&pscBrush
);
线性渐变刷——ID2D1LinearFradientBrush
ID2D1LinearGradientBrush *plgBrush;
ID2D1GradientStopCollection *pgsCollection; //创建渐变节点数组
D2D1_FRADIENT_STOP gradientStops[];
gradientStops[] = {0.0f, D2D1::ColorF(, 1.0f)};
gradientStops[] = {1.0f, D2D1::ColorF(0xffffff, 1.0f)}; //创建渐变条(这一部分可以想象成ps中的那个渐变)
RenderTarget->CreateGradientStopCollection(
gradientStops, //渐变颜色点信息
, //渐变颜色点数量
D2D1_GAMMA_2_2,
D2D1_EXTEND_MODE_CLAMP,
&pGsCollection
); //创建渐变刷
RenderTarget->CreateLinearGradientBrush(
LinearGradientBrushProperties(
D2D1::Point2F(, ), //渐变线起始点(窗口坐标)
D2D1::Point2F(, )   //渐变线终点(窗口坐标)
),
pgsCollection,
&plgBrush
);
发散渐变刷——ID2D1RadialGradientBrush

g_pTarget->CreateRadialGradientBrush(
RadialGradientBrushProperties(
Point2F(,),   //颜色中心
Point2F(, ), //颜色偏离中心
, //颜色x轴半径
//颜色y轴半径
),
g_pGsCollection,
&g_pRgBrush
);
 
位图刷——ID2D1BitmapBrush

//使用WIC从文件中加载资源后
pRenderTarget->CreateBitmapBrush(pBitmap, &BitmapBrush);
4.画刷使用
pRenderTarget->BeginDraw();
pRenderTarget->FillRectangle(&rect, pxxxBrush);
pRenderTarget->DrawRectangle(&rect, pxxxBrush);
pRenderTarget->EndDraw();

下一期将学习位图刷和位图的更多用法。

Direct2D 学习笔记(2)画刷 Brush的更多相关文章

  1. 简述WPF中的画刷(Brush)

    原文:简述WPF中的画刷(Brush) -------------------------------------------------------------------------------- ...

  2. Direct2D 学习笔记(1)概述

    Direct2D 应用程序接口概述 资源网站 https://docs.microsoft.com/en-us/windows/win32/Direct2D/the-direct2d-api 主要用到 ...

  3. Direct2D 学习笔记 前言

    Direct2D模板程序网址:https://docs.microsoft.com/zh-cn/windows/win32/direct2d/direct2d-quickstart DirectX S ...

  4. OpenGL学习笔记(2) 画一个正方形

    画一个正方形 其实,画正方形就是画两个三角形,用四个顶点以及使用索引来实现 完整代码在Square项目的Application.cpp里 先贴上窗口初始化代码 void BaseInit() { gl ...

  5. OpenGL学习笔记(1) 画一个三角形

    最近找实习有一丢丢蛋疼,沉迷鬼泣5,四周目通关,又不想写代码,写篇笔记复习一下,要好好学图形学啊 用OpenGL画一个三角形 项目的简介 记录一下跟着learnOpenGL学习的过程 笔记里的代码放在 ...

  6. Direct2D 学习笔记(3)图层 Layer

    利用图层Layer绘制资源网址:https://docs.microsoft.com/zh-cn/windows/win32/direct2d/direct2d-layers-overview   1 ...

  7. 五毛的cocos2d-x学习笔记08-动画

    一个例子就够了,单击文本标签,执行动画.我也是小白,写这个demo的时候遇到了问题,单击文本标签游戏就死掉了.今天为了解决这个问题也是一晚没睡,到学习群里问大神,经过大神的指点解决了问题.原来是Ani ...

  8. AngularJS1.X学习笔记13-动画和触摸

    本文主要涉及了ngAnimation和ngTouch模块,自由男人讲的比较少,估计要用的时候还要更加系统的学习一下. 一.安装 没错,就是酱紫. 二.玩玩动画 <!DOCTYPE html> ...

  9. Python入门学习笔记2:刷题

    1) LeetCode 强的面试题和算法题,要求也比较高,很多国内外的码农在上面刷题.难度从easy到hard都有,而且覆盖面极广,需要你的综合实力去答题. 最简单的题比如字符串的处理有的时候也要用到 ...

随机推荐

  1. Ubuntu 16.04安装Docker-Compose 与 Can't connect to docker from docker-compose

    根据别的 网址做一个记录 :  https://www.linuxidc.com/Linux/2017-01/139574.htm Linux环境 Ubuntu 16.04(LTS)curl安装安装 ...

  2. git致命错误汇总

    1.  拒绝合并无关历史 fatal: refusing to merge unrelated histories 解决办法: git pull origin master --allow-unrel ...

  3. 学习了武沛齐讲的Day11-完

    DAY11 老师讲了很多,理解了一个方法   当有复杂的问题时,先拆解很小的单元(10行),测试通过了,再简化(3行) len range 感悟:其实不用计记代码(主要是记不动),,当遇到问题时:找出 ...

  4. Windows下有用的工具推荐

    1.ConEmu多标签命令行工具https://download.fosshub.com/Protected/expiretime=1495446879;badurl=aHR0cDovL3d3dy5m ...

  5. imp

    imp 重载模块功能 from imp import reload 当在shell中使用一个模块,原始代码改了,要使用新的还得退出shell重新载入一次,这样的话原来的变量就都不在了 这时候可以使用i ...

  6. 用Python实现自己下载音乐的统计

    今天看Python实例,学习了如何对文件进行操作,突然想把自己网易云音乐下载到本地的歌曲名单写到一个txt中,看看具体情况.当然,我现在肯定无法做到直接去网易云音乐上爬取,就做个最简单的吧,嘻嘻^-^ ...

  7. Excel表格内容导出到页面

    引入org.apache.poi.ss.usermodel   public void addExcelBooks() throws Exception { HttpServletRequest re ...

  8. webpack-merge

    配置分离 随着我们业务逻辑的增多,图片.字体.css.ES6以及CSS预处理器和后处理器逐渐的加入到我们的项目中来,进而导致配置文件的增多,使得配置文件书写起来比较繁琐,更严重者(书写特定文件的位置会 ...

  9. hive on tez 错误记录

    1.执行过程失败,报 Container killed on request. Exit code is 143 如下图: 分析:造成这种原因是由于总内存不多,而容器在jvm中占比过高,修改tez-s ...

  10. 在使用avalon框架的时候,用ms-duplex双工绑定,在template上是有数据渲染的,但是js里面却是undefined

    controller绑定是用于圈定某个VM的作用域范围,因为有的页面,你用的对象一致,而这两个作用域里面有相同的数据,那么很有可能是另一个作用域里面的东西影响了这个作用域,所以在指定作用域的给不同的命 ...