随笔 - 2146  文章 - 96 评论 - 11754 trackbacks - 253

随笔分类 - 45.Direct2D
Direct2D (43) : IDWriteGdiInterop 接口
摘要: IDWriteGdiInterop 接口的主要用途是它提供 IDWriteBitmapRenderTarget 留出了 HDC 接口,以与 GDI、GDI+ 交互;另提供了 LOGFONT 结构与 IDWriteFont、IDWriteFontFace 的相互转换的方法。IDWriteGdiInterop = interface(IUnknown) function CreateFontFromLOGFONT( { LOGFONT -> IDWriteFont } var logFont: LOGFONTW; // out font: IDWriteFont // ): HResult;阅读全文
posted @ 2011-04-16 13:00 万一 阅读(1756) | 评论 (1) 编辑
Direct2D (42) : 在文本布局中嵌入图片 IDWriteTextLayout.SetInlineObject()
摘要: 这段代码怎么也过不去了,反反复复找不到原因;有谁知道,万望提醒我一下。上面是刚碰到错误时的求助信息;现在终于找到错误了:是 D2D1.pas 的代码有问题,修改方法如下:{ 1、把 D2D1.pas 中 4142 行中的 var 修改为 const 或者去掉 }function SetInlineObject(var inlineObject: IDWriteInlineObject; textRange: TDwriteTextRange): HResult; stdcall;{ 2、重新编译 Direct2D.pas、D2D1.pas,最好在 Debug 和 Release 两种模式下分别阅读全文
posted @ 2011-04-14 23:34 万一 阅读(2139) | 评论 (4) 编辑
Direct2D (41) : 文本命中测试 - IDWriteTextLayout.HitTestPoint()
摘要: uses Direct2D, D2D1;var iTextLayout: IDWriteTextLayout;{构建 DWRITE_TEXT_RANGE 结构的函数}function DWriteTextRange(pos,len: Cardinal): TDwriteTextRange;begin Result.startPosition := pos; Result.length := len;end;{建立 IDWriteTextLayout}procedure TForm1.FormCreate(Sender: TObject);var str: string; iTextFormat阅读全文
posted @ 2011-04-14 18:11 万一 阅读(1216) | 评论 (0) 编辑
Direct2D (40) : 分别设置 IDWriteTextLayout 中文本的颜色
摘要: function SetDrawingEffect( const drawingEffect: IUnknown; //颜色接口; 该接口需自己定义和实现, 只要能存取颜色即可 textRange: TDwriteTextRange //要设置的范围): HResult; stdcall;测试代码:unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Direct2D, D2D1;const SID_IColorDrawingEff阅读全文
posted @ 2011-04-14 09:31 万一 阅读(1332) | 评论 (0) 编辑
Direct2D (39) : 使用 IDWriteTextLayout.Draw() 方法绘制文本
摘要: 使用 IDWriteTextLayout.Draw() 方法绘制文本主要是实现 IDWriteTextRenderer 接口。IDWriteTextRenderer 接口只能是手动实现,很灵活。unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Direct2D, D2D1;type TForm1 = class(TForm) procedure FormPaint(Sender: TObject); procedure Form阅读全文
posted @ 2011-04-13 15:59 万一 阅读(1732) | 评论 (1) 编辑
Direct2D (38) : RenderTarget.DrawTextLayout() 与 IDWriteTextLayout
摘要: 使用 RenderTarget.DrawTextLayout() 方法主要是设置 IDWriteTextLayout 接口;构建 IDWriteTextLayout 接口需要 IDWriteTextFormat 接口。IDWriteTextLayout 接口是经过完全分析和格式化后的文本块。{RenderTarget.DrawTextLayout() 方法}procedure DrawTextLayout( origin: D2D1_POINT_2F; //起点 const textLayout: IDWriteTextLayout; //分析和格式化后的文本块 const defaultFo阅读全文
posted @ 2011-04-13 12:39 万一 阅读(1773) | 评论 (0) 编辑
Direct2D (37) : 使用不同画刷绘制文本
摘要: uses Direct2D, D2D1;{建立位图画刷的函数}function GetBitmapBrush(Canvas: TDirect2DCanvas; filePath: string): ID2D1BitmapBrush;var rBBP: TD2D1BitmapBrushProperties; bit: TBitmap;begin bit := TBitmap.Create; bit.LoadFromFile(filePath); rBBP.extendModeX := D2D1_EXTEND_MODE_WRAP; rBBP.extendModeY := D2D1_EXTEND_M阅读全文
posted @ 2011-04-13 11:32 万一 阅读(1510) | 评论 (0) 编辑
Direct2D (36) : RenderTarget.DrawText() 与 IDWriteTextFormat
摘要: TDirect2DCanvas 提供了两种输出文本的方法:TextOut()、TextRect(),因太过高级,基本没有实用价值。TDirect2DCanvas.RenderTarget 有三种输出文本的方法:DrawText()、DrawTextLayout()、DrawGlyphRun()。DrawText() 对文本格式的控制能力类似 TMemo;DrawTextLayout() 对文本格式的控制能力类似 TRichEdit;DrawGlyphRun() 可以完成更复杂的字形输出。另外 DirectWrite 还有其它文本输出方法,如回调 IDWriteTextRenderer 接口。T阅读全文
posted @ 2011-04-12 21:42 万一 阅读(2205) | 评论 (1) 编辑
Direct2D (35) : 通过 DirectWrite 获取字体列表
摘要: uses Direct2D, D2D1;procedure TForm1.Button1Click(Sender: TObject);var iFontCollection: IDWriteFontCollection; //字体集合 iFontFamily: IDWriteFontFamily; //字族 iLocalizedStrings: IDWriteLocalizedStrings; //按区域设置名称编制索引的字符串集合 i,j: Integer; buf: array[0..LF_FACESIZE] of Char;begin ListBox1.Clear; DWriteFact阅读全文
posted @ 2011-04-11 19:09 万一 阅读(1379) | 评论 (4) 编辑
Direct2D (33) : 通过 ID2D1BitmapRenderTarget 绘制背景网格
摘要: ID2D1BitmapRenderTarget 是内存绘图的解决方案。它从 ID2D1RenderTarget 继承,只多出一个 GetBitmap() 方法。{相关方法}TDirect2DCanvas.RenderTarget.CreateCompatibleRenderTarget(); //建立 ID2D1BitmapRenderTargetID2D1BitmapRenderTarget.GetBitmap(); //从 ID2D1BitmapRenderTarget 获取 ID2D1Bitmap测试代码:uses Direct2D, D2D1;{通过 ID2D1BitmapRender阅读全文
posted @ 2011-04-08 15:52 万一 阅读(2767) | 评论 (44) 编辑
Direct2D (32) : 把几何图形网格化为若干三角形 - ID2D1Geometry.Tessellate()
摘要: {相关接口}ID2D1TessellationSink //用于接收 ID2D1Geometry.Tessellate() 方法输出的三角形数组ID2D1Mesh //是使用 ID2D1TessellationSink 填充的网格,它负责 Open ID2D1TessellationSink{相关方法}TDirect2DCanvas.RenderTarget.CreateMesh() //建立 ID2D1MeshTDirect2DCanvas.RenderTarget.FillMesh() //填充 ID2D1Mesh,只能在 D2D1_ANTIALIAS_MODE_ALIASED 模式下使用阅读全文
posted @ 2011-04-08 13:25 万一 阅读(1393) | 评论 (0) 编辑
Direct2D (31) : 命中测试 - ID2D1Geometry.FillContainsPoint()、StrokeContainsPoint()
摘要: uses Direct2D, D2D1;const penWidth = 25;var iGeometry: ID2D1EllipseGeometry;procedure TForm1.FormCreate(Sender: TObject);begin D2DFactory.CreateEllipseGeometry(D2D1Ellipse(D2D1PointF(120, 90), 80, 50), iGeometry);end;procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);阅读全文
posted @ 2011-04-08 11:15 万一 阅读(1212) | 评论 (0) 编辑
Direct2D (30) : 判断几何对象的关系 - ID2D1Geometry.CompareWithGeometry()
摘要: {相关常量}//D2D1_GEOMETRY_RELATION = type Integer;D2D1_GEOMETRY_RELATION_UNKNOWN = 0; //未知D2D1_GEOMETRY_RELATION_DISJOINT = 1; //不相交D2D1_GEOMETRY_RELATION_IS_CONTAINED = 2; //属于D2D1_GEOMETRY_RELATION_CONTAINS = 3; //包含D2D1_GEOMETRY_RELATION_OVERLAP = 4; //重叠测试代码:uses Direct2D, D2D1;procedure TForm1.Form阅读全文
posted @ 2011-04-07 22:32 万一 阅读(961) | 评论 (0) 编辑
Direct2D (29) : 简化曲线到直线 - ID2D1Geometry.Simplify()
摘要: uses Direct2D, D2D1;procedure TForm1.FormPaint(Sender: TObject);var cvs: TDirect2DCanvas; iEllipseGeometry: ID2D1EllipseGeometry; iPathGeometry: ID2D1PathGeometry; iGeometrySink: ID2D1GeometrySink; ptCenter: TPoint;begin ptCenter := Point(ClientWidth div 2, ClientHeight div 2); D2DFactory.CreateElli阅读全文
posted @ 2011-04-07 17:32 万一 阅读(1141) | 评论 (1) 编辑
Direct2D (28) : 获取几何图形的面积、线总长度和指定位置的点坐标
摘要: uses Direct2D, D2D1;procedure TForm1.FormPaint(Sender: TObject);var cvs: TDirect2DCanvas; iEllipseGeometry: ID2D1EllipseGeometry; area,length: Single; rPointF1,rPointF2: TD2DPoint2f; ptCenter: TPoint;begin ptCenter := Point(ClientWidth div 2, ClientHeight div 2); D2DFactory.CreateEllipseGeometry(D2D阅读全文
posted @ 2011-04-07 17:08 万一 阅读(1040) | 评论 (0) 编辑
Direct2D (27) : 获取几何图形的轮廓 - ID2D1Geometry.Outline()
摘要: uses Direct2D, D2D1;procedure TForm1.FormPaint(Sender: TObject);var cvs: TDirect2DCanvas; iEllipseGeometry: ID2D1EllipseGeometry; iTransformedGeometrys: array[0..7] of ID2D1TransformedGeometry; iGeometryGroup: ID2D1GeometryGroup; iGeometrySink: ID2D1GeometrySink; iPathGeometry: ID2D1PathGeometry; pt阅读全文
posted @ 2011-04-07 15:16 万一 阅读(1188) | 评论 (0) 编辑
Direct2D (26) : 获取几何图形的边界
摘要: {相关方法}ID2D1Geometry.GetBounds(); //获取边界矩形ID2D1Geometry.GetWidenedBounds(); //获取包含画笔区域的边界矩形测试代码:uses Direct2D, D2D1;procedure TForm1.FormPaint(Sender: TObject);var cvs: TDirect2DCanvas; iGeometry: ID2D1EllipseGeometry; R1,R2: TD2DRectF; iBrush: ID2D1SolidColorBrush;begin {几何图形} D2DFactory.CreateEllip阅读全文
posted @ 2011-04-07 12:24 万一 阅读(984) | 评论 (0) 编辑
Direct2D (25) : 将画笔线条所占用的区域转换为路径 - ID2D1Geometry.Widen()
摘要: uses Direct2D, D2D1;procedure TForm1.FormPaint(Sender: TObject);var cvs: TDirect2DCanvas; iGeometry: ID2D1Geometry; iPathGeometry: ID2D1PathGeometry; iGeometrySink: ID2D1GeometrySink;begin {建立一个几何对象 iGeometry} D2DFactory.CreateEllipseGeometry( D2D1Ellipse(D2D1PointF(ClientWidth/2, ClientHeight/2), C阅读全文
posted @ 2011-04-07 11:34 万一 阅读(1040) | 评论 (0) 编辑
Direct2D (24) : 合并几何对象
摘要: 合并通过 ID2D1Geometry.CombineWithGeometry() 完成,但返回的是 ID2D1SimplifiedGeometrySink(ID2D1GeometrySink 的父对象);需要把 ID2D1SimplifiedGeometrySink 添加到 ID2D1PathGeometry 才能使用。uses Direct2D, D2D1;procedure TForm1.FormPaint(Sender: TObject);var cvs: TDirect2DCanvas; iEllipseGeometry1, iEllipseGeometry2: ID2D1Ellips阅读全文
posted @ 2011-04-06 20:39 万一 阅读(1052) | 评论 (0) 编辑
Direct2D (23) : 复合几何对象之 ID2D1GeometryGroup
摘要: uses Direct2D, D2D1;procedure TForm1.FormPaint(Sender: TObject);var cvs: TDirect2DCanvas; iGeometryGroup: ID2D1GeometryGroup; arrGeometry: array[0..3] of ID2D1EllipseGeometry; ptCenter: TD2D1Point2F; i: Integer; rh,rv: Single; iFactory: ID2D1Factory;begin ptCenter := D2D1PointF(ClientWidth/2, Client阅读全文
posted @ 2011-04-06 16:02 万一 阅读(901) | 评论 (0) 编辑
Direct2D (22) : 复合几何对象之 ID2D1TransformedGeometry
摘要: 复合几何对象包括 ID2D1GeometryGroup 和 ID2D1TransformedGeometry,它们都继承自 ID2D1Geometry。ID2D1TransformedGeometry 只是包含了 2D 变换的 ID2D1Geometry。uses Direct2D, D2D1;procedure TForm1.FormPaint(Sender: TObject);var cvs: TDirect2DCanvas; iTransformedGeometry: ID2D1TransformedGeometry; iRectangleGeometry: ID2D1Rectangle阅读全文
posted @ 2011-04-06 15:03 万一 阅读(868) | 评论 (0) 编辑
Direct2D (21) : 微软官方关于路径的示例
摘要: unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;type TForm1 = class(TForm) procedure FormPaint(Sender: TObject); end;var Form1: TForm1;implementation{$R *.dfm}uses Direct2D, D2D1;{左边小山的路径}function GetLeftMountainGeometry: ID2D1PathGeometry;阅读全文
posted @ 2011-04-06 12:42 万一 阅读(1223) | 评论 (0) 编辑
Direct2D (20) : 图层之 TD2D1LayerParameters.opacityBrush (为图层指定蒙版画刷)
摘要: uses Direct2D, D2D1;procedure TForm1.FormPaint(Sender: TObject);var cvs: TDirect2DCanvas; iLayer: ID2D1Layer; rLayerParameters: TD2D1LayerParameters; wic: TWICImage; R: TRect; iLinearGradientBrush: ID2D1LinearGradientBrush; rLinear: TD2D1LinearGradientBrushProperties; arrGradientStop: array[0..2] of阅读全文
posted @ 2011-04-05 21:48 万一 阅读(1034) | 评论 (2) 编辑
Direct2D (19) : 图层之 TD2D1LayerParameters.geometricMask (使用几何图形剪裁图层)
摘要: uses Direct2D, D2D1;procedure TForm1.FormPaint(Sender: TObject);var cvs: TDirect2DCanvas; iLayer: ID2D1Layer; rLayerParameters: TD2D1LayerParameters; wic: TWICImage; R: TRect; iEllipse: ID2D1EllipseGeometry;begin wic := TWICImage.Create; wic.LoadFromFile('C:\Temp\Test.png'); R := Rect(0, 0, 阅读全文
posted @ 2011-04-05 17:08 万一 阅读(992) | 评论 (0) 编辑
Direct2D (18) : 图层之 TD2D1LayerParameters.contentBounds (图层的有效范围)
摘要: {相关方法}TDirect2DCanvas.RenderTarget.CreateLayer(); //建立层TDirect2DCanvas.RenderTarget.PushLayer(); //开始层;层的功能及效果取决于它的 TD2D1LayerParameters 结构参数TDirect2DCanvas.RenderTarget.PopLayer(); //结束层{相关结构}TD2D1LayerParameters = record contentBounds: TD2D1RectF; //层的有效范围 geometricMask: ID2D1Geometry; //用于剪裁的几何图形阅读全文
posted @ 2011-04-05 15:34 万一 阅读(1231) | 评论 (0) 编辑
Direct2D (17) : 蒙版之 FillGeometry() 方法
摘要: FillGeometry() 可通过两个画刷的重叠运算获取蒙版效果,作为蒙版画刷的渐变色中应该至少有一个透明色。使用放射渐变画刷做蒙版:uses Direct2D, D2D1, Wincodec, ActiveX;{从指定文件建立 ID2D1Bitmap 的函数}function GetD2D1Bitmap(RenderTarget: ID2D1RenderTarget; imgPath: string): ID2D1Bitmap;var iWicFactory: IWICImagingFactory; iWICDecoder: IWICBitmapDecoder; iWICFrameDeco阅读全文
posted @ 2011-04-05 13:10 万一 阅读(1324) | 评论 (0) 编辑
Direct2D (16) : 蒙版之 FillOpacityMask() 方法
摘要: 实现蒙版效果有三种途径:使用 FillOpacityMask()、使用 FillGeometry() 方法、使用图层。FillOpacityMask() 用于处理图像蒙版。期间用到 ID2D1Bitmap,因为对图像格式要求较高,我通过 TDirect2DCanvas.CreateBitmap() 建立 ID2D1Bitmap 时没有成功。后来使用了自定义函数直接使用 WIC 加载并转换格式。蒙版图片是透明图片,将会透过其着色区域看到下层的图片;蒙版图片是以画刷的方式使用的。实现蒙版区域计算时,还应设置 AntialiasMode 模式为 D2D1_ANTIALIAS_MODE_ALIASED阅读全文
posted @ 2011-04-05 09:37 万一 阅读(2077) | 评论 (0) 编辑
Direct2D (15) : 剪辑
摘要: 绘制在 RenderTarget.PushAxisAlignedClip() 与 RenderTarget.PopAxisAlignedClip() 之间的内容将被指定的矩形剪辑。uses Direct2D, D2D1;procedure TForm1.FormPaint(Sender: TObject);var cvs: TDirect2DCanvas; R,RClip: TRect;begin cvs := TDirect2DCanvas.Create(Canvas, ClientRect); R := ClientRect; InflateRect(R, -ClientWidth div阅读全文
posted @ 2011-04-03 10:19 万一 阅读(1243) | 评论 (0) 编辑
Direct2D (14) : 画笔
摘要: 画笔类 TDirect2DPen 的 Brush 属性是 TDirect2DBrush,现在的单色画笔其实是调用的实心画刷。因为画刷的强大,所以让画笔丰富起来不是难事。TDirect2DPen 的 StrokeStyle 属性是 ID2D1StrokeStyle 类型,它决定着线帽、拐角样式等;但遗憾的是该属性是只读的,基本无用。但 TDirect2DPen 的 Style 属性还是巧妙实现了 psSolid, psDash, psDot, psDashDot, psDashDotDot。测试代码:uses Direct2D, D2D1;procedure TForm1.FormPaint(S阅读全文
posted @ 2011-04-02 21:54 万一 阅读(1403) | 评论 (0) 编辑
Direct2D (13) : 画刷之 ID2D1BitmapBrush
摘要: {相关结构}TD2D1BitmapBrushProperties = record extendModeX: D2D1_EXTEND_MODE; //三个可选值分别是:0(延伸)、1(换行)、2(镜像) extendModeY: D2D1_EXTEND_MODE; //同上 interpolationMode: D2D1_BITMAP_INTERPOLATION_MODE; //拉伸图像时的差值算法:0(高速低质)、1(高质低速)end;测试代码:uses Direct2D, D2D1;procedure TForm1.FormPaint(Sender: TObject);var cvs: T阅读全文
posted @ 2011-04-02 17:16 万一 阅读(1308) | 评论 (2) 编辑
Direct2D (12) : 画刷之 ID2D1RadialGradientBrush
摘要: uses Direct2D, D2D1;procedure TForm1.FormPaint(Sender: TObject);var cvs: TDirect2DCanvas; iBrush: ID2D1RadialGradientBrush; R: TRect; rRGBP: TD2D1RadialGradientBrushProperties; //结构包含:中心点、偏移点、横向半径、纵向半径 arrGradientStop: array[0..1] of TD2D1GradientStop; iGradientStops: ID2D1GradientStopCollection;beg阅读全文
posted @ 2011-04-02 16:17 万一 阅读(866) | 评论 (0) 编辑
Direct2D (11) : 画刷之 ID2D1LinearGradientBrush
摘要: TDirect2DCanvas.Brush 的类型是 TDirect2DBrush,它和 GDI 的 TBrush 的区别主要有两点:1、只保留了 TBrush.Style 中的 bsSolid、bsClear 选项,弃用了:bsHorizontal、bsVertical、bsFDiagonal、bsBDiagonal、bsCross、bsDiagCross。2、其 Handle 属性是 Direct2D 中的 ID2D1Brush。Direct2D 提供有四种画刷:ID2D1SolidColorBrush //纯色画刷;TDirect2DBrush 默认使用了它ID2D1LinearGrad阅读全文
posted @ 2011-04-02 15:01 万一 阅读(1543) | 评论 (0) 编辑
Direct2D (10) : 文本输出初步
摘要: uses Direct2D, TypInfo;procedure TForm1.FormCreate(Sender: TObject);var f: TTextFormats;begin for f := Low(TTextFormats) to High(TTextFormats) do CheckListBox1.Items.Add(GetEnumName(TypeInfo(TTextFormats), Ord(f))); CheckListBox1.Align := alRight; Edit1.Align := alBottom; Edit1.OnChange := CheckList阅读全文
posted @ 2011-04-01 20:57 万一 阅读(1187) | 评论 (0) 编辑
Direct2D (9) : 显示图像
摘要: uses Direct2D;procedure TForm1.FormPaint(Sender: TObject);var cvs: TDirect2DCanvas; wic: TWICImage; R: TRect;begin wic := TWICImage.Create; wic.LoadFromFile('C:\Temp\Test.png'); cvs := TDirect2DCanvas.Create(Canvas, ClientRect); cvs.BeginDraw; cvs.Draw(10, 10, wic); R := Bounds(wic.Width div阅读全文
posted @ 2011-04-01 15:48 万一 阅读(2961) | 评论 (6) 编辑
Direct2D (8) : 透明色
摘要: uses Direct2D, D2D1;procedure TForm1.FormPaint(Sender: TObject);var cvs: TDirect2DCanvas; R: TRect;begin cvs := TDirect2DCanvas.Create(Canvas, ClientRect); cvs.BeginDraw; cvs.Pen.Color := Color; cvs.Brush.Color := clGreen; R := Rect(30, 30, 200, 150); cvs.Ellipse(R); cvs.Brush.Handle.SetOpacity(0.75阅读全文
posted @ 2011-04-01 13:10 万一 阅读(1584) | 评论 (0) 编辑
Direct2D (7) : 空间变换
摘要: {相关方法} TDirect2DCanvas.RenderTarget.SetTransform();TDirect2DCanvas.RenderTarget.GetTransform();{相关结构}TD2DMatrix3x2F (或D2D_MATRIX_3X2_F) //因第三列的值在这里是固定的(0,0,1),所以这里用的是 3*2 的矩阵;该结构重载了 * 运算符{TD2DMatrix3x2FHelper 为 TD2DMatrix3x2F 提供的方法(多为 class 方法)}Identity(); //初始化 TD2DMatrix3x2F,默认值:_11、_22 为 1.0,其它是 阅读全文
posted @ 2011-04-01 12:32 万一 阅读(1538) | 评论 (2) 编辑
Direct2D (6) : 绘制质量(设置抗锯齿模式)
摘要: {相关方法}TDirect2DCanvas.RenderTarget.SetAntialiasMode();TDirect2DCanvas.RenderTarget.GetAntialiasMode;{相关常量}D2D1_ANTIALIAS_MODE_PER_PRIMITIVE = 0;D2D1_ANTIALIAS_MODE_ALIASED = 1;测试代码:uses Direct2D, D2D1;procedure TForm1.FormCreate(Sender: TObject);begin CheckBox1.Caption := 'D2D1_ANTIALIAS_MODE_PE阅读全文
posted @ 2011-04-01 00:02 万一 阅读(3206) | 评论 (10) 编辑
Direct2D (5) : 绘制自定义图形
摘要: 下面是通过自定义函数绘制菱形的测试代码。uses Direct2D, D2D1;{自定义的绘制菱形的函数}function GetDiamondPath(ptLeft, ptTop: TD2DPoint2f): ID2D1PathGeometry; //返回路径接口var sink: ID2D1GeometrySink; //给路径添加图形的接口 ptRight,ptBottom: TD2DPoint2f;begin {算出另外两个点} ptRight := D2D1PointF((ptTop.x-ptLeft.x)*2+ptLeft.x, ptLeft.y); ptBottom := D2D阅读全文
posted @ 2011-03-31 21:09 万一 阅读(1449) | 评论 (0) 编辑
Direct2D (4) : DrawGeometry() 与 FillGeometry()
摘要: 原始的 Direct2D 只提供了几种简单图形(直线、矩形、圆角矩形、椭圆)的绘制与填充,更多集合图形或路径的描绘要使用 DrawGeometry() 和 FillGeometry()。既然能绘制更复杂的图形,当然也能绘制基本图形,先试下使用 DrawGeometry()、FillGeometry() 实现矩形、圆角矩形和椭圆。方法的参数是 ID2D1Geometry 接口,ID2D1RectangleGeometry、ID2D1RoundedRectangleGeometry、ID2D1EllipseGeometry 都是它的子接口。ID2D1Factory 提供了实现这三个接口的方法,从 阅读全文
posted @ 2011-03-31 17:42 万一 阅读(2089) | 评论 (0) 编辑
Direct2D (3) : 使用浮点参数绘制基本图形
摘要: {相关方法}TDirect2DCanvas.DrawEllipse();TDirect2DCanvas.DrawLine();TDirect2DCanvas.DrawRectangle();TDirect2DCanvas.DrawRoundedRectangle();TDirect2DCanvas.FillEllipse();TDirect2DCanvas.FillRectangle();TDirect2DCanvas.FillRoundedRectangle();{相关结构}TD2DPoint2f (或 D2D_POINT_2F) //浮点点结构; 构建函数 D2D1PointF(); 可从阅读全文
posted @ 2011-03-31 14:01 万一 阅读(1715) | 评论 (1) 编辑
Direct2D (2) : 基本图形命令测试
摘要: 代码:unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, ComCtrls, TypInfo, Direct2D;type TForm1 = class(TForm) ListBox1: TListBox; Panel1: TPanel; GroupBox1: TGroupBox; CheckBox1: TCheckBox; Edit1: TEdit; UpDown1: TUpDown; C阅读全文
posted @ 2011-03-30 23:42 万一 阅读(2342) | 评论 (1) 编辑
Direct2D (1) : 第一个例子
摘要: 应该是 Delphi 2009 就支持 Direct2D 了,但那时我还用着 WinXP 系统(不支持);现在的测试环境是 Win7+DelphiXE。Direct2D 属 DirectX 家族,是 GDI、GDI+ 的继任者,支持硬件加速,并能与 GDI、GDI+、D3D 交互。其它初步的印象是其文本处理和图像处理分别使用了 DirectWrite 和 WIC 技术,还有支持图层。相关单元是 Direct2D.pas 和 D2D1.pas。Direct2D.pas 中是 Delphi 对 Direct2D 的简单实现,需要其更多功能时还应从 D2D1.pas 中挖掘。Direct2D.pas阅读全文
posted @ 2011-03-30 11:59 万一 阅读(4067) | 评论 (2) 编辑