我已经进行了一些搜索,但找不到任何功能可以做我想做的事情。
我有一个带有文本的扫描文档的图像文件,但该文档旋转了一些度数,所以我想旋转它,以便文本彼此内联。
在一个完美的世界中,它应该是一个自动执行此操作的功能,但我找不到任何东西,我知道要让它自动工作,它需要对图像进行一些分析,我认为这是一件大事。
但是后来我做了一个工具来手动旋转网站上的图像,但现在我需要一个函数来将旋转保存到图像文件中。
这似乎是一些不同的方法,但我没有测试过我想做的事情。
我发现几乎像我想要的那样工作的功能是:
public static Bitmap RotateImg(Bitmap bmp, float angle, Color bkColor) {
int w = bmp.Width;
int h = bmp.Height;
PixelFormat pf = default(PixelFormat);
if (bkColor == Color.Transparent)
{
pf = PixelFormat.Format32bppArgb;
}
else
{
pf = bmp.PixelFormat;
}
Bitmap tempImg = new Bitmap(w, h, pf);
Graphics g = Graphics.FromImage(tempImg);
g.Clear(bkColor);
g.DrawImageUnscaled(bmp, 1, 1);
g.Dispose();
GraphicsPath path = new GraphicsPath();
path.AddRectangle(new RectangleF(0f, 0f, w, h));
Matrix mtrx = new Matrix();
//Using System.Drawing.Drawing2D.Matrix class
mtrx.Rotate(angle);
RectangleF rct = path.GetBounds(mtrx);
Bitmap newImg = new Bitmap(Convert.ToInt32(rct.Width), Convert.ToInt32(rct.Height), pf);
g = Graphics.FromImage(newImg);
g.Clear(bkColor);
g.TranslateTransform(-rct.X, -rct.Y);
g.RotateTransform(angle);
g.InterpolationMode = InterpolationMode.HighQualityBilinear;
g.DrawImageUnscaled(tempImg, 0, 0);
g.Dispose();
tempImg.Dispose();
return newImg; }
但这不会改变图像文件的高度和宽度,因此图像文件的大小相同,但图像“对象”已被缩放和旋转。
知道我该怎么做吗?
答案 我在这里找到了适用于我的图像的解决方案,该解决方案的分辨率为300。