문제

다중 페이지 색상 tiff 파일을 C#의 C# CompressionCCITT3 tiff로 변환하려고 합니다.모든 픽셀이 1비트인지 확인해야 한다는 것을 깨달았습니다.나는 이것에 대한 유용한 예를 온라인에서 찾지 못했습니다.

도움이 되었습니까?

해결책

확인해 보세요: http://bobpowell.net/onebit.htm

CCITT3 및 CCITT4는 색상을 지원하지 않으므로 이 변환이 필요합니다(제 기억이 맞다면).

다른 팁

포주 면책조항:나는 일한다 아탈라소프트, .NET 이미징 소프트웨어를 만드는 회사입니다.

사용 도트 이미지, 이 작업은 다음과 같습니다.

FileSystemImageSource source = new FileSystemImageSource("path-to-your-file.tif", true); // true = loop over all frames
// tiff encoder will auto-select an appropriate compression - CCITT4 for 1 bit.
TiffEncoder encoder = new TiffEncoder();
encoder.Append = true;

// DynamicThresholdCommand is very good for documents.  For pictures, use DitherCommand
DynamicThresholdCommand threshold = new DynamicThresholdCommand();

using (FileStream outstm = new FileStream("path-to-output.tif", FileMode.Create)) {
    while (source.HasMoreImages()) {
        AtalaImage image = source.AcquireNext();
        AtalaImage finalImage = image;
        // convert when needed.
        if (image.PixelFormat != PixelFormat.Pixel1bppIndexed) {
            finalImage = threshold.Apply().Image;
        }
        encoder.Save(outstm, finalImage, null);
        if (finalImage != image) {
            finalImage.Dispose();
        }
        source.Release(image);
    }
}

Bob Powell 예제는 훌륭하지만 여러 가지 문제가 있습니다. 그 중 가장 중요한 것은 간단한 임계값을 사용하고 있다는 점입니다. 이는 속도를 원하고 실제로 출력이 무엇인지 신경 쓰지 않는 경우에 좋습니다. 또는 입력 도메인이 이미 거의 흑백으로 표시되어 있을 뿐이고 색상으로만 표현되어 있습니다.이진화는 까다로운 문제입니다.사용 가능한 정보를 1/24로 줄이는 것이 임무라면 올바른 정보를 유지하고 나머지는 버리는 방법이 어렵습니다.DotImage에는 이진화를 위한 6가지 도구(IIRC)가 있습니다.내 관점에서 보면 SimpleThreshold는 배럴의 맨 아래에 있습니다.

코딩을 시작하기 전에 먼저 tiff 및 이미지 유틸리티를 사용하여 원하는 결과를 실험해 보는 것이 좋습니다.나는 찾았다 VIPS 편리한 도구가 될 것입니다.다음 옵션은 LibTIFF가 무엇을 할 수 있는지 조사하는 것입니다.무료로 좋은 결과를 얻었습니다 LibTiff.NET C# 사용(참조: 스택 오버플로).비록 귀하의 마일리지가 다를 수 있지만 저는 GDI tiff 기능에 매우 실망했습니다(누락된 16비트 회색조가 필요함).또한 다음을 사용할 수 있습니다. LibTiff 유틸리티(예:보다 http://www.libtiff.org/man/tiffcp.1.html)

위의 코드를 보니 수동 로직으로 모든 픽셀을 변환하는 것처럼 보였습니다.

이것이 당신에게 효과가 있을까요?

시스템.드로잉.이미징 가져오기

'컬러 TIF 파일을 가져옵니다

새로운 비트맵으로 bmpColorTIF를 흐리게("C:\color.tif")

'tif의 영역을 선택합니다(모든 프레임을 가져옵니다).

Dim retColorTIF를 새로운 직사각형으로(0, 0, bmpColorTIF.Width, bmpColorTIF.Height )

'사각형을 1비트 컬러 tif로 복제합니다.

Dim bmpBlackWhiteTIF As Bitmap = bmpColorTIF.Clone(ectColorTIF, PixelFormat.Format1bppIndexed)

'새 비트맵으로 원하는 작업을 수행하세요(저장 등).

...

메모:선택할 수 있는 픽셀 형식이 엄청나게 많습니다.

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