翻转绘制的图像

本文关键字:图像 绘制 翻转 | 更新日期: 2023-09-27 17:59:37

我正在做一个小C#项目,它需要我将已经绘制的图像移动到表单中。以下是绘制算法:

public void DrawImagePoint(PaintEventArgs e)
{
    // Create image.
    newImage = A_Worm_Nightmare.Properties.Resources.Worm;
    // Create Point for upper-left corner of image.
    Point ulCorner = new Point(50, 50);
    // Draw image to screen.
    e.Graphics.DrawImage(newImage, ulCorner);
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
    DrawImagePoint(e);
}

问题:由于无法在计时器中实现此方法,如何在WinForms中翻转已绘制的对象?(timer_Tick不支持PaintEventArgs)由Cursor.Position.X进行翻转。以下是普通"图片盒"的算法:

private void timer1_Tick(object sender, EventArgs e)
{
    bool Ok = true;
    if (Cursor.Position.X <= 135 && Ok)
    {
        image.RotateFlip(RotateFlipType.RotateNoneFlipY);
        Ok = false;
    }
    else if (Cursor.Position.X >= 135 && !Ok)
    {
        Ok = true;
    }
}

提前感谢

翻转绘制的图像

我明白你想做什么了。您必须致电

this.Refresh();

计时器事件。这将触发绘制事件。

您肯定需要一个计时器。只需更改Timer‘s Tick中的位置并调用Invalidate,它就会使您的表单重新绘制。

private Point location = Point.Empty;
private Image newImage;
private void OnTimerTick(object sender, EventArgs e)
{
    location.Offset(1,1);
    //Do flipping here
    newImage.RotateFlip(RotateFlipType.RotateNoneFlipY);
    this.Invalidate();//Makes form to repaint
}
public void DrawImagePoint(PaintEventArgs e)
{
    if(newImage == null)
    {
        newImage = A_Worm_Nightmare.Properties.Resources.Worm;    
    }
    e.Graphics.DrawImage(newImage, location);
}

你可以设置一个任何频率的定时器,这应该是可行的。

还要注意,每次查询Resources.Image时,它都会创建新的Image。因此,您应该将图像缓存在某个位置,以避免这种开销。