direct2D图片处理
转自:http://blog.csdn.net/augusdi/article/details/9040177
Using Bitmap Brushes
.png)
Direct2D 中的图片处理增加了很多的灵活的特性,现在的Direct2D可以很好的和GUI,GUI+以及Direct3D混合使用,它支持更多的图形格式,更丰富的绘制方法。使用Direct2D绘制的win7程序,显示效果更好,绘制速度更快。
- LRESULT InItD2D(HWND hWnd)
- {
- //创建一个Direct2D资源指针
- HRESULT hr = D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &pD2DFactory);
- CoInitialize(NULL);
- hr = CoCreateInstance(
- CLSID_WICImagingFactory,
- NULL,
- CLSCTX_INPROC_SERVER,
- IID_PPV_ARGS(&p_pImageFactory)
- );
- if(SUCCEEDED(hr))
- {
- // Create a DirectWrite factory.
- hr = DWriteCreateFactory(
- DWRITE_FACTORY_TYPE_SHARED,
- __uuidof(p_pDWriteFactory),
- reinterpret_cast<IUnknown **>(&p_pDWriteFactory)
- );
- }
- if (SUCCEEDED(hr))
- {
- // Create a DirectWrite text format object.
- hr = p_pDWriteFactory->CreateTextFormat(
- L"微软雅黑",
- NULL,
- DWRITE_FONT_WEIGHT_DEMI_BOLD,
- DWRITE_FONT_STYLE_NORMAL,
- DWRITE_FONT_STRETCH_ULTRA_EXPANDED,
- 24,
- L"MyFont", //locale
- &p_pText
- );
- }
- if (SUCCEEDED(hr))
- {
- // Center the text horizontally and vertically.
- p_pText->SetTextAlignment(DWRITE_TEXT_ALIGNMENT_CENTER);
- p_pText->SetParagraphAlignment(DWRITE_PARAGRAPH_ALIGNMENT_CENTER);
- }
- // Obtain the size of the drawing area.
- GetClientRect(hWnd, &rc);
- // Create a Direct2D render target
- hr = pD2DFactory->CreateHwndRenderTarget(D2D1::RenderTargetProperties(),
- D2D1::HwndRenderTargetProperties(hWnd,D2D1::SizeU(rc.right - rc.left, rc.bottom - rc.top)),
- &p_pRenderTarget);
- //从资源中载入一张图片
- //LoadResourceBitmap(p_pRenderTarget, p_pImageFactory,MAKEINTRESOURCE(IDR_JPG1),L"jpg",&p_pBitmap);
- //从硬盘上载入一张图片
- LoadBitmapFromFile(p_pRenderTarget,p_pImageFactory,L"car.jpg",0,0,&p_pBitmap);
- // 设置笔刷
- if (SUCCEEDED(hr))
- {
- p_pRenderTarget->CreateSolidColorBrush(D2D1::ColorF(D2D1::ColorF::Black),&p_pBlackBrush);
- p_pRenderTarget->CreateBitmapBrush( p_pBitmap ,&p_pBitmapBrush );
- }
- return hr;
- }
其中IWICImagingFactory类提供了一个高效的图形绘制接口
- hr = CoCreateInstance(
- CLSID_WICImagingFactory,
- NULL,
- CLSCTX_INPROC_SERVER,
- IID_PPV_ARGS(&p_pImageFactory)
- );
还有两个函数LoadResourceBitmap()和LoadBitmapFromFile()都是载入图片的函数,这两个函数可以载入我们常见的图片格式,要研究这一块的内容,估计一时半会说不明白,微软现在已经通过类似于控件的方式提供了多种图片的载入方式,目前直接支持的有jpg,bmp,gif,png等。还可以按照自己的解析器来完成自己需要图片格式的读写~

