通过BitmapBrush将位图绘制到SlimDX Geometry(VB.NET)

时间:2014-01-12 22:15:56

标签: vb.net bitmapimage direct2d slimdx

我有一个程序,我试图使用SlimDX和VB.net将Direct2D中的图像渲染到四边形上。

程序从服务器获取4个点的数组,这是一个四边形,应该将图像渲染到其上。

要点(例如)是:

points(0) = 20,10 <--Top left, where the geometry starts from
points(1) = 40,10 <-- Top right
points(2) = 40,40 <-- Bottom right
points(3) = 20,40 <-- Bottom left

...在加载时构造了BitmapBrush,并且可以渲染Bitmap,但是当尝试渲染到四边形时,我只得到(看起来......)某些部分位于右下角。

供参考:这是我想要绘制的图像: http://i.imgur.com/Dt3iHQ3.png

这是我正在尝试使用的代码(用于绘制图像)。 R是点列表(见上文),RenderBrush是从该图像的20x30版本创建的BitmapBrush。

Private Sub DrawPoly(R() As PointF, ByRef RenderBrush As SlimDX.Direct2D.BitmapBrush)
    'Create the geometry
    Dim Path As PathGeometry
    Path = New PathGeometry(factoryD2D)
    Console.Clear()
    'Get a handle to the Geometry
    Dim Geometry = Path.Open()
    'Set UP Geometry
    Geometry.BeginFigure(R(0), FigureBegin.Filled)
    Geometry.AddLines(R)
    Geometry.EndFigure(FigureEnd.Closed)
    Geometry.Close()

    'Render
    D2DRenderTarget.FillGeometry(Path, RenderBrush)
    'and GC
    Geometry.Dispose()
    Path.Dispose()
End Sub

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我明白了。要使其绘制到几何体上,您需要设置如下的转换矩阵:

Matrix3x2.Multiply(Matrix3x2.Translation(Point_To_Move_To), Matrix3x2.Rotation(Rotation, Point_To_Rotate_Around))