0

我正在使用自定义方法来旋转图片框。这是代码:

public static Image RotateImage(Image img, float rotationAngle)
    {
        Bitmap bmp = new Bitmap(img.Width, img.Height);
        Graphics gfx = Graphics.FromImage(bmp);
        gfx.TranslateTransform((float)bmp.Width / 2, (float)bmp.Height / 2);
        gfx.RotateTransform(rotationAngle);
        gfx.TranslateTransform(-(float)bmp.Width / 2, -(float)bmp.Height / 2);
        gfx.InterpolationMode = InterpolationMode.HighQualityBicubic;
        gfx.DrawImage(img, new Point(0, 0));
        gfx.Dispose();
        return bmp;
    }

这是电话:pictureBox1.Image = RotateImage(pictureBox1.Image, someInt);

一开始一切都很好,但是时间越长,图像就越透明。一段时间后,它几乎看不见了。我在某个论坛上找到了这个方法,我自己没有写过。有什么想法吗 ?

4

1 回答 1

1

由于需要使用插值来确定旋转图像中每个像素的颜色,任何图像变换都会在源图像和目标图像之间产生差异。在您的代码中,您每次都在图像上应用转换,这是从先前的转换得到的结果,有效地增加了插值的效果。你应该改变方法。您应该在某处引用原始图像,并始终使用它来绘制旋转图像。为此,您应该从一开始就使用角度调用您的方法,而不是相对于前一个图像。像这样的东西:

static int someInt = 5;
Bitmap bmp = new Bitmap(@"someImage.jpg");
private void button2_Click(object sender, EventArgs e)
{
      pictureBox1.Image = RotateImage(bmp, someInt);
      someInt = (someInt + 5) % 360;
}
于 2012-12-02T14:44:59.990 回答