- VOID Render()
- {
- if(!p_pRenderTarget)
- return ;
- static const WCHAR szBitmapBrushText[] = L"图片笔刷";
- // Define the shape of rectangles to be filled with brushes.
- D2D1_RECT_F rcBrushRect = D2D1::RectF(0, 0, 470, 613);
- // Define the area where captions are drawn.
- D2D1_RECT_F rcTextRect = D2D1::RectF(0, 1065, 450, 200);
- p_pRenderTarget->BeginDraw();
- p_pRenderTarget->SetTransform(D2D1::Matrix3x2F::Identity());
- p_pRenderTarget->Clear(D2D1::ColorF(D2D1::ColorF::White));
- // Translate for the bitmap brush.
- p_pRenderTarget-
direct2D图片处理的更多相关文章
- Direct2D WIC绘制图片
绘制图片需要用到WIC,WIC的功能包括: 编解码图片.也可以自定义图片解码插件. 读取图片元数据. 图像处理(最高支持每通道32位). 内置支持一些流行的格式.包括:BMP v5, GIF 89a/ ...
- UWP中的Direct2D
介绍 DirectX一直是Windows平台中高性能图形的代名词,自Win7开始,微软又推出了Direct2D技术,包装于Direct3D,但专注于2D图形,并且准备取代GDI这样的传统2D图形技术. ...
- Direct2D开发:纹理混合
转载请注明出处:http://www.cnblogs.com/Ray1024 一.概述 我们都知道Direct2D可以加载并显示图片,但是不知道你有没有想过,这个2D的图形引擎可以进行纹理混合吗?如果 ...
- Direct2D开发:从资源加载位图
转载请注明出处:http://www.cnblogs.com/Ray1024 一.概述 Direct2D使用Windows图像处理组件 (WIC) 来加载位图.从文件加载位图的方法很简单,而且网上的教 ...
- 杂谈SharpDx中的WIC组件——我们需要WIC的图片编码功能么?
在前文 SharpDX之Direct2D教程II——加载位图文件和保存位图文件 中,发现在VB2010中不能很好的运用SharpDx中的WIC组件进行图片的编码工作.可能是我的设置问题,也可能是Sha ...
- SharpDX之Direct2D教程II——加载位图文件和保存位图文件
本系列文章目录: SharpDX之Direct2D教程I——简单示例和Color(颜色) 绘制位图是绘制操作的不可缺少的一部分.在Direct2D中绘制位图,必须先利用WIC组件将位图加载到内存中,再 ...
- C# 使用 Direct2D 实现斜角效果
Direct2D 是微软新的二维图形 API,可为二维几何图形.位图和文本提供高性能和高质量的呈现.Direct2D 支持硬件加速,无论是绘制速度还是绘制质量,Direct2D 都要比 GDI 和 G ...
- Direct2D 简介
Direct2D是什么? Direct2D是一套高性能的硬件加速API(代码运行在GPU),用于渲染几何图形,图片和文本,并且可以与Direct3D,GDI,GDI+交互. 什么程序员应该使用Dire ...
- Direct2D 几何图形绘制基础
之前说过,D2D主要为了绘制有三种类型的数据:几何图形,图片,文字.这几种对象也叫做资源,资源就是要D2D流水线中要被加工的对象. 几何图形包括: 简单几何图形 直线,DrawLine,由起点和终点构 ...
随机推荐
- php温习-变量,常量
1.变量 内存中用于临时存储数据的一个空间,空间有一个名字子,变量都是以$开头 预定义变量: $_GET $_POST $_REQUEST $_SEVER $_SEESION $_COO ...
- Java新建线程的3种方法
Java新建线程的3种方法 =================== Java创建线程有3种方法:(1)继承Thread;(2)实现Runnable接口:(3)实现Callable接口; 由于Java只 ...
- 使用sha512算法加密linux密码
查看当前主机的加密算法: [root@realserver ~]# authconfig --test |grep hashing password hashing algorithm is sha5 ...
- 启用/禁用以太网的批处理,用于一个网卡切换本地网络和wifi使用(Win10)
注意下面时英文版上默认网络使用,同时接入了网线和wifi时,本地网络优先wifi. 所以禁用本地网络就会自动连接到wifi,启用本地网络,就会禁用wifi. 批处理支持 -y 参数,跳过用户输入y,代 ...
- SPOJ-ANDROUND -线段树/与操作
ANDROUND - AND Rounds #tree You are given a cyclic array A having N numbers. In an AND round, each e ...
- Gruntjs提高生产力(一)
gruntjs是一个基于nodejs的自动化工具,只要熟悉nodejs或者又一定js经验就可以熟练应用. 1. 安装 a. 保证已安装了nodejs,并带有npm b.安装客户端命令行工具,grunt ...
- 【Error】2003 - Can't connect to MySQL server on 'localhost' (10038)
此错误主要是连接MySQL地址的地址搞错了. 可以看下 MySQL 的配置文件 /etc/mysql/my.cnf, 其中绑定的本地地址如下: bind-address=127.0.0.1 将其注释掉 ...
- 【Error】local variable 'xxx' referenced before assignment
此种错误涉及到变量的作用域,即全局变量和局部变量的操作. 总结如下: 内部函数,不修改全局变量可以访问全局变量 内部函数,修改同名全局变量,则python会认为它是一个局部变量 在内部函数修改同名全局 ...
- 转:kafka入门
一.基本概念 介绍 Kafka是一个分布式的.可分区的.可复制的消息系统.它提供了普通消息系统的功能,但具有自己独特的设计. 这个独特的设计是什么样的呢? 首先让我们看几个基本的消息系统术语:Kafk ...
- [转载]Java生成Word文档
在开发文档系统或办公系统的过程中,有时候我们需要导出word文档.在网上发现了一个用PageOffice生成word文件的功能,就将这块拿出来和大家分享. 生成word文件与我们编辑word文档本质上 ...