Pregunta

Estoy intentando convertir un archivo tiff en color de varias páginas a un tiff c# CompressionCCITT3 en C#.Me doy cuenta de que necesito asegurarme de que todos los píxeles sean de 1 bit.No he encontrado un ejemplo útil de esto en línea.

¿Fue útil?

Solución

Verificar: http://bobpowell.net/onebit.htm

Necesita esta conversión ya que CCITT3 y CCITT4 no admiten color (si no recuerdo mal).

Otros consejos

Descargo de responsabilidad sobre proxenetismo:trabajo para Atalasoft, una empresa que fabrica software de imágenes .NET.

Usando puntoImagen, esta tarea se convierte en algo como esto:

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

El ejemplo de Bob Powell es bueno, hasta donde llega, pero tiene una serie de problemas, uno de los cuales es que utiliza un umbral simple, lo cual es fantástico si quieres velocidad y no te importa cuál sea tu resultado. parece que su dominio de entrada es tal que ya es prácticamente blanco y negro, solo representado en color.La binarización es un problema complicado.Cuando su tarea es reducir la información disponible en 1/24, cómo conservar la información correcta y desechar el resto es un desafío.DotImage tiene seis herramientas diferentes (IIRC) para la binarización.SimpleThreshold está al final del barril, desde mi punto de vista.

Sugiero experimentar primero con los resultados deseados utilizando las utilidades tiff e imágenes antes de sumergirse en la codificación.encontré VIPS ser una herramienta útil.La siguiente opción es investigar qué puede hacer LibTIFF.He tenido buenos resultados con el gratuito. LibTiff.NET usando c# (ver también desbordamiento de pila).Me decepcionó mucho la funcionalidad tiff de GDI, aunque su kilometraje puede variar (necesito la escala de grises de 16 bits que falta).También puedes usar el LibTiff servicios públicos (es decir,ver http://www.libtiff.org/man/tiffcp.1.html)

Vi el código anterior y parecía que estaba convirtiendo cada píxel con lógica manual.

Que este trabajo para usted?

Importaciones Sistema.Dibujo.Imágenes

'obtiene el archivo tif de color

Atenuar bmpColorTIF como nuevo mapa de bits ("C:\color.tif")

'selecciona un área del tif (tomará todos los fotogramas)

Atenuar rectColorTIF como nuevo rectángulo (0, 0, bmpColorTIF.Width, bmpColorTIF.Height)

'clona el rectángulo como color tif de 1 bit

Dim bmpBlackWhiteTIF como mapa de bits = bmpColorTIF.Clone(rectColorTIF, PixelFormat.Format1bppIndexed)

'haz lo que quieras con el nuevo mapa de bits (guardar, etc.)

...

Nota:Hay un montón de formatos de píxeles para elegir.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top