Option `decodearray` wird auf die PDF-Eigenschaft `/DECODE` `/Decode` abgebildet und dient dazu, die Farben eines Eingangsbildes auf Farben im Ausgangsbild abzubilden. Dabei werden für jede Farbe im Eingangsbild zwei Werte Start-Faktor und End-Faktor eine Lineartransformation der jeweiligen Farbe benötigt. Ist die eingeladene Datei also im RGB-Farbmodell, so werden 6 Werte benötigt. Bei CMYK hingegen 8.
Für ein RGB-Bild müsste `decodearray={1 0 1 0 1 0}` die Farben invertieren, da es den Wertebereich aller Farben umkehrt, es wird also der kleinste mögliche Wert auf den größten möglichen Wert abgebildet und umgekehrt. Wenn man weiß, dass `example-image.jpg` RGB-Farben enthält, dann kann man das auch einfach testen:
\documentclass{article}
\usepackage{graphicx}
\usepackage{mwe}
\begin{document}
\includegraphics[decodearray={1 0 1 0 1 0}]{example-image.jpg}
\end{document}
[![invertiertes example-image][1]][1]
Funktioniert. Keine Veränderung würde man entsprechend mit dem Array `{0 1 0 1 0 1}` erhalten. Mit `{0 0 0 0 0 1}` würde hingegen der hellgraue Hintergrund tief blau, weil alle Werte für Rot und Gelb auf die 0 abgebildet werden, während die Werte für Blau ihren normalen Farbraum erhalten. Soll einfach jeder Farbwert für Blau auf Blau abgebildet werden, dann wäre das das Paar `1 1`. Mit `{0 0 0 0 1 1}` würde dann `example-image.jpg` zu einer blauen Fläche entarten, weil einfach jeder Farbwert zu reinem Blau würde.
Für ein Bild mit CMYK-Farben müsste man entsprechend 8 Paare angeben. Der Array `{0.2 0.2 1 0 1 0.8 1 0}` würde dann alle Cyan-Werte auf den Wert 0.2 abbilden. Magenta würde invertiert (der kleinste Wert wird auf den größten abgebildet, der größte auf den kleinsten), Yellow wird invertiert aber gleichzeitig extrem verstärkt, weil der kleinste Gelb-Wert nun das Maximum an Gelb ist und der größte Werte 80% Gelb, Schwarz wird ebenfalls invertiert.
Angenommen, das Ausgangsbild liegt als CMYK (oder cmyk) vor und soll auf Grauwerte abgebildet werden, dann müsste das mit `decodearray={0 0 0 0 0 0 0 1}` gelingen. Leider funktioniert das nicht und die Ursache mag verblüffen. Wenn wir uns das erzeugte PDF anschauen, dann finden wir im entsprechenden Objekt, zwei decode arrays:
> `/Decode[0 0 0 0 0 0 0 1]
/Type /XObject
/Subtype /Image
/Width 100
/Height 100
/BitsPerComponent 8
/Length 11182
/ColorSpace /DeviceCMYK
/Decode [1 0 1 0 1 0 1 0]
/Filter /DCTDecode`
und der letzte gewinnt. Tatsächlich muss nämlich für CMYK `pdftex` selbst bereits eine Invertierung vornehmen, weil sonst die Farben für JPEGs nicht stimmen. Das ist höchst ärgerlich, verhindert es doch die Verwendung von `decodearray` für CMYK-Bilder. Man könnte nun natürlich das PDF editieren, in obigem Objekt die Zeile `/Decode [1 0 1 0 1 0 1 0]` durch `/Decode [0 0 0 0 0 0 1 0]` ersetzen und so die Farben entfernen, aber wer will schon das PDF editieren. editieren (zumal man höllisch aufpassen muss, dabei die Anzahl Bytes nicht zu verändern). Da ist es schon besser, eine Umwandlung aller relevanten Bilder beispielsweise mit `convert` von `ImageMagick` vorzunehmen.
Für RGB-Bilder wiederum kann man via `decodearray` die Farben ohnehin nicht heraus nehmen, weil man nicht beispielsweise festlegen kann: Bild Bilde die Werte für Grün und Blau auf denselben Wert ab wie Rot. Grauwerte gibt es aber bei RGB nur, wenn die Werte für R, G und B identisch sind (leichte Abweichungen werden zwar gerne für Antialiasing-Effekte verwendet, das funktioniert aber in erster Linie, weil wir schlechter sehen als die Mathematik vorgibt).
[1]: https://texwelt.de/wissen/upfiles/test_20180523_195419.png