Freigeben über


CreateMultiProfileTransform-Funktion (icm.h)

Akzeptiert ein Array von Profilen oder ein einzelnes Gerätelinkprofil und erstellt eine Farbtransformation, die Anwendungen zum Durchführen der Farbzuordnung verwenden können.

Syntax

HTRANSFORM CreateMultiProfileTransform(
  PHPROFILE pahProfiles,
  DWORD     nProfiles,
  PDWORD    padwIntent,
  DWORD     nIntents,
  DWORD     dwFlags,
  DWORD     indexPreferredCMM
);

Parameter

pahProfiles

Zeiger auf ein Array von Handles auf die zu verwendenden Profile. Die Funktion bestimmt, ob die HPROFILEs Profilinformationen des International Color Consortium (ICC) oder des Windows Color System (WCS) enthalten und verarbeitet sie entsprechend. Wenn gültige WCS-Profile von OpenColorProfileW und WcsOpenColorProfileW zurückgegeben werden, enthalten diese Profilhandles die Kombination aus DMP-, CAMP- und GMMP-Profilen.

nProfiles

Gibt die Anzahl der Profile im Array an. Der Höchstwert beträgt 10.

padwIntent

Zeiger auf ein Array von zu verwendenden Absichten. Jede Absicht ist einer der folgenden Werte:

INTENT_PERCEPTUAL

INTENT_SATURATION

INTENT_RELATIVE_COLORIMETRIC

INTENT_ABSOLUTE_COLORIMETRIC

GMMPs sind eine Generalisierung von Absichten. Es gibt zwei mögliche Quellen für Absichten: das Profil "destination" und den Absichtslistenparameter für CreateMultiProfileTransform. Der Begriff "Destination" wird nicht verwendet, da alle bis auf zwei Profile im Profillistenparameter als erstes Ziel und dann als Quelle dienen.

Weitere Informationen finden Sie unter Renderingabsichten.

nIntents

Gibt die Anzahl der Elemente im Intents-Array an: kann entweder 1 oder derselbe Wert wie nProfiles sein. Bei Profilarrays, die WCS-Profile enthalten, wird die erste Renderingabsicht ignoriert, und für diese Profilarrays werden nur nProfiles -1-Elemente verwendet. Die maximale Anzahl von nIntents beträgt 10.

dwFlags

Gibt Flags an, die zum Steuern der Erstellung der Transformation verwendet werden. Siehe Hinweise.

indexPreferredCMM

Gibt den einbasierten Index des Farbprofils an, der angibt, welches Farbverwaltungsmodul (CMM) verwendet werden soll. Der Anwendungsentwickler kann Windows erlauben, den CMM auszuwählen, indem er diesen Parameter auf INDEX_DONT_CARE festlegt. Weitere Informationen finden Sie unter Verwenden von Farbverwaltungsmodulen (CMM) Drittanbieter-CMMs sind nur für ICC-Workflows verfügbar. Profilarrays, die WCS-Profile enthalten, ignorieren dieses Flag. Es wird auch ignoriert, wenn nur ICC-Profile verwendet werden und wenn das flag WCS_ALWAYS verwendet wird.

Rückgabewert

Wenn diese Funktion erfolgreich ist, ist der Rückgabewert ein Handle für die Farbtransformation.

Wenn diese Funktion fehlschlägt, ist der Rückgabewert NULL. Rufen Sie GetLastError auf, um erweiterte Fehlerinformationen zu erhalten.

Hinweise

Wenn ein Gerätelinkprofil verwendet wird, schlägt die Funktion fehl, wenn nProfiles nicht auf 1 festgelegt ist.

Das Array von Absichten gibt an, wie Profile kombiniert werden sollen. Die n-tenAbsicht wird verwendet, um das n-tenProfil im Array zu kombinieren. Wenn nur eine Absicht angegeben wird, wird sie für das erste Profil verwendet, und alle anderen Profile werden mithilfe der Absicht Übereinstimmung kombiniert.

