문제

Multipage TIFF 파일에서 바코드 인식을 수행하려고합니다. 그러나 TIFF 파일은 팩스 서버 (제어 할 수없는)에서 나에게 제공되어 TIFF를 비소 픽셀 종횡비로 절약 할 수 있습니다. 이로 인해 종횡비로 인해 이미지가 심하게 찌그러지게됩니다. 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 종횡비 문제에 도움이 될 수 있습니다. 아래의 것들은 크기 조정에 관한 것입니다.

체크 아웃 이 페이지. 크기 조정을위한 두 가지 메커니즘에 대해 설명합니다. 나는 당신의 경우에 bilinear 필터링이 실제로 나쁜 생각이라고 생각합니다. 아마 당신은 아마도 좋은 것과 단색을 원하기 때문입니다.

아래는 순진한 크기즈 알고리즘 (위의 링크 된 페이지에서 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 기능 이것. 이 코드는 종횡비를 유지하지만 간단 해야하는 코드를 제거합니다.

나는 두 개의 이미지 라이브러리, FreeImage (오픈 소스) 및 눈 바운드 로이 작업을 수행했습니다. (상당히 비싸다) FreeImage에는 AC# 래퍼가 있으며 .NET 어셈블리에서는 눈 바운드가 제공됩니다. 둘 다 잘 작동합니다.

코드에서 크기를 조정하는 것은 불가능하지는 않지만 2 개의 컬러 티프는 때때로 GDI+로 어색합니다.

면책 조항 : 나는 Atalasoft에서 일합니다

우리의 .NET 이미징 SDK 이것을 할 수 있습니다. 우리는 글을 썼습니다 KB 기사 제품을 사용하는 방법을 보여주기 위해 다른 SDK에 적응할 수 있습니다. 기본적으로 이미지를 다시 샘플링하고 DPI를 조정해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top