domingo, agosto 10, 2008

Separar un multitiff en varios archivos, o lo que hace el cansansio!

Ayer invertí más de 4 horas en resolver un problema y al final no pude, trataba de separar un archivo multitiff en varios archivos tiff utilizando C#, me mandaba un error Genérico GDI+, muy explicativo no?. Llevo varios días trabajando hasta muy tarde, así que el cansancio era evidente, mi cerebro comenzaba a perder concentración fácilmente. Decidí irme a descansar y retomar el asunto hasta que me sintiera relajado, así que volví a comenzar, el trabajo de 4 horas (sin solución) se arregló en tan solo 20 minutos. El problema era generado por un archivo duplicado, ese era todo el problema, mi código funcionaba bien, solo que al intentar generar el archivo nuevo tomaba un nombre que ya existía en el sistema sin indicarme tal situación. 

En fin, a veces uno piensa que el cansancio no afecta tanto, que es únicamente cansancio y ya, sin mayor repercusión y que se puede trabajar muuuucho tiempo con una afectación mínima, nada más falso :S

En fin, por si alguien requiere un código para romper un tiff en múltiples archivos con C# adjunto el método que escribí:

public void rompe_tiff(string file)
        {
            try
            {
                Image archivo = Image.FromFile(file);
                FrameDimension dimension = new FrameDimension(archivo.FrameDimensionsList[0]);
                int total = archivo.GetFrameCount(dimension);
                for (int i = 0; i <>
                {
                    string fn = file.Replace(".tif", "_" + i.ToString() + ".tif");
                    archivo.SelectActiveFrame(dimension, i);
                    archivo.Save(file.Replace(".tif", "_" + i.ToString() + ".tif"), ImageFormat.Tiff);
                    System.Console.WriteLine("archivo: " + fn+ " Generado");
                }
                archivo.Dispose();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message.ToString());
            }
        }

Un código bastante sencillo, rompe el tiff y lo separa en "n" archivos utilizando el nombre original más el prefijo _n (donde n es el índice del nuevo archivo). No olviden utilizar los respectivos using:

using System.Drawing.Drawing2D;
using System.Drawing;
using System.Text;
using System.IO;
using System.Drawing.Text;
using System.Drawing.Imaging;

2 comentarios:

Anónimo dijo...

Salu2 Sir.

Estoy buscando hacer algo similar pero desde java...tendrás algún tip?

Fido dijo...

Lamentablemente no =(