Domanda

Sto cercando di convertire un file tiff a colori multipagina in un tiff C# CompressionCCITT3 in C#.Mi rendo conto che devo assicurarmi che tutti i pixel siano 1 bit.Non ho trovato un esempio utile di questo online.

È stato utile?

Soluzione

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

Hai bisogno di questa conversione poiché CCITT3 e CCITT4 non supportano il colore (se ricordo bene).

Altri suggerimenti

Dichiarazione di non responsabilità sullo sfruttamento della prostituzione:lavoro per Atalasoft, un'azienda che produce software di imaging .NET.

Utilizzando puntoImage, questa attività diventa qualcosa del genere:

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

L'esempio di Bob Powell è buono, per quanto va, ma presenta una serie di problemi, non ultimo il fatto che utilizza una soglia semplice, il che è fantastico se vuoi velocità e non ti interessa effettivamente quale sia il tuo output assomiglia o il tuo dominio di input è tale che in realtà è già praticamente in bianco e nero, semplicemente rappresentato a colori.La binarizzazione è un problema complicato.Quando il tuo compito è ridurre le informazioni disponibili di 1/24, come conservare le informazioni giuste e buttare via il resto è una sfida.DotImage ha sei diversi strumenti (IIRC) per la binarizzazione.SimpleThreshold è il fondo del barile, dal mio punto di vista.

Suggerisco di sperimentare prima i risultati desiderati utilizzando le utilità tiff e immagini prima di immergersi nella codifica.ho trovato VIP essere uno strumento utile.L'opzione successiva è esaminare cosa può fare LibTIFF.Ho avuto buoni risultati con il free LibTiff.NET utilizzando c# (vedi anche stackoverflow).Sono rimasto molto deluso dalla funzionalità tiff GDI, anche se il tuo chilometraggio può variare (ho bisogno della scala di grigi a 16 bit mancante).Inoltre è possibile utilizzare il file LibTiff utilità (es.Vedere http://www.libtiff.org/man/tiffcp.1.html)

Ho visto il codice sopra e sembrava che stesse convertendo ogni pixel con la logica manuale.

Funzionerebbe per te?

Importa System.Drawing.Imaging

prendi il file tif a colori

Dim bmpColorTIF come nuova bitmap("C:\color.tif")

'seleziona un'area del tif (prenderà tutti i fotogrammi)

Dim rectColorTIF Come nuovo rettangolo(0, 0, bmpColorTIF.Width, bmpColorTIF.Height )

'clona il rettangolo come tif a colori a 1 bit

Dim bmpBlackWhiteTIF come bitmap = bmpColorTIF.Clone(rectColorTIF, PixelFormat.Format1bppIndexed)

'fai quello che vuoi con la nuova bitmap (salva, ecc.)

...

Nota:ci sono un sacco di formati pixel tra cui scegliere.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top