TIFFピクセルのアスペクト比を正方形に変更します
-
23-08-2019 - |
質問
マルチページTIFFファイルでバーコード認識を実行しようとしています。しかし、TIFFファイルは、非2乗ピクセルのアスペクト比でTIFFを保存するFAXサーバー(私は制御できません)から私に届きます。これにより、アスペクト比のために画像がひどく押しつぶされています。 TIFFを正方形のピクセルアスペクト比に変換する必要がありますが、C#でそれを行う方法がわかりません。また、アスペクト比を変更すると画像が依然として読みやすくなるように、画像を伸ばす必要があります。
誰かがC#でこれをやったことがありますか?または、そのような手順を実行する画像ライブラリを使用した人はいますか?
解決
他の誰かが同じ問題に遭遇した場合、この迷惑な問題を修正することになった非常に簡単な方法を以下に示します。
using System.Drawing;
using System.Drawing.Imaging;
// The memoryStream contains multi-page TIFF with different
// variable pixel aspect ratios.
using (Image img = Image.FromStream(memoryStream)) {
Guid id = img.FrameDimensionsList[0];
FrameDimension dimension = new FrameDimension(id);
int totalFrame = img.GetFrameCount(dimension);
for (int i = 0; i < totalFrame; i++) {
img.SelectActiveFrame(dimension, i);
// Faxed documents will have an non-square pixel aspect ratio.
// If this is the case,adjust the height so that the
// resulting pixels are square.
int width = img.Width;
int height = img.Height;
if (img.VerticalResolution < img.HorizontalResolution) {
height = (int)(height * img.HorizontalResolution / img.VerticalResolution);
}
bitmaps.Add(new Bitmap(img, new Size(width, height)));
}
}
他のヒント
ああ、私は言及するのを忘れました。 Bitmap.SetResolution
アスペクト比の問題に役立つ場合があります。以下のものは、ちょうどサイズを変更しています。
チェックアウト このページ. 。サイズ変更のための2つのメカニズムについて説明します。あなたの場合、あなたはおそらくあなたが物事が素晴らしく、モノクロを望んでいるので、実際には悪い考えは悪い考えだと思います。
以下は、Naive Resize Algorithm(上記のリンクされたページからChristian Grausによって書かれた)のコピーです。
public static Bitmap Resize(Bitmap b, int nWidth, int nHeight)
{
Bitmap bTemp = (Bitmap)b.Clone();
b = new Bitmap(nWidth, nHeight, bTemp.PixelFormat);
double nXFactor = (double)bTemp.Width/(double)nWidth;
double nYFactor = (double)bTemp.Height/(double)nHeight;
for (int x = 0; x < b.Width; ++x)
for (int y = 0; y < b.Height; ++y)
b.SetPixel(x, y, bTemp.GetPixel((int)(Math.Floor(x * nXFactor)),
(int)(Math.Floor(y * nYFactor))));
return b;
}
別のメカニズムは、乱用することです GetThumbNailImage
のような機能 これ. 。そのコードはアスペクト比を維持しますが、それを行うコードを削除することは簡単です。
私はこれをいくつかの画像ライブラリ、フリーイメージ(オープンソース)とスノーバウンドで行いました。 (かなり高価)フリーイメージにはAC#ラッパーがあり、Snowboundは.NETアセンブリで利用できます。どちらもうまく機能します。
コードでそれらを変更することは不可能ではないはずですが、GDI+で2つの色のティフが厄介な場合があります。
免責事項:私はAtalasoftで働いています
私たちの .NETイメージングSDK これを行うことができます。私たちは書いた KBの記事 製品の使用方法を示すために、他のSDKに適応できます。基本的に、画像のリサイクルを行い、DPIを調整する必要があります。