Direct2D 学习笔记(2)画刷 Brush
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形式特定值
从文件中加载位图:
//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();
单色刷——ID2D1SolidColorBrush
ID2D1SolidColorBrush *pscBrush;
//创建单色画刷
RenderTarget->CreateSolidColorBrush(
D2D1::ColorF(, 1.0f),
&pscBrush
);
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
);
g_pTarget->CreateRadialGradientBrush(
RadialGradientBrushProperties(
Point2F(,), //颜色中心
Point2F(, ), //颜色偏离中心
, //颜色x轴半径
//颜色y轴半径
),
g_pGsCollection,
&g_pRgBrush
);
//使用WIC从文件中加载资源后
pRenderTarget->CreateBitmapBrush(pBitmap, &BitmapBrush);
pRenderTarget->BeginDraw();
pRenderTarget->FillRectangle(&rect, pxxxBrush);
pRenderTarget->DrawRectangle(&rect, pxxxBrush);
pRenderTarget->EndDraw();
下一期将学习位图刷和位图的更多用法。
Direct2D 学习笔记(2)画刷 Brush的更多相关文章
- 简述WPF中的画刷(Brush)
原文:简述WPF中的画刷(Brush) -------------------------------------------------------------------------------- ...
- Direct2D 学习笔记(1)概述
Direct2D 应用程序接口概述 资源网站 https://docs.microsoft.com/en-us/windows/win32/Direct2D/the-direct2d-api 主要用到 ...
- Direct2D 学习笔记 前言
Direct2D模板程序网址:https://docs.microsoft.com/zh-cn/windows/win32/direct2d/direct2d-quickstart DirectX S ...
- OpenGL学习笔记(2) 画一个正方形
画一个正方形 其实,画正方形就是画两个三角形,用四个顶点以及使用索引来实现 完整代码在Square项目的Application.cpp里 先贴上窗口初始化代码 void BaseInit() { gl ...
- OpenGL学习笔记(1) 画一个三角形
最近找实习有一丢丢蛋疼,沉迷鬼泣5,四周目通关,又不想写代码,写篇笔记复习一下,要好好学图形学啊 用OpenGL画一个三角形 项目的简介 记录一下跟着learnOpenGL学习的过程 笔记里的代码放在 ...
- Direct2D 学习笔记(3)图层 Layer
利用图层Layer绘制资源网址:https://docs.microsoft.com/zh-cn/windows/win32/direct2d/direct2d-layers-overview 1 ...
- 五毛的cocos2d-x学习笔记08-动画
一个例子就够了,单击文本标签,执行动画.我也是小白,写这个demo的时候遇到了问题,单击文本标签游戏就死掉了.今天为了解决这个问题也是一晚没睡,到学习群里问大神,经过大神的指点解决了问题.原来是Ani ...
- AngularJS1.X学习笔记13-动画和触摸
本文主要涉及了ngAnimation和ngTouch模块,自由男人讲的比较少,估计要用的时候还要更加系统的学习一下. 一.安装 没错,就是酱紫. 二.玩玩动画 <!DOCTYPE html> ...
- Python入门学习笔记2:刷题
1) LeetCode 强的面试题和算法题,要求也比较高,很多国内外的码农在上面刷题.难度从easy到hard都有,而且覆盖面极广,需要你的综合实力去答题. 最简单的题比如字符串的处理有的时候也要用到 ...
随机推荐
- 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安装安装 ...
- git致命错误汇总
1. 拒绝合并无关历史 fatal: refusing to merge unrelated histories 解决办法: git pull origin master --allow-unrel ...
- 学习了武沛齐讲的Day11-完
DAY11 老师讲了很多,理解了一个方法 当有复杂的问题时,先拆解很小的单元(10行),测试通过了,再简化(3行) len range 感悟:其实不用计记代码(主要是记不动),,当遇到问题时:找出 ...
- Windows下有用的工具推荐
1.ConEmu多标签命令行工具https://download.fosshub.com/Protected/expiretime=1495446879;badurl=aHR0cDovL3d3dy5m ...
- imp
imp 重载模块功能 from imp import reload 当在shell中使用一个模块,原始代码改了,要使用新的还得退出shell重新载入一次,这样的话原来的变量就都不在了 这时候可以使用i ...
- 用Python实现自己下载音乐的统计
今天看Python实例,学习了如何对文件进行操作,突然想把自己网易云音乐下载到本地的歌曲名单写到一个txt中,看看具体情况.当然,我现在肯定无法做到直接去网易云音乐上爬取,就做个最简单的吧,嘻嘻^-^ ...
- Excel表格内容导出到页面
引入org.apache.poi.ss.usermodel public void addExcelBooks() throws Exception { HttpServletRequest re ...
- webpack-merge
配置分离 随着我们业务逻辑的增多,图片.字体.css.ES6以及CSS预处理器和后处理器逐渐的加入到我们的项目中来,进而导致配置文件的增多,使得配置文件书写起来比较繁琐,更严重者(书写特定文件的位置会 ...
- hive on tez 错误记录
1.执行过程失败,报 Container killed on request. Exit code is 143 如下图: 分析:造成这种原因是由于总内存不多,而容器在jvm中占比过高,修改tez-s ...
- 在使用avalon框架的时候,用ms-duplex双工绑定,在template上是有数据渲染的,但是js里面却是undefined
controller绑定是用于圈定某个VM的作用域范围,因为有的页面,你用的对象一致,而这两个作用域里面有相同的数据,那么很有可能是另一个作用域里面的东西影响了这个作用域,所以在指定作用域的给不同的命 ...