【问题标题】:Rotating a RectangleShape without using Graphics在不使用图形的情况下旋转 RectangleShape
【发布时间】:2014-07-22 04:08:38
【问题描述】:

对于我在 vb.net 中制作的程序,我需要一个矩形,上面显示一个图像,在屏幕上旋转和移动。它需要快速响应,所以我使用标准的 RectangleShape。这里的问题是 vb.net 显然没有内置函数来旋转这个矩形。我真的不能使用与 FillRectangle 等效的相应 Graphics,因为它在我正在使用的计算机上非常滞后 - 因为它需要用于单独位图的恒定 DrawImage 函数。

那么,有没有办法让 Rectangle 可以:

  • 保留图片
  • 被旋转
  • 以非常不占用 CPU 的方式在舞台上移动

谢谢

【问题讨论】:

    标签: vb.net forms oop shapes


    【解决方案1】:
    Dim mxRotate As New Matrix()
    
    '75 being the arbitrary number I picked to rotate by
    mxRotate.Rotate(75, MatrixOrder.Append)
    
    e.Graphics.Transform = mxRotate
    e.Graphics.DrawRectangle(YourPen, YourRect)
    

    这可能会帮助您旋转图像:How to rotate JPEG using Graphics.RotateTransform without clipping

    至于性能。我想所有这些都将使用一点 CPU。或者,如果可以的话,您可以使用 DirectX 或 OpenGL 进行渲染。

    【讨论】:

    • 啊,这就是问题所在。这包括创建一个单独的位图来保存该图像,每次更改时都必须将其重新绘制到背景位图上,并刷新背景。不幸的是,由于处理此问题的计时器设置为以 25 毫秒的间隔触发,因此会在测试 PC 上造成大量延迟,使其无法播放。
    • 我明白了。但是,我可能不会基于计时器来执行此操作,而是基于事件,例如 OnMouseDown 如果 M1 单击的位置距离角
    • 不幸的是,由于它是根据键盘输入移动的,所以它必须是。
    • 真的不应该链接到这样的代码,但是这个家伙的代码示例运行得非常顺利,虽然它在 C# 中,但它不会做任何会导致 CPU 瘫痪的事情:codeproject.com/Articles/3319/Image-Rotation-in-NET跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-03
    相关资源
    最近更新 更多