私はいくつかの検索を行いましたが、私がやりたいことをしている機能が見つかりません。
テキストを含むスキャンされたドキュメントの画像ファイルがありますが、ドキュメントがある程度回転しているため、テキストが互いにインラインになるように回転させたいと考えています。
完璧な世界では、これは自動的に機能するはずですが、何も見つけることができず、自動的に機能させるために理解していることは、画像を分析する必要があり、大きなことだと思います。
しかし、その後、ウェブサイト上の画像を手動で回転させるツールを作成しましたが、回転を画像ファイルに保存する機能が必要になりました。
これはいくつかの異なる方法のようですが、私がやりたいことをテストした人は誰もいません。
私が見つけた機能は、私が望むのとほぼ同じように機能します:
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 の私の画像で機能する解決策を見つけました。