Я использую этот код для загрузки различных файлов изображений:WPF BitmapImage и TIFF с CMYK + альфа
BitmapImage bitmap = new BitmapImage();
bitmap.BeginInit();
bitmap.UriSource = new System.Uri (path);
bitmap.CreateOptions = BitmapCreateOptions.PreservePixelFormat;
bitmap.EndInit();
Это прекрасно работает для TIFF-файлов, сохраненных в RGB, RGB + Альфа и CMYK.
Однако, если я пытаюсь загрузить файл TIFF с использованием цветов CMYK и альфа-канала, я получаю исключение (формат файла не распознается как действительный декодером).
Я ранее использовал библиотеку FreeImage и тонкую оболочку C# поверх нее. FreeImage 3.x имеет частичную поддержку такого формата изображения, т. Е. Мне пришлось дважды загружать TIFF, как CMYK без прозрачности и один раз как RGB + Alpha; этот трюк необходим, поскольку FreeImage обеспечивает доступ не более чем к 4 одновременным цветовым каналам.
Я хотел бы узнать, поддерживается ли поддерживаемый способ загрузки растровых изображений CMYK + Alpha? Либо непосредственно на C#, либо через некоторый код взаимодействия, но предпочтительно без использования сторонней библиотеки DLL (кроме библиотек .NET 4).
Примером такого файла TIFF может быть найден here.
EDIT: Я больше не может воспроизвести проблему, следующий код работает просто отлично:
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);
Но я до сих пор застрял: как я могу узнать, что исходное изображение было закодировано как CMYK плюс Альфа-канал? Если посмотреть на свойство Format
, я получаю только информацию о том, что изображение имеет 40 бит на пиксель. Все интересные вещи хранятся в следующих непубличных свойствах:
bitmap.Format.FormatFlags == IsCMYK | NChannelAlpha;
bitmap.Format.HasAlpha == true;
Есть ли официальный способ добраться до них, не прибегая к рефлексии?
У вас есть ссылка на TIFF с использованием CMYK с альфа-каналом, где возникает эта проблема? Я не могу воспроизвести этот –
. Я добавил ссылку на мой образ TIFF в вопросе (http://www.opac.ch/files/cmyka.tif) –
Ах, вы правы. Извините, полностью пропустил это. –