将旋转应用于Graphics对象

时间:2015-06-08 17:11:24

标签: graphics

我很少有使用图形对象编程的经验。我目前的任务是导出带有编辑注释的文档(.tiff图像)。编辑的注释只是一个黑色矩形对象。我可以通过.XMP数据获取x坐标,y坐标,宽度和高度属性。还有一个叫做旋转的房产。这是我被卡住的地方,应用轮换。

因此,想象一下带有编辑的文档会使第一段变黑。然后,使用编辑器中的工具,用户旋转文档,使其现在放在它的一侧。客户端能够正确呈现编校,因为我们使用Atalasoft控件来获取和显示注释。现在我们有了一个Web服务,它将使用redactions检索该图像。由于许可问题,我们无法在此服务中使用Atalasoft控件,因此我们只是从.tiff图像中提取.XMP数据并手动绘制redaction。问题是,如果用户在文档上已有编辑时旋转文档,我很难使编辑正确旋转(由于我对图形编程缺乏了解)。如果我不应用任何旋转,则会在文档旋转之前显示编辑,从而编辑文档的错误区域。

以下是我的尝试:

Dim rectangle As New Rectangle(xCoordinate, yCoordinate, width, height)
graphics.RotateTransform(rotation)
graphics.FillRectangle(Brushes.Black, rectangle)

当我这样做时,最终文档中根本没有显示编辑。我已经读过在应用轮换之前我可能需要调用以下内容:

graphics.TranslateTransform(x,y) 

但是我不知道我应该以x和y传递什么。看起来我只需要从矩形的左上角开始应用旋转,但我还没有找到一种方法来正确地执行此操作。

非常感谢您的帮助或推动正确的方向!

编辑1:

我也试过这个(取自How can I rotate an RectangleF at a specific degree using Graphics object?)。

Dim rectangle As New Rectangle(xCoordinate, yCoordinate, width, height)

Using rotationMatrix As New Matrix

    rotationMatrix.RotateAt(rotation, New PointF(rectangle.Left + (rectangle.Width / 2), rectangle.Top + (rectangle.Height / 2)))
    graphics.Transform = rotationMatrix
    graphics.FillRectangle(Brushes.Black, rectangle)
    graphics.ResetTransform()

End Using

这会旋转矩形,但最终会出现在错误的位置,因此它不会编辑文档的正确部分。再一次,当我在没有任何旋转变换的情况下显示文档时,看起来简单地需要使用左上角作为轴来旋转,但是我不太确定如何实现这一点。

1 个答案:

答案 0 :(得分:0)

想出来。以下是我使用左上角作为轴旋转矩形的方法:

Dim rectangle As New Rectangle(xCoordinate, yCoordinate, width, height)

Using rotationMatrix As New Matrix

    rotationMatrix.RotateAt(rotation, New PointF(rectangle.Left, rectangle.Top))
    graphics.Transform = rotationMatrix
    graphics.FillRectangle(Brushes.Black, rectangle)
    graphics.ResetTransform()

End Using