图像顺时针和anticlock明智使用翻译转换在C#中旋转 [英] Rotating image clockwise and anticlock wise using Translate Transform in c#

查看:181
本文介绍了图像顺时针和anticlock明智使用翻译转换在C#中旋转的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我用下面的code。通过一个角度拍摄的中心点为原点旋转图像。

I'm using the following code to rotate an image by an angle taking the center point as the origin.

private Bitmap rotateImage(Bitmap b, float angle)
{
       Bitmap returnBitmap = new Bitmap(b.Width, b.Height);
       Graphics g = Graphics.FromImage(returnBitmap);
       g.TranslateTransform((float)b.Width/2, (float)b.Height / 2);
       g.RotateTransform(angle);
       g.TranslateTransform(-(float)b.Width/2,-(float)b.Height / 2);
       g.DrawImage(b, new Point(0, 0));
       return returnBitmap;
} 

在出现问题时,我尝试旋转后的图像恢复到初始的角度performed.I打算通过角再次旋转图像要做到这一点(360 anglerotated),而这是不工作的边缘图像的像是被剪掉。 有没有更好的解决办法来旋转图像在C#。我只是想将图像旋转到一定角度,而不像差向两侧,然后旋转图像以迎角取消应用的旋转,所以previous形象恢复。

The Problem arises when i try to restore the image to its initial angle after a rotation is performed.I intend to do this by rotating the image again by angle of (360-anglerotated).But this is not working and the edges of the image seems to be cut. Is there a better solution to rotate image in c#.I just want to rotate the image to an angle without the abberation to the sides and then rotate the image at an counter angle to cancel the rotation applied,so the previous image is restored.

推荐答案

首先,作为评论已经说了,你需要创建一个更大的目标位图,以适应对旋转的位图。这将让你正确的新尺寸:

First of all, as has been said in the comments, you need to create a larger destination bitmap to accomodate for the rotated bitmap. This will get you the correct new size:

public Size SizeAfterRotation(Size sz, float angle)
{
    var m = new Matrix();
    m.Rotate(angle);
    var pts = new[]
                  {
                      new Point(sz.Width, sz.Height),
                      new Point(sz.Width, 0)
                  };
    m.TransformPoints(pts);
    return new Size(
        Math.Max(Math.Abs(pts[0].X), Math.Abs(pts[1].X)),
        Math.Max(Math.Abs(pts[0].Y), Math.Abs(pts[1].Y)));
}

那么,作为恢复(旋转后)的位图,我不会reccomand你尝试这样做。尽量保持原有的位图,而不是左右。这将是棘手的恢复它,如果你成功了,你将有丢失的图像质量呢。

Then, as for restoring (rotating back) the bitmap, I would not reccomand that you try to do that. Try to keep the original bitmap around instead. It will be tricky to restore it and if you succeed, you will have lost image quality anyway.

这篇关于图像顺时针和anticlock明智使用翻译转换在C#中旋转的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