Вопрос

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

Это было полезно?

Решение

Проверьте: http://bobpowell.net/onebit.htm

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

Другие советы

Отказ от ответственности за сутенерство:Я работаю на Atalasoft, компания, производящая программное обеспечение для обработки изображений .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);
    }
}

Пример Боба Пауэлла хорош, насколько это возможно, но у него есть ряд проблем, не последней из которых является то, что он использует простой порог, что потрясающе, если вам нужна скорость и на самом деле вас не волнует, как выглядит ваш вывод или каков ваш входной домен, который на самом деле уже в значительной степени черно-белый - просто представлен в цвете.Бинаризация - сложная проблема.Когда ваша задача состоит в том, чтобы сократить доступную информацию на 1/24, сохранить нужную информацию и выбросить остальную - непростая задача.dotImage имеет шесть различных инструментов (IIRC) для бинаризации.С моей точки зрения, SimpleThreshold - это дно барреля.

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

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

Сработает ли это для вас?

Импортирует систему.Чертеж.Визуализация

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

Затемнить bmpColorTIF как новое растровое изображение ("C:\color.tif")

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

Затемнить rectColorTIF как новый прямоугольник (0, 0, bmpColorTIF.Ширина, bmpColorTIF.Высота)

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

Затемнить bmpBlackWhiteTIF как растровое изображение = bmpColorTIF.Клонировать (rectColorTIF, PixelFormat.Формат1bppIndexed)

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

...

Примечание:существует множество форматов пикселей на выбор.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top