压缩TIF文件

时间:2008-09-04 18:55:37

标签: c# tiff

我正在尝试将多页颜色tiff文件转换为C#中的c#CompressionCCITT3 tiff。我意识到我需要确保所有像素都是1位。我没有在网上找到这个有用的例子。

4 个答案:

答案 0 :(得分:1)

退房:http://bobpowell.net/onebit.htm

你需要这个转换,因为CCITT3和CCITT4不支持颜色(如果我没记错的话)。

答案 1 :(得分:1)

Pimping免责声明:我为Atalasoft工作,这是一家制作.NET成像软件的公司。

使用dotImage,此任务变为:

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

鲍勃鲍威尔的例子很好,就目前而言,但它有很多问题,其中最重要的是它使用的是一个简单的阈值,如果你想要速度并且实际上并不在意,那就太棒了您的输出看起来是什么样的,或者您的输入域实际上已经非常黑白 - 只是用颜色表示。二值化是一个棘手的问题。当您的任务是将可用信息减少1/24时,如何保留正确的信息并丢弃其余信息是一项挑战。 DotImage有六种不同的工具(IIRC)用于二值化。从我的角度来看,SimpleThreshold是桶的底部。

答案 2 :(得分:1)

我建议在深入编码之前首先使用tiff和图像实用程序来试验所需的结果。我发现VIPS是一个方便的工具。下一个选择是研究LibTIFF可以做什么。使用c#免费LibTiff.NET我得到了很好的结果(另见stackoverflow)。我对GDI tiff功能感到非常失望,虽然你的milage可能会有所不同(我需要缺少16位灰度)。 您也可以使用LibTiff实用程序(例如,请参阅http://www.libtiff.org/man/tiffcp.1.html

答案 3 :(得分:0)

我看到了上面的代码,看起来它是用手动逻辑转换每个像素。

这对你有用吗?

导入System.Drawing.Imaging

'获取颜色tif文件

Dim bmpColorTIF As New Bitmap(“C:\ color.tif”)

'选择tif的一个区域(将抓取所有帧)

Dim rectColorTIF As New Rectangle(0,0,bmpColorTIF.Width,bmpColorTIF.Height)

'将矩形克隆为1位颜色tif

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

'使用新位图(保存等)执行您想要的操作

...

注意:有大量像素格式可供选择。