Question

J'essaie de convertir un fichier tiff couleur multipage en tiff c# CompressionCCITT3 en C#.Je me rends compte que je dois m'assurer que tous les pixels sont de 1 bit.Je n'ai pas trouvé d'exemple utile de cela en ligne.

Était-ce utile?

La solution

Vérifier: http://bobpowell.net/onebit.htm

Vous avez besoin de cette conversion car CCITT3 et CCITT4 ne prennent pas en charge la couleur (si je me souviens bien).

Autres conseils

Avis de non-responsabilité concernant le proxénétisme :je travaille pour Atalasoft, une entreprise qui fabrique des logiciels d'imagerie .NET.

En utilisant pointImage, cette tâche ressemble à ceci :

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'exemple de Bob Powell est bon, dans la mesure où il va, mais il présente un certain nombre de problèmes, dont le moindre n'est pas qu'il utilise un seuil simple, ce qui est formidable si vous voulez de la vitesse et ne vous souciez pas vraiment de votre sortie. ressemble ou votre domaine d'entrée est tel qu'il est déjà à peu près en noir et blanc - juste représenté en couleur.La binarisation est un problème délicat.Lorsque votre tâche consiste à réduire les informations disponibles de 1/24, comment conserver les bonnes informations et jeter le reste est un défi.DotImage dispose de six outils différents (IIRC) pour la binarisation.SimpleThreshold est le bas du baril, de mon point de vue.

Je suggère d'expérimenter les résultats souhaités en utilisant d'abord les utilitaires tiff et image avant de plonger dans le codage.j'ai trouvé VIP être un outil pratique.L’option suivante consiste à examiner ce que LibTIFF peut faire.J'ai eu de bons résultats avec le logiciel gratuit LibTiff.NET en utilisant c# (voir aussi débordement de pile).J'ai été très déçu par la fonctionnalité tiff GDI, bien que votre kilométrage puisse varier (j'ai besoin des niveaux de gris 16 bits manquants).Vous pouvez également utiliser le LibTiff utilitaires (c.-à-d.voir http://www.libtiff.org/man/tiffcp.1.html)

J'ai vu le code ci-dessus et il semblait qu'il convertissait chaque pixel avec une logique manuelle.

Est-ce que cela fonctionnerait pour vous ?

Importe System.Drawing.Imaging

'récupère le fichier tif couleur

Dim bmpColorTIF comme nouveau bitmap ("C:\color.tif")

'sélectionnez une zone du tif (récupérera toutes les images)

Dim rectColorTIF comme nouveau rectangle (0, 0, bmpColorTIF.Width, bmpColorTIF.Height )

'cloner le rectangle en couleur tif 1 bit

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

'faites ce que vous voulez avec le nouveau bitmap (enregistrer, etc.)

...

Note:il existe une tonne de formats de pixels parmi lesquels choisir.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top