2014년 4월 21일 월요일

C# 이미지 회전


이미지 회전 샘플.

g.RotateTransform(angle) 만 써도 이미지 회전이 되지만, 구지 g.TranslateTransform((float)returnBitmap.Width / 2, (float)returnBitmap.Height / 2) 을 하는 것은 이미지의 중심을 기준으로 회전을 하기 위함이다.
근데, 소스가 뭔가 문제가 있는건지, 이미지가 조금 찌그러진다. 회사에서 할때는 괜찮았는데...

아... 그리고, 회전 각도는 어떤 각도든 가능하지만, 90, 180, 270도 가 아닌 경우는 이미지가 잘린다.
아무래도 이미지가 사각형이 기준이기 때문에...
아마도 비스듬하게 회전시 늘어나는 공간만큼 이미지를 키워 준다면 가능하지 않을까 싶다.
음... 이건 좀 해볼 필요가 있을지도...

private void btnRotateImage_Click(object sender, EventArgs e)
    {
        img = fnRotateImage(img, -90);
        pictureBox1.Invalidate();
    }

    private Bitmap fnRotateImage(Bitmap b, float angle)
    {
        Bitmap returnBitmap = new Bitmap(b.Height, b.Width);
        Graphics g = Graphics.FromImage(returnBitmap);
        g.TranslateTransform((float)returnBitmap.Width / 2, (float)returnBitmap.Height / 2);
        g.RotateTransform(angle);

        g.TranslateTransform(-(float)b.Width / 2, -(float)b.Height / 2);
        g.DrawImage(b, new Point(0, 0));

        return returnBitmap;
     }

[원본]

[회전]

-------------------------------------------------------------------------

이미지 왜곡 처리...
이미지 를 출력하는 사각형의 크기도 재조절 해줘야 했다...

private void btnRotateImage_Click(object sender, EventArgs e)
 {
     img = fnRotateImage(img, -90);
     imgRect = new System.Drawing.Rectangle(0, 0, img.Width, img.Height);
     pictureBox1.Invalidate();
 }