Die Werte in dwFlags dienen nur als Hinweise. Das Farbverwaltungsmodul muss bestimmen, wie sie am besten verwendet werden können.

Windows Vista: Drei neue Flags wurden hinzugefügt, die mit dwFlags verwendet werden können:

Flag Beschreibung
PRESERVEBLACK Wenn dieses Bit festgelegt ist, fügt die Transformations-Engine den entsprechenden GMMP der schwarzen Generation als letzten GMMP in die Transformationssequenz ein. Dieses Flag funktioniert nur in einer reinen WCS-Transformation.
SEQUENTIAL_TRANSFORM Wenn dieses Bit festgelegt ist, wird jeder Schritt in der WCS-Verarbeitungspipeline für jedes Pixel im Bild ausgeführt, und es wird keine optimierte Farbtransformation erstellt. Dieses Flag funktioniert nur in einer reinen WCS-Transformation. Einschränkungen: Eine transformation, die mit dem SEQUENTIAL_TRANSFORM Flagsatz erstellt wurde, kann nur in dem Thread verwendet werden, für den sie erstellt wurde, und nur für jeweils einen Farbübersetzungsaufruf. COM muss vor dem Erstellen der sequenziellen Transformation initialisiert werden und muss für die Lebensdauer des Transformationsobjekts initialisiert bleiben.
WCS_ALWAYS Wenn dieses Bit festgelegt ist, verwenden selbst alle ICC-Transformationen den WCS-Codepfad.

Hinweis

SEQUENTIAL_TRANSFORM wurde versehentlich im icm.h-Header im Windows Vista SDK ausgelassen. Wenn Sie das flag SEQUENTIAL_TRANSFORM verwenden möchten, definieren Sie es in Ihrer Anwendung wie folgt:

#define SEQUENTIAL_TRANSFORM 0x80800000

Weitere Informationen finden Sie unter Flags zur Erstellung von CMM-Transformationen. Alle dort erwähnten Flags werden für alle Arten von Transformationen unterstützt, mit Ausnahme von FAST_TRANSLATE und USE_RELATIVE_COLORIMETRIC, die nur in einer reinen ICC-zu-ICC-Transformation funktionieren.

Die CreateMultiProfileTransform-Funktion wird außerhalb eines Gerätekontexts verwendet. Farben können sich verschieben, wenn sie von einem Farbprofil in dasselbe Farbprofil transformiert werden. Dies ist auf Genauigkeitsfehler zurückzuführen. Daher sollte unter diesen Umständen keine Farbtransformation durchgeführt werden.

Es wird empfohlen, dass zwischen einem Quell- und Ziel-DMP nur ein GMMP vorhanden ist. Gamut Boundary Descriptions (GBDs) werden aus den DMP/CAMP-Kombinationen erstellt. Die nachfolgenden GMMPs verwenden die GDBs vor ihnen in der Verarbeitungskette, bis als Nächstes in der zu verwendenden Sequenz ein DMP/CAMP-GBD vorhanden ist. Angenommen, eine Sequenz DMP1, CAMP1, GMMP1, GMMP2, GMMP3, DMP2, CAMP2, GMMP4, GMMP5, CAMP3, DMP3. Anschließend verwenden GMMP1 und GMMP2 GBD1 als Quelle und Ziel. Anschließend verwendet GMMP3 GBD1 als Quelle und GBD2 als Ziel. Anschließend verwendet GMMP4 GBD2 als Quelle und Ziel. Schließlich verwendet GMMP5 GBD2 als Quelle und GBD3 als Ziel. Dabei wird davon ausgegangen, dass kein GMMP mit einem anderen identisch ist.

Für WCS-Profile wird empfohlen, die Renderingabsichten auf DWORD_MAX festzulegen, um den GMMP im WCS-Profilhandle zu verwenden. Dies liegt daran, dass das Array von Renderingabsichten Vorrang vor den Renderingabsichten oder Gamutzuordnungsmodellen hat, die in den von den HPROFILEs angegebenen profilen angegeben oder enthalten sind. Das Array von Renderingabsichten verweist auf den Standard-GMMP für diese Renderingabsichten. Idealerweise wird nur eine Gamutzuordnung zwischen einem Quell- und Zielgerät durchgeführt, indem beim Erstellen des HPROFILE mit WCS-Profilinformationen das eine oder andere GMMP auf NULL festgelegt wird. Jede Legacyanwendung, die einen WCS-DMP verwendet, ruft eine Sequenz von GMMPs auf. GDBs werden basierend auf DMPs und CAMPs ausgewählt. Für zwischengeschaltete GMMP-Gamutgrenzen werden die Quell- und Ziel-GBDs verwendet.

Zusammenfassend gilt: Wenn nIntents == 1, dann wird das erste GMM basierend auf dem GMMP festgelegt, der als Standard* für den padwIntent-Wert festgelegt ist, es sei denn, dieser Wert ist DWORD_MAX. In diesem Fall werden die eingebetteten GMM-Informationen aus dem zweiten Profil verwendet (Die eingebetteten GMM-Informationen sind entweder ein GMMP oder, im Fall eines ICC-Profils, der Baseline-GMM, der** der Absicht aus dem Profilheader entspricht). Die restlichen GMMs werden basierend auf dem GMMP festgelegt, der als Standard* für RelativeColorimetric festgelegt ist.

Wenn nIntents = nProfiles -1 ist, wird jedes GMM basierend auf dem GMMP festgelegt, der als Standard* für den Wert im padwIntent-Array am entsprechenden Index festgelegt ist, außer wenn padwIntent-Werte DWORD_MAX sind. Für Werte im padwIntent-Array , die DWORD_MAX sind, werden die GMMs an den entsprechenden Positionen basierend auf den eingebetteten GMM-Informationen aus dem zweiten der beiden Profile festgelegt, deren Gamuts vom GMM zugeordnet werden. (Auch hier sind die eingebetteten GMM-Informationen entweder ein GMMP oder im Fall eines ICC-Profils das Baseline-GMM, das der Absicht aus dem Profilheader entspricht.)

Wenn nIntents = nProfiles verwendet wird, wird die erste Absicht ignoriert, und die Funktion verhält sich wie bei nIntents = nProfiles -1.

Jede andere Kombination aus padwIntents und nIntents gibt einen Fehler zurück.

* "als Standard festgelegt" bedeutet, dass der Standard-GMMP mithilfe von WcsGetDefaultColorProfile abgefragt wird, wobei der parameter profileManagementScope auf WCS_PROFILE_MANAGEMENT_SCOPE_CURRENT_USER festgelegt ist. Dies kann entweder aktuelle Benutzer- oder systemweite Standardwerte zurückgeben, wie in der Dokumentation zu WcsGetDefaultColorProfile beschrieben.

** "GMM corresponding to" bedeutet nicht "GMM from the GMMP set as default for". Stattdessen bedeutet dies "eine konstante Zuordnung zwischen ICC-Profilabsichten und GMM-Baselinealgorithmen".

Die WCS-Transformationsunterstützung für ICC ColorSpace-Profile ist auf RGB-Farbraumprofile beschränkt. Die folgenden ICC-Profiltypen können nicht in einer CITE-verarbeiteten Transformation verwendet werden, entweder in einer gemischten WCS/ICC-Transformation oder einer all-ICC-Transformation mit WCS_ALWAYS festgelegt:

  • Nicht-RGB ColorSpace-Profile
  • NamedColor-Profile
  • n-Kanalprofile (wobei n > 8)
  • DeviceLink-Profile
  • Abstrakte Profile

Anforderungen

   
Unterstützte Mindestversion (Client) Windows 2000 Professional [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows 2000 Server [nur Desktop-Apps]
Kopfzeile icm.h
Bibliothek Mscms.lib
DLL Mscms.dll

Weitere Informationen