随笔分类 -  Direct2D

上一页 1 2 3 下一页
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 万一 阅读(1466) 评论(0) 推荐(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 万一 阅读(2055) 评论(0) 推荐(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 万一 阅读(1613) 评论(2) 推荐(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 万一 阅读(1606) 评论(0) 推荐(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 万一 阅读(1825) 评论(0) 推荐(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 万一 阅读(2400) 评论(0) 推荐(0) 编辑
Direct2D (16) : 蒙版之 FillOpacityMask() 方法
摘要:实现蒙版效果有三种途径:使用 FillOpacityMask()、使用 FillGeometry() 方法、使用图层。FillOpacityMask() 用于处理图像蒙版。期间用到 ID2D1Bitmap,因为对图像格式要求较高,我通过 TDirect2DCanvas.CreateBitmap() 建立 ID2D1Bitmap 时没有成功。后来使用了自定义函数直接使用 WIC 加载并转换格式。蒙版图片是透明图片,将会透过其着色区域看到下层的图片;蒙版图片是以画刷的方式使用的。实现蒙版区域计算时,还应设置 AntialiasMode 模式为 D2D1_ANTIALIAS_MODE_ALIASED 阅读全文
posted @ 2011-04-05 09:37 万一 阅读(3634) 评论(0) 推荐(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 万一 阅读(2215) 评论(0) 推荐(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 万一 阅读(2205) 评论(0) 推荐(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 万一 阅读(2316) 评论(2) 推荐(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 万一 阅读(1346) 评论(0) 推荐(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 万一 阅读(2306) 评论(0) 推荐(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 万一 阅读(2041) 评论(0) 推荐(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 万一 阅读(4350) 评论(6) 推荐(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 万一 阅读(2580) 评论(0) 推荐(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 万一 阅读(2645) 评论(2) 推荐(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 万一 阅读(5265) 评论(10) 推荐(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 万一 阅读(2316) 评论(0) 推荐(0) 编辑
Direct2D (4) : DrawGeometry() 与 FillGeometry()
摘要:原始的 Direct2D 只提供了几种简单图形(直线、矩形、圆角矩形、椭圆)的绘制与填充,更多集合图形或路径的描绘要使用 DrawGeometry() 和 FillGeometry()。既然能绘制更复杂的图形,当然也能绘制基本图形,先试下使用 DrawGeometry()、FillGeometry() 实现矩形、圆角矩形和椭圆。方法的参数是 ID2D1Geometry 接口,ID2D1RectangleGeometry、ID2D1RoundedRectangleGeometry、ID2D1EllipseGeometry 都是它的子接口。ID2D1Factory 提供了实现这三个接口的方法,从 阅读全文
posted @ 2011-03-31 17:42 万一 阅读(3319) 评论(0) 推荐(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 万一 阅读(2765) 评论(1) 推荐(0) 编辑

上一页 1 2 3 下一页