Sto usando questo frammento di codice per caricare i vari file di immagine:WPF BitmapImage e TIFF con CMYK + Alpha
BitmapImage bitmap = new BitmapImage();
bitmap.BeginInit();
bitmap.UriSource = new System.Uri (path);
bitmap.CreateOptions = BitmapCreateOptions.PreservePixelFormat;
bitmap.EndInit();
Questo funziona bene per i file TIFF memorizzati come RGB, RGB + Alpha e CMYK.
Tuttavia, se provo a caricare un file TIFF usando i colori CMYK e un canale alfa, ottengo un'eccezione (il formato del file non è riconosciuto valido dal decodificatore).
In precedenza utilizzavo la libreria FreeImage e un sottile involucro C#. FreeImage 3.x ha supporto parziale per questo tipo di formato immagine, cioè ho dovuto caricare il TIFF due volte, una volta come CMYK senza trasparenza e una volta come RGB + Alpha; questo trucco è necessario poiché FreeImage consente solo l'accesso a massimo 4 canali di colore simultanei.
Mi piacerebbe sapere se esiste un modo supportato per caricare bitmap CMYK + Alpha? O direttamente in C# o passando attraverso alcuni codici di interoperabilità, ma preferibilmente senza dover utilizzare una DLL di terze parti (diversa dalle librerie framework .NET 4).
Un esempio di un file TIFF può essere trovato here.
EDIT: non riesco più a riprodurre il problema, il seguente codice funziona bene:
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);
Ma io sono ancora bloccato: come posso scoprire che l'immagine di origine è stato codificato come CMYK più Canale alfa? Quando guardo la proprietà Format
, ottengo solo le informazioni che l'immagine ha 40 bit per pixel. Tutta la roba interessante è memorizzato nelle seguenti proprietà non pubblici:
bitmap.Format.FormatFlags == IsCMYK | NChannelAlpha;
bitmap.Format.HasAlpha == true;
C'è un modo ufficiale di arrivare a loro, senza ricorrere alla riflessione?
Hai qualche collegamento a un TIFF utilizzando CMYK con canale alfa dove si verifica questo problema? Non riesco a riprodurre questo –
Ho aggiunto un link alla mia immagine TIFF nella domanda (http://www.opac.ch/files/cmyka.tif) –
Ah, hai ragione. Scusate, totalmente perso .. –