画刷的使用方法
需要包含的文件:<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. CSP模拟赛 Repulsed(树形DP)

    题面 ⼩ w ⼼⾥的⽕焰就要被熄灭了. 简便起⻅,假设⼩ w 的内⼼是⼀棵 n − 1 条边,n 个节点的树. 现在你要在每个节点⾥放⼀些个灭⽕器,每个节点可以放任意多个. 接下来每个节点都要被分配给 ...

  2. 题解 [51nod1358] 浮波那契

    题解 [51nod1358] 浮波那契 题面 解析 首先根据经验应该能一眼矩阵快速幂加速.... 因为给了你递推式,并且\(O(n)\)求显然不可能. 所以考虑怎么构造矩阵. 首先要处理的是小数的问题 ...

  3. php面向对象之静态方法使用

    什么是静态方法? 不是所有的变量和方法都要通过创建对象来调用.可以通过给变量和方法加上static关键字来直接调用.无锡大理石测量平台 调用静态成员的语法格式为: 关键字::静态成员 关键字可以是: ...

  4. @ResponseBody 中文乱码 问题

    这篇博文针对的是以下的情形: 当@ResponseBody 的对象是个蕴含中文的实体对象时,一切正常,当@ResponseBody 的对象是个中文String时,接收到乱码. (如果连前半句话的情况都 ...

  5. QTP安装出现windoes installer不能安装升级修补程序问题

    问题如下: windoes installer不能安装升级修补程序问题 如何解决?还未找到解决方案

  6. ros python 四元数 转 欧拉角

    import sysimport math w = -0.99114048481x = -0.00530699081719y = 0.00178255140781z = -0.133612662554 ...

  7. zoom:1的常见作用

    zoom是IE专用属性,firefox等是不支持的.它的本来作用是设置或检索对象的缩放比例,但这作用几乎用不到. 可以让网页实现IE7中的放大缩小功能.比如你想让你的网页缩小为原来的一半,那么就在bo ...

  8. 4.弹性网络( Elastic Net)

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_21904665/article/details/52315642 ElasticNet 是一种 ...

  9. php Class 'ZipArchive' not found怎么解决?

      情况1: 服务器php zip模块没有安装 情况2: Php.ini 中Php zlip扩展没有开   文章来源:外星人来地球 欢迎关注,有问题一起学习欢迎留言.评论

  10. [Oracle] Oracle中和MySql的limit对应的方法

    MySql很贴心,有个限制范围查询的limit函数,用起来也很方便,SQL不用嵌套.如下: select id,name,age,cdate as ctime from emp order by id ...