2012-12-02 7 views
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);

모든 것은 시작에 괜찮지 만, 더 많은 시간이 더 투명 이미지를하게 전달합니다. 잠시 후 거의 보이지 않습니다. 나는이 방법을 몇몇 포럼에서 발견했다. 나는 그것을 직접 쓰지 않았다. 이견있는 사람 ?

답변

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; 
} 
관련 문제