estoy usando este fragmento de código para cargar varios archivos de imagen:WPF BitmapImage y TIFF con CMYK + Alfa
BitmapImage bitmap = new BitmapImage();
bitmap.BeginInit();
bitmap.UriSource = new System.Uri (path);
bitmap.CreateOptions = BitmapCreateOptions.PreservePixelFormat;
bitmap.EndInit();
Esto funciona bien para los archivos TIFF almacenados como RGB, RGB y CMYK + Alfa.
Sin embargo, si intento cargar un archivo TIFF utilizando colores CMYK y un canal alfa, recibo una excepción (el decodificador no reconoce el formato de archivo).
Anteriormente estaba usando la biblioteca FreeImage y un envoltorio C# delgado en la parte superior. FreeImage 3.x tiene soporte parcial para este tipo de formato de imagen, es decir, tuve que cargar el TIFF dos veces, una vez como CMYK sin transparencia y una vez como RGB + Alpha; este truco es necesario ya que FreeImage solo da acceso a un máximo de 4 canales de color simultáneos.
Me gustaría saber si hay una forma admitida de cargar CMYK + Alpha bitmaps? Ya sea directamente en C# o pasando por algún código de interoperabilidad, pero preferiblemente sin tener que usar una DLL de terceros (que no sean las bibliotecas de marcos de .NET 4).
Se puede encontrar un ejemplo de un archivo TIFF como este here.
EDITAR: ya no puedo reproducir el problema, el siguiente código funciona bien:
BitmapImage bitmap = new BitmapImage();
bitmap.BeginInit();
bitmap.UriSource = new System.Uri (path);
bitmap.CreateOptions = BitmapCreateOptions.PreservePixelFormat;
bitmap.EndInit();
byte[] pixels = new byte[bitmap.PixelHeight*bitmap.PixelWidth*5];
bitmap.CopyPixels (pixels, bitmap.PixelWidth * 5, 0);
Pero no lo consigo: ¿cómo puedo saber que la imagen de la fuente se codifica como CMYK más ¿Canal alfa? Al mirar la propiedad Format
, obtengo solo la información de que la imagen tiene 40 bits por píxel. Todo el material interesante se almacena en las siguientes propiedades no públicas:
bitmap.Format.FormatFlags == IsCMYK | NChannelAlpha;
bitmap.Format.HasAlpha == true;
¿Hay alguna forma oficial de llegar a ellos, sin tener que recurrir a la reflexión?
¿Tiene algún enlace a un TIFF usando CMYK con canal alfa donde ocurre este problema? No puedo reproducir este –
Agregué un enlace a mi imagen TIFF en la pregunta (http://www.opac.ch/files/cmyka.tif) –
Ah, tienes razón. Lo siento, lo extrañé por completo ... –