文档章节

Direct2D (33) : 通过 ID2D1BitmapRenderTarget 绘制背景网格

涂孟超
 涂孟超
发布于 2014/09/26 15:33
字数 200
阅读 20
收藏 0

ID2D1BitmapRenderTarget 是内存绘图的解决方案。它从 ID2D1RenderTarget 继承,只多出一个 GetBitmap() 方法。

{相关方法}
TDirect2DCanvas.RenderTarget.CreateCompatibleRenderTarget(); //建立 ID2D1BitmapRenderTarget
ID2D1BitmapRenderTarget.GetBitmap();                         //从 ID2D1BitmapRenderTarget 获取 ID2D1Bitmap


测试代码:

uses Direct2D, D2D1;

{通过 ID2D1BitmapRenderTarget 从内存建立 ID2D1BitmapBrush 的函数}
function GetBitmapBrush(RenderTarget: ID2D1RenderTarget): ID2D1BitmapBrush;
var
  iBitmapRenderTarget: ID2D1BitmapRenderTarget;
  rSizeF: TD2DSizeF;
  iSolidColorBrush: ID2D1SolidColorBrush;
  iBitmap: ID2D1Bitmap;
  rBitmapBrushProperties: TD2D1BitmapBrushProperties;
begin
  {根据指定大小建立 ID2D1BitmapRenderTarget}
  rSizeF := D2D1SizeF(10, 10);
  RenderTarget.CreateCompatibleRenderTarget(@rSizeF, nil, nil, D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS_NONE, iBitmapRenderTarget);

  {在 ID2D1BitmapRenderTarget 中绘图}
  RenderTarget.CreateSolidColorBrush(D2D1ColorF(clGreen), nil, iSolidColorBrush);
  iBitmapRenderTarget.BeginDraw;
  iBitmapRenderTarget.FillRectangle(D2D1RectF(0, 0, 10, 1), iSolidColorBrush);
  iBitmapRenderTarget.FillRectangle(D2D1RectF(0, 1, 1, 10), iSolidColorBrush);
  iBitmapRenderTarget.EndDraw();

  {从 ID2D1BitmapRenderTarget 输出 ID2D1Bitmap}
  iBitmapRenderTarget.GetBitmap(iBitmap);

  {根据刚刚获取的 ID2D1Bitmap 建立 ID2D1BitmapBrush}
  rBitmapBrushProperties.extendModeX := D2D1_EXTEND_MODE_WRAP;
  rBitmapBrushProperties.extendModeY := D2D1_EXTEND_MODE_WRAP;
  rBitmapBrushProperties.interpolationMode := D2D1_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR;
  RenderTarget.CreateBitmapBrush(iBitmap, @rBitmapBrushProperties, nil, Result);
end;

procedure TForm1.FormPaint(Sender: TObject);
var
  cvs: TDirect2DCanvas;
begin
  cvs := TDirect2DCanvas.Create(Canvas, ClientRect);
  cvs.BeginDraw;
  cvs.RenderTarget.Clear(D2D1ColorF(clBlack));
  cvs.Brush.Handle := GetBitmapBrush(cvs.RenderTarget);
  cvs.FillRectangle(ClientRect);
  cvs.EndDraw;
  cvs.Free;
end;

procedure TForm1.FormResize(Sender: TObject);
begin
  Repaint;
end;


效果图:



本文转载自:http://www.cnblogs.com/del/archive/2011/04/08/2009542.html

涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
私信 提问
Direct2D教程(十)绘制文本

概述 在Direct2D中,文本的绘制是通过DirectWrite来实现的,DirectWrite实际上已经是一个独立的DirectX组件了。关于DirectWrite,我摘录了MSDN的一段文字。 DirectWrite介绍 当今的应用程序应...

吞吞吐吐的
2017/10/17
0
0
杂谈SharpDx中的WIC组件——我们需要WIC的图片编码功能么?

在前文 SharpDX之Direct2D教程II——加载位图文件和保存位图文件 中,发现在VB2010中不能很好的运用SharpDx中的WIC组件进行图片的编码工作。可能是我的设置问题,也可能是SharpDx对VB2010支持...

万仓一黍
2013/10/08
0
0
使用 Direct2D 绘制分层窗口

这是我关于Direct2D的第三篇介绍了,今天主要讲下其无可比拟的互操作性。为了避免繁缛末节的讲述,我们从一个实例入手:层级窗口。相对于windows的其它众多功能。层级窗口并未做相应的更新,...

Dy_
2014/01/16
8.6K
10
Windows桌面应用程序(1-2-4-7th) DPI和设备无关的像素

要使用Windows图形进行有效编程,您必须了解两个相关的概念: 每英寸点数(DPI) 设备无关像素(DIP)。 我们从DPI开始。这将需要短暂的绕行排版。在印刷术中,类型的大小以称为点的单位来测量。一点...

qq_37422196
2018/01/12
0
0
WPF 使用 Direct2D1 画图 绘制基本图形

本文来告诉大家如何在 Direct2D1 绘制基本图形,包括线段、矩形、椭圆 本文是一个系列 WPF 使用 Direct2D1 画图入门 WPF 使用 Direct2D1 画图 绘制基本图形 本文的组织参考Direct2D,对大神表...

lindexi_gd
2018/04/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Boot + Mybatis + Ehcache 二级缓存实例

二级缓存是多个SqlSession共享的,其作用域是mapper的同一个namespace,不同的sqlSession两次执行相同namespace下的sql语句且向sql中传递参数也相同即最终执行相同的sql语句,第一次执行完毕...

xiaolyuh
8分钟前
1
0
Spring源码学习(二)哎呦,按菜谱做菜与AbstractAutowireCapableBeanFactory.createBean流程差不多

记得跟老婆谈恋爱时,有一天心血来潮给老婆做饭,按照菜谱一步一步的做,结果差点把厨房烧了!!! 这事至今老婆还记得。 入口 上一篇说了,AbstractBeanFactory.getBean的主流程 ,今天来说下...

温安适
10分钟前
25
0
前端UI攻城狮 你们该抛弃jQuery了

你不再需要jQuery! Web工程师太依赖jQuery了,某种意义上说jQuery已经成了JavaScript的同义词。但是我们真的需要他么?或许我们应该反思一下什么时候才真的需要jQuery。 对我个人而言开始使...

前端老手
11分钟前
1
0
六、Java设计模式之工厂方法

工厂方法定义: 定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行 类型:创建型 工厂方法-使用场景: 创建对象需要大量重复的代码 ...

东风破2019
53分钟前
5
0
win服务器管理遇到的一系列问题记录

有些小伙伴在使用iis7远程桌面管理工具的时候总是会遇到一系列的问题,下面就是为大家介绍一下服务器日常管理过程中出现的问题及我的解决办法和心得。希望能帮到大家。   拒绝服务器重新启...

1717197346
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部