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
万一
阅读(1485)
推荐(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
万一
阅读(2084)
推荐(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
万一
阅读(1624)
推荐(0) 编辑
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
万一
阅读(1631)
推荐(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
万一
阅读(1839)
推荐(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
万一
阅读(2426)
推荐(0) 编辑
Direct2D (16) : 蒙版之 FillOpacityMask() 方法
摘要:实现蒙版效果有三种途径:使用 FillOpacityMask()、使用 FillGeometry() 方法、使用图层。FillOpacityMask() 用于处理图像蒙版。期间用到 ID2D1Bitmap,因为对图像格式要求较高,我通过 TDirect2DCanvas.CreateBitmap() 建立 ID2D1Bitmap 时没有成功。后来使用了自定义函数直接使用 WIC 加载并转换格式。蒙版图片是透明图片,将会透过其着色区域看到下层的图片;蒙版图片是以画刷的方式使用的。实现蒙版区域计算时,还应设置 AntialiasMode 模式为 D2D1_ANTIALIAS_MODE_ALIASED
阅读全文
posted @
2011-04-05 09:37
万一
阅读(3697)
推荐(1) 编辑
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
万一
阅读(2241)
推荐(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
万一
阅读(2229)
推荐(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
万一
阅读(2341)
推荐(0) 编辑
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
万一
阅读(1362)
推荐(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
万一
阅读(2340)
推荐(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
万一
阅读(2064)
推荐(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
万一
阅读(4395)
推荐(0) 编辑
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
万一
阅读(2617)
推荐(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
万一
阅读(2676)
推荐(0) 编辑
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
万一
阅读(5345)
推荐(0) 编辑
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
万一
阅读(2337)
推荐(0) 编辑
Direct2D (4) : DrawGeometry() 与 FillGeometry()
摘要:原始的 Direct2D 只提供了几种简单图形(直线、矩形、圆角矩形、椭圆)的绘制与填充,更多集合图形或路径的描绘要使用 DrawGeometry() 和 FillGeometry()。既然能绘制更复杂的图形,当然也能绘制基本图形,先试下使用 DrawGeometry()、FillGeometry() 实现矩形、圆角矩形和椭圆。方法的参数是 ID2D1Geometry 接口,ID2D1RectangleGeometry、ID2D1RoundedRectangleGeometry、ID2D1EllipseGeometry 都是它的子接口。ID2D1Factory 提供了实现这三个接口的方法,从
阅读全文
posted @
2011-03-31 17:42
万一
阅读(3393)
推荐(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
万一
阅读(2807)
推荐(0) 编辑