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

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

  1. D2D1::ColorF(0.0f, 0.0f, 0.0f, 1.0f);     //rgba形式
  2. D2D1::ColorF(0x000000, 1.0f);          //UINT32形式
  3. D2D1::ColorF(D2D1::ColorF::Pink, 1.0f);    //Enum形式特定值
2.位图的加载——ID2D1Bitmap
从文件中加载位图:
以下代码可以看作是一个模板,除了第2步中的文件名”filename",以及第4步中的width/height需要更改,其他的只需套用即可完成位图ID2D1Bitmap的初始化,因此一般把它封装成一个函数使用。
  1. //1初始化IWICImagingFactory
  2. IWICImagingFactory *pIWICFactory;
  3. CoInitialize(NULL);
  4. CoCreateIstance(
  5. CLSID_WICImagingFactory,
  6. NULL,
  7. CLSCTX_INPROC_SERVER,
  8. IID_PPV_ARGS(&pIWICFactory)
  9. );
  10.  
  11. ID2D1Bitmap *pBitmap;
  12. IWICBitmapDecoder *pDecoder;
  13. IWICBitmapFrameDecode *pSource;
  14. IWICStream *pStream;
  15. IWICFormatConverter *pConverter;
  16. IWICBitmapScaler *pScaler;
  17.  
  18. //2初始化IWICBitmapDecoder
  19. pIWICFactory->CreateDecoderFromFilename(
  20. "filename",    //修改为图片的路径名
  21. NULL,
  22. GENERIC_READ,
  23. WICDecodeMetadataCacheOnload,
  24. &pDecoder
  25. );
  26.  
  27. //3初始化IWICBitmapFrameDecode
  28. pDecoder->GetFrame(, &pSource);
  29. //4初始化IWICBitmapScaler
  30. pIWICFactory->CreateBitmapScaler(&pScaler);
  31. pScaler->Initialize(
  32. pSource,
  33. width,   //缩放至width宽度
  34. height,   //缩放至height高度
  35. WICBitmapInterpolationModeCubic
  36. );
  37.  
  38. //4初始化IWICFormatConverter
  39. pIWICFactory->CreateFormatConverter(&pConverter);
  40. pConverter->Initialize(
  41. pScaler,
  42. GUID_WICPixelFormat32bppPBGRA,
  43. WICBitmapDitherTypeNone,
  44. NULL,
  45. 0.0f,
  46. WICBitmapPaletteTypeMedianCut
  47. );
  48.  
  49. //5从WIC中加载位图
  50. pRenderTarget->CreateBitmapFromWicBitmap(
  51. pConvert,
  52. NULL,
  53. &pBitmap
  54. );
  55.  
  56. //6释放临时对象
  57. XXXXX->Release();
3.画刷类型
单色刷——ID2D1SolidColorBrush

  1. ID2D1SolidColorBrush *pscBrush;
  2. //创建单色画刷
  3. RenderTarget->CreateSolidColorBrush(
  4. D2D1::ColorF(, 1.0f),
  5. &pscBrush
  6. );
线性渐变刷——ID2D1LinearFradientBrush
  1. ID2D1LinearGradientBrush *plgBrush;
  2. ID2D1GradientStopCollection *pgsCollection;
  3.  
  4. //创建渐变节点数组
  5. D2D1_FRADIENT_STOP gradientStops[];
  6. gradientStops[] = {0.0f, D2D1::ColorF(, 1.0f)};
  7. gradientStops[] = {1.0f, D2D1::ColorF(0xffffff, 1.0f)};
  8.  
  9. //创建渐变条(这一部分可以想象成ps中的那个渐变)
  10. RenderTarget->CreateGradientStopCollection(
  11. gradientStops, //渐变颜色点信息
  12. , //渐变颜色点数量
  13. D2D1_GAMMA_2_2,
  14. D2D1_EXTEND_MODE_CLAMP,
  15. &pGsCollection
  16. );
  17.  
  18. //创建渐变刷
  19. RenderTarget->CreateLinearGradientBrush(
  20. LinearGradientBrushProperties(
  21. D2D1::Point2F(, ), //渐变线起始点(窗口坐标)
  22. D2D1::Point2F(, )   //渐变线终点(窗口坐标)
  23. ),
  24. pgsCollection,
  25. &plgBrush
  26. );
发散渐变刷——ID2D1RadialGradientBrush

  1. g_pTarget->CreateRadialGradientBrush(
  2. RadialGradientBrushProperties(
  3. Point2F(,),   //颜色中心
  4. Point2F(, ), //颜色偏离中心
  5. , //颜色x轴半径
  6. //颜色y轴半径
  7. ),
  8. g_pGsCollection,
  9. &g_pRgBrush
  10. );
 
位图刷——ID2D1BitmapBrush

  1. //使用WIC从文件中加载资源后
  2. pRenderTarget->CreateBitmapBrush(pBitmap, &BitmapBrush);
4.画刷使用
  1. pRenderTarget->BeginDraw();
  2. pRenderTarget->FillRectangle(&rect, pxxxBrush);
  3. pRenderTarget->DrawRectangle(&rect, pxxxBrush);
  4. 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. jquery关于多个显示隐藏

    今天做了一个关于多个栏目的隐藏与显示,内容为初始化显示6个栏目,点击按钮显示所有的栏目,在次点击隐藏出现的栏目 <div class="ftlt_z_navigation acer&q ...

  2. Nginx 负载均衡条件下 Redis 共享Session (Java)(二)

    关于Session的问题 网上有各个方面的针对,有在nginx 上处理: ip_hash的session,有在 tomcat 做处理:修改Context文件,有针对项目做处理.本篇就是对项目处理 1. ...

  3. LOJ P10116 清点人数 题解

    每日一题 day13 打卡 Analysis 用简单的树状数组维护单点修改和查询就行了 #include<iostream> #include<cstdio> #include ...

  4. Jquery使用心得

    1.<form>提交时,会提交里面有name属性的元素,而不是id属性   $("#form").serialize(); 得到里面每个元素的拼接值 id=1& ...

  5. learning scala How To Create Implicit Function

    println("Step 1: How to create a wrapper String class which will extend the String type") ...

  6. luogu 1593

    $Answer = A ^ B $ 的因子之和 将 $A$ 进行质因数分解$A = p_1 ^ {a_1} P_2 ^ {a_2} p_3 ^ {a_3} \cdots p_k ^ {a_k}$ $A ...

  7. 【テンプレート】字符串hash

    不懂hash是什么的盆友给出直通车:滴滴滴,开车啦~ 如果你看懂了的话: hash模板来也~ #include <cstdio> #include <string> #incl ...

  8. 使用Keras训练神经网络备忘录

    小书匠深度学习 文章太长,放个目录: 1.优化函数的选择 2.损失函数的选择 2.2常用的损失函数 2.2自定义函数 2.1实践 2.2将损失函数自定义为网络层 3.模型的保存 3.1同时保持结构和权 ...

  9. eclipse 点击 new window 后,关闭新增的窗口

    点击右上角的 X 关闭,不要点击 exit 退出

  10. codeforces#1257 F. Make Them Similar ( 经典中间相遇问题 )

    题目链接: http://codeforces.com/contest/1257/problem/F 题意: 给出$n$个30位整数 找到一个数,让它与这$n$个数分别异或,得到的$n$个数二进制1的 ...