Вопрос
Я пытаюсь преобразовать многостраничный цветной 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)
"делайте с новым растровым изображением все, что хотите (сохраняйте и т.д.)
...
Примечание:существует множество форматов пикселей на выбор.