Сжатие файла TIF - PullRequest
       6

Сжатие файла TIF

0 голосов
/ 04 сентября 2008

Я пытаюсь преобразовать многостраничный файл цветов в формат C # CompressionCCITT3 в формате C #. Я понимаю, что мне нужно убедиться, что все пиксели 1 бит. Я не нашел полезного примера этого онлайн.

Ответы [ 4 ]

1 голос
/ 27 января 2010

Я предлагаю поэкспериментировать с желаемыми результатами, сначала используя утилиты tiff и image, прежде чем погрузиться в кодирование. Я нашел VIPS удобным инструментом. Следующий вариант - посмотреть, что может делать LibTIFF. У меня были хорошие результаты с бесплатным LibTiff.NET с использованием c # (см. Также stackoverflow ). Я был очень разочарован функциональностью TIF GDI, хотя ваш пробег может варьироваться (мне нужна недостающая 16-битная шкала серого). Также вы можете использовать утилиты LibTiff (т.е. см. http://www.libtiff.org/man/tiffcp.1.html)

1 голос
/ 01 сентября 2009

Отказ от ответственности 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 - это нижняя часть ствола, с моей точки зрения.

1 голос
/ 05 сентября 2008

Выезд: http://bobpowell.net/onebit.htm

Вам нужно это преобразование, поскольку CCITT3 и CCITT4 не поддерживают цвет (если я правильно помню).

0 голосов
/ 01 сентября 2009

Я видел приведенный выше код, и казалось, что он конвертирует каждый пиксель с помощью ручной логики.

Будет ли это работать для вас?

Импортирует System.Drawing.Imaging

'получить файл цвета tif

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

'выберите область TIF (захватит все кадры)

Dim rectColorTIF как новый прямоугольник (0, 0, bmpColorTIF.Width, bmpColorTIF.Height)

'клонировать прямоугольник как 1-битный цвет tif

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

'делайте что хотите с новым растровым изображением (сохраняйте и т. Д.)

...

Примечание: на выбор предлагается тонна форматов пикселей.

...