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 に答える