2009-05-20 6 views
2

다중 페이지 티프 파일에서 바코드 인식을 수행하려고합니다. 그러나 tiff 파일은 비 정사각형 픽셀 종횡비로 tiff를 저장하는 팩스 서버 (제어 권한이없는)로부터 나에게옵니다. 이로 인해 종횡비로 인해 이미지가 심하게 부숴졌습니다. tiff를 정사각형 픽셀 종횡비로 변환해야하지만 C#에서이를 수행하는 방법을 모릅니다. 가로 세로 비율을 변경해도 여전히 이미지를 읽을 수 있도록 이미지를 늘려야합니다.티파니 픽셀 종횡비를 스퀘어로 변경

누구나 C#에서이 작업을 수행 했습니까? 아니면 그러한 절차를 수행 할 이미지 라이브러리를 사용한 사람이 있습니까?

답변

6

다른 사람이 같은 문제에 부딪히는 경우, 여기 내가이 성가신 문제를 고치려고하는 아주 간단한 방법입니다.

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))); 
    } 
} 
+0

당신은 내 영웅입니다! –

+0

누구든지이 코드의 자바 버전을 가지고 있습니까? – gtiwari333

0

오, 언급하는 것을 잊었습니다. Bitmap.SetResolution은 종횡비 문제를 해결하는 데 도움이 될 수 있습니다. 아래 내용은 크기 조정에 관한 것입니다.

체크 아웃 This page. 크기 조정을위한 두 가지 메커니즘에 대해 설명합니다. 나는 아마도 당신이 일을 좋고 단색으로 원하기 때문에 이중선 필터링은 실제로 나쁜 생각이라고 생각합니다.

아래의 그림은 Christian Greus가 작성한 순진 크기 조정 알고리즘의 복사본입니다.이 알고리즘은 원하는 링크 여야합니다.

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; 
} 

대안기구 thisGetThumbNailImage 같은 기능을 악용한다. 이 코드는 종횡비를 유지하지만 코드를 제거하는 것은 간단해야합니다.

0

저는 FreeImage (오픈 소스)와 Snowbound 이미지 라이브러리를 사용하여이 작업을 수행했습니다. (꽤 비쌉니다) FreeImage에는 C# 래퍼가 있고 Snowbound는 .Net 어셈블리에서 사용할 수 있습니다. 둘 다 잘 작동합니다.

코드에서 크기를 조정하는 것이 불가능하지 않아야하지만 2 색 tiff가 GDI +에서 때로는 어색합니다.

0

면책 조항 : 나는 Atalasoft

에서 일을 우리 .NET imaging SDK이 작업을 수행 할 수 있습니다. Google 제품 사용 방법을 보여주기 위해 a KB article으로 작성했지만 다른 SDK에도 적용 할 수 있습니다. 기본적으로 이미지를 다시 샘플링하고 DPI를 조정해야합니다.

관련 문제