golcms

package module
v0.0.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 30, 2026 License: MIT Imports: 12 Imported by: 0

README

This is a port of LittleCMS to the Go programming language.

The port is incomplete.

Endianness
Big-endian platforms are not currently supported. The code is structured so big-endian support can be added later, 
but it is non-functional for now.

Scope
This Go port focuses on ICC-based color interpretation for common spaces—Gray, RGB, CMYK, Lab, XYZ 
using existing profiles and standard PCS conversions. To keep it lean, it omits features not required 
to use profiles: profile-building and measurement I/O (e.g., CGATS/IT8, spectral data), 
advanced appearance models (e.g., CIECAM02), profile authoring utilities (profile writing/ID calculation), 
and advanced gamut analysis/mapping tools.

Memory management (work in progress)
I’m exploring Go arena usage for better memory behavior; some parameters/hooks exist,
but this is not developed yet. Some C-style free functions are intentionally left in place 
for possible future use—they are no-ops for now.

I’ve tried to stay close to the LittleCMS style (both out of respect and for easier debugging), so some code looks “ungoish” (e.g., more goto than typical Go). That may change over time.

The port is still early; testing and issue reports are very welcome.

Installation

Requires Go 1.22+.

go get github.com/yzigangirova/lcms-go

License & attribution

License: MIT. See LICENSE.

Copyright (this port): © 2025 Yuliana Zigangirova

Upstream attribution: Portions derived from LittleCMS (lcms).
© 1998–2023 Marti Maria Saguer — used under the MIT License.

Documentation

Overview

lcms_version.go (in package golcms)

Index

Constants

View Source
const (
	MAX_NODES_IN_CURVE = 4097
	MINUS_INF          = 1e22 // Floating-point constant
	PLUS_INF           = 1e22 // Floating-point constant
)

----------------------------------------------------------------- Implementation Maxim number of nodes

View Source
const (
	InpAdj  = float64(1.0 / MAX_ENCODEABLE_XYZ) // (65536.0 / (65535.0 * 2.0))
	OutpAdj = float64(MAX_ENCODEABLE_XYZ)       // ((2.0 * 65535.0) / 65536.0)
)

Factors to convert from 1.15 fixed point to 0..1.0 range and vice-versa

View Source
const (
	INTENT_PERCEPTUAL = iota
	INTENT_RELATIVE_COLORIMETRIC
	INTENT_SATURATION
	INTENT_ABSOLUTE_COLORIMETRIC
)

//////////////////LCMS placeholders//////////////////////// ICC Intents

View Source
const (
	INTENT_PRESERVE_K_ONLY_PERCEPTUAL             = 10
	INTENT_PRESERVE_K_ONLY_RELATIVE_COLORIMETRIC  = 11
	INTENT_PRESERVE_K_ONLY_SATURATION             = 12
	INTENT_PRESERVE_K_PLANE_PERCEPTUAL            = 13
	INTENT_PRESERVE_K_PLANE_RELATIVE_COLORIMETRIC = 14
	INTENT_PRESERVE_K_PLANE_SATURATION            = 15
)

Non-ICC intents

View Source
const (
	LCMS_USED_AS_INPUT  = 0
	LCMS_USED_AS_OUTPUT = 1
	LCMS_USED_AS_PROOF  = 2
)

How profiles may be used

View Source
const (
	CmsAT_BEGIN cmsStageLoc = iota
	CmsAT_END
)
View Source
const (
	CmsPERCEPTUAL_BLACK_X = 0.00336
	CmsPERCEPTUAL_BLACK_Y = 0.0034731
	CmsPERCEPTUAL_BLACK_Z = 0.00287
)

V4 perceptual black

View Source
const (
	PT_ANY = 0 // Don't check colorspace
	// 1 & 2 are reserved
	PT_GRAY  = 3
	PT_RGB   = 4
	PT_CMY   = 5
	PT_CMYK  = 6
	PT_YCbCr = 7
	PT_YUV   = 8 // Lu'v'
	PT_XYZ   = 9
	PT_Lab   = 10
	PT_YUVK  = 11 // Lu'v'K
	PT_HSV   = 12
	PT_HLS   = 13
	PT_Yxy   = 14
	PT_MCH1  = 15
	PT_MCH2  = 16
	PT_MCH3  = 17
	PT_MCH4  = 18
	PT_MCH5  = 19
	PT_MCH6  = 20
	PT_MCH7  = 21
	PT_MCH8  = 22
	PT_MCH9  = 23
	PT_MCH10 = 24
	PT_MCH11 = 25
	PT_MCH12 = 26
	PT_MCH13 = 27
	PT_MCH14 = 28
	PT_MCH15 = 29
	PT_LabV2 = 30 // Identical to PT_Lab, but using the V2 old encoding
)

Pixel types Pixel type constants

View Source
const (
	CmsFLAGS_NOCACHE       = 0x0040 // Inhibit 1-pixel cache
	CmsFLAGS_NOOPTIMIZE    = 0x0100 // Inhibit optimizations
	CmsFLAGS_NULLTRANSFORM = 0x0200 // Don't transform anyway

	// Proofing flags
	CmsFLAGS_GAMUTCHECK   = 0x1000 // Out of Gamut alarm
	CmsFLAGS_SOFTPROOFING = 0x4000 // Do softproofing

	// Misc
	CmsFLAGS_BLACKPOINTCOMPENSATION = 0x2000 // Black point compensation
	CmsFLAGS_NOWHITEONWHITEFIXUP    = 0x0004 // Don't fix scum dot
	CmsFLAGS_HIGHRESPRECALC         = 0x0400 // Use more memory for better accuracy
	CmsFLAGS_LOWRESPRECALC          = 0x0800 // Use less memory to minimize resources

	// For devicelink creation
	CmsFLAGS_8BITS_DEVICELINK = 0x0008 // Create 8-bit devicelinks
	CmsFLAGS_GUESSDEVICECLASS = 0x0020 // Guess device class for transform2devicelink
	CmsFLAGS_KEEP_SEQUENCE    = 0x0080 // Keep profile sequence for devicelink creation

	// Specific to particular optimizations
	CmsFLAGS_FORCE_CLUT              = 0x0002 // Force CLUT optimization
	CmsFLAGS_CLUT_POST_LINEARIZATION = 0x0001 // Create postlinearization tables if possible
	CmsFLAGS_CLUT_PRE_LINEARIZATION  = 0x0010 // Create prelinearization tables if possible

	// Specific to unbounded mode
	CmsFLAGS_NONEGATIVES = 0x8000 // Prevent negative numbers in floating-point transforms

	// Copy alpha channels when transforming
	CmsFLAGS_COPY_ALPHA = 0x04000000 // Alpha channels are copied on CmsDoTransform()

	// Fine-tune control over number of gridpoints
	CmsFLAGS_GRIDPOINTS_MASK  = 0xFF
	CmsFLAGS_GRIDPOINTS_SHIFT = 16

	// CRD special
	CmsFLAGS_NODEFAULTRESOURCEDEF = 0x01000000 // No default resource definitions
)

Flags

View Source
const (
	CmsSigChromaticityType          cmsTagTypeSignature = 0x6368726D // 'chrm'
	CmsSigcicpType                  cmsTagTypeSignature = 0x63696370 // 'cicp'
	CmsSigColorantOrderType         cmsTagTypeSignature = 0x636C726F // 'clro'
	CmsSigColorantTableType         cmsTagTypeSignature = 0x636C7274 // 'clrt'
	CmsSigCrdInfoType               cmsTagTypeSignature = 0x63726469 // 'crdi'
	CmsSigCurveType                 cmsTagTypeSignature = 0x63757276 // 'curv'
	CmsSigDataType                  cmsTagTypeSignature = 0x64617461 // 'data'
	CmsSigDictType                  cmsTagTypeSignature = 0x64696374 // 'dict'
	CmsSigDateTimeType              cmsTagTypeSignature = 0x6474696D // 'dtim'
	CmsSigDeviceSettingsType        cmsTagTypeSignature = 0x64657673 // 'devs'
	CmsSigLut16Type                 cmsTagTypeSignature = 0x6d667432 // 'mft2'
	CmsSigLut8Type                  cmsTagTypeSignature = 0x6d667431 // 'mft1'
	CmsSigLutAtoBType               cmsTagTypeSignature = 0x6d414220 // 'mAB '
	CmsSigLutBtoAType               cmsTagTypeSignature = 0x6d424120 // 'mBA '
	CmsSigMeasurementType           cmsTagTypeSignature = 0x6D656173 // 'meas'
	CmsSigMultiLocalizedUnicodeType cmsTagTypeSignature = 0x6D6C7563 // 'mluc'
	CmsSigMultiProcessElementType   cmsTagTypeSignature = 0x6D706574 // 'mpet'
	CmsSigNamedColorType            cmsTagTypeSignature = 0x6E636f6C // 'ncol' -- DEPRECATED!
	CmsSigNamedColor2Type           cmsTagTypeSignature = 0x6E636C32 // 'ncl2'
	CmsSigParametricCurveType       cmsTagTypeSignature = 0x70617261 // 'para'
	CmsSigProfileSequenceDescType   cmsTagTypeSignature = 0x70736571 // 'pseq'
	CmsSigProfileSequenceIdType     cmsTagTypeSignature = 0x70736964 // 'psid'
	CmsSigResponseCurveSet16Type    cmsTagTypeSignature = 0x72637332 // 'rcs2'
	CmsSigS15Fixed16ArrayType       cmsTagTypeSignature = 0x73663332 // 'sf32'
	CmsSigScreeningType             cmsTagTypeSignature = 0x7363726E // 'scrn'
	CmsSigSignatureType             cmsTagTypeSignature = 0x73696720 // 'sig '
	CmsSigTextType                  cmsTagTypeSignature = 0x74657874 // 'text'
	CmsSigTextDescriptionType       cmsTagTypeSignature = 0x64657363 // 'desc'
	CmsSigU16Fixed16ArrayType       cmsTagTypeSignature = 0x75663332 // 'uf32'
	CmsSigUcrBgType                 cmsTagTypeSignature = 0x62666420 // 'bfd '
	CmsSigUInt16ArrayType           cmsTagTypeSignature = 0x75693136 // 'ui16'
	CmsSigUInt32ArrayType           cmsTagTypeSignature = 0x75693332 // 'ui32'
	CmsSigUInt64ArrayType           cmsTagTypeSignature = 0x75693634 // 'ui64'
	CmsSigUInt8ArrayType            cmsTagTypeSignature = 0x75693038 // 'ui08'
	CmsSigVcgtType                  cmsTagTypeSignature = 0x76636774 // 'vcgt'
	CmsSigViewingConditionsType     cmsTagTypeSignature = 0x76696577 // 'view'
	CmsSigXYZType                   cmsTagTypeSignature = 0x58595A20 // 'XYZ '
)

cmsTagTypeSignature represents the base ICC type definitions. Base ICC type definitions

View Source
const (
	CmsSigAToB0Tag                          cmsTagSignature = 0x41324230 // 'A2B0'
	CmsSigAToB1Tag                          cmsTagSignature = 0x41324231 // 'A2B1'
	CmsSigAToB2Tag                          cmsTagSignature = 0x41324232 // 'A2B2'
	CmsSigBlueColorantTag                   cmsTagSignature = 0x6258595A // 'bXYZ'
	CmsSigBlueMatrixColumnTag               cmsTagSignature = 0x6258595A // 'bXYZ'
	CmsSigBlueTRCTag                        cmsTagSignature = 0x62545243 // 'bTRC'
	CmsSigBToA0Tag                          cmsTagSignature = 0x42324130 // 'B2A0'
	CmsSigBToA1Tag                          cmsTagSignature = 0x42324131 // 'B2A1'
	CmsSigBToA2Tag                          cmsTagSignature = 0x42324132 // 'B2A2'
	CmsSigCalibrationDateTimeTag            cmsTagSignature = 0x63616C74 // 'calt'
	CmsSigCharTargetTag                     cmsTagSignature = 0x74617267 // 'targ'
	CmsSigChromaticAdaptationTag            cmsTagSignature = 0x63686164 // 'chad'
	CmsSigChromaticityTag                   cmsTagSignature = 0x6368726D // 'chrm'
	CmsSigColorantOrderTag                  cmsTagSignature = 0x636C726F // 'clro'
	CmsSigColorantTableTag                  cmsTagSignature = 0x636C7274 // 'clrt'
	CmsSigColorantTableOutTag               cmsTagSignature = 0x636C6F74 // 'clot'
	CmsSigColorimetricIntentImageStateTag   cmsTagSignature = 0x63696973 // 'ciis'
	CmsSigCopyrightTag                      cmsTagSignature = 0x63707274 // 'cprt'
	CmsSigCrdInfoTag                        cmsTagSignature = 0x63726469 // 'crdi'
	CmsSigDataTag                           cmsTagSignature = 0x64617461 // 'data'
	CmsSigDateTimeTag                       cmsTagSignature = 0x6474696D // 'dtim'
	CmsSigDeviceMfgDescTag                  cmsTagSignature = 0x646D6E64 // 'dmnd'
	CmsSigDeviceModelDescTag                cmsTagSignature = 0x646D6464 // 'dmdd'
	CmsSigDeviceSettingsTag                 cmsTagSignature = 0x64657673 // 'devs'
	CmsSigDToB0Tag                          cmsTagSignature = 0x44324230 // 'D2B0'
	CmsSigDToB1Tag                          cmsTagSignature = 0x44324231 // 'D2B1'
	CmsSigDToB2Tag                          cmsTagSignature = 0x44324232 // 'D2B2'
	CmsSigDToB3Tag                          cmsTagSignature = 0x44324233 // 'D2B3'
	CmsSigBToD0Tag                          cmsTagSignature = 0x42324430 // 'B2D0'
	CmsSigBToD1Tag                          cmsTagSignature = 0x42324431 // 'B2D1'
	CmsSigBToD2Tag                          cmsTagSignature = 0x42324432 // 'B2D2'
	CmsSigBToD3Tag                          cmsTagSignature = 0x42324433 // 'B2D3'
	CmsSigGamutTag                          cmsTagSignature = 0x67616D74 // 'gamt'
	CmsSigGrayTRCTag                        cmsTagSignature = 0x6b545243 // 'kTRC'
	CmsSigGreenColorantTag                  cmsTagSignature = 0x6758595A // 'gXYZ'
	CmsSigGreenMatrixColumnTag              cmsTagSignature = 0x6758595A // 'gXYZ'
	CmsSigGreenTRCTag                       cmsTagSignature = 0x67545243 // 'gTRC'
	CmsSigLuminanceTag                      cmsTagSignature = 0x6C756D69 // 'lumi'
	CmsSigMeasurementTag                    cmsTagSignature = 0x6D656173 // 'meas'
	CmsSigMediaBlackPointTag                cmsTagSignature = 0x626B7074 // 'bkpt'
	CmsSigMediaWhitePointTag                cmsTagSignature = 0x77747074 // 'wtpt'
	CmsSigNamedColorTag                     cmsTagSignature = 0x6E636F6C // 'ncol' // Deprecated by the ICC
	CmsSigNamedColor2Tag                    cmsTagSignature = 0x6E636C32 // 'ncl2'
	CmsSigOutputResponseTag                 cmsTagSignature = 0x72657370 // 'resp'
	CmsSigPerceptualRenderingIntentGamutTag cmsTagSignature = 0x72696730 // 'rig0'
	CmsSigPreview0Tag                       cmsTagSignature = 0x70726530 // 'pre0'
	CmsSigPreview1Tag                       cmsTagSignature = 0x70726531 // 'pre1'
	CmsSigPreview2Tag                       cmsTagSignature = 0x70726532 // 'pre2'
	CmsSigProfileDescriptionTag             cmsTagSignature = 0x64657363 // 'desc'
	CmsSigProfileDescriptionMLTag           cmsTagSignature = 0x6473636D // 'dscm'
	CmsSigProfileSequenceDescTag            cmsTagSignature = 0x70736571 // 'pseq'
	CmsSigProfileSequenceIdTag              cmsTagSignature = 0x70736964 // 'psid'
	CmsSigPs2CRD0Tag                        cmsTagSignature = 0x70736430 // 'psd0'
	CmsSigPs2CRD1Tag                        cmsTagSignature = 0x70736431 // 'psd1'
	CmsSigPs2CRD2Tag                        cmsTagSignature = 0x70736432 // 'psd2'
	CmsSigPs2CRD3Tag                        cmsTagSignature = 0x70736433 // 'psd3'
	CmsSigPs2CSATag                         cmsTagSignature = 0x70733273 // 'ps2s'
	CmsSigPs2RenderingIntentTag             cmsTagSignature = 0x70733269 // 'ps2i'
	CmsSigRedColorantTag                    cmsTagSignature = 0x7258595A // 'rXYZ'
	CmsSigRedMatrixColumnTag                cmsTagSignature = 0x7258595A // 'rXYZ'
	CmsSigRedTRCTag                         cmsTagSignature = 0x72545243 // 'rTRC'
	CmsSigSaturationRenderingIntentGamutTag cmsTagSignature = 0x72696732 // 'rig2'
	CmsSigScreeningDescTag                  cmsTagSignature = 0x73637264 // 'scrd'
	CmsSigScreeningTag                      cmsTagSignature = 0x7363726E // 'scrn'
	CmsSigTechnologyTag                     cmsTagSignature = 0x74656368 // 'tech'
	CmsSigUcrBgTag                          cmsTagSignature = 0x62666420 // 'bfd '
	CmsSigViewingCondDescTag                cmsTagSignature = 0x76756564 // 'vued'
	CmsSigViewingConditionsTag              cmsTagSignature = 0x76696577 // 'view'
	CmsSigVcgtTag                           cmsTagSignature = 0x76636774 // 'vcgt'
	CmsSigMetaTag                           cmsTagSignature = 0x6D657461 // 'meta'
	CmsSigcicpTag                           cmsTagSignature = 0x63696370 // 'cicp'
	CmsSigArgyllArtsTag                     cmsTagSignature = 0x61727473 // 'arts'
)

Base ICC tag definitions

View Source
const (
	CmsSigXYZData   cmsColorSpaceSignature = 0x58595A20 // 'XYZ '
	CmsSigLabData   cmsColorSpaceSignature = 0x4C616220 // 'Lab '
	CmsSigLuvData   cmsColorSpaceSignature = 0x4C757620 // 'Luv '
	CmsSigYCbCrData cmsColorSpaceSignature = 0x59436272 // 'YCbr'
	CmsSigYxyData   cmsColorSpaceSignature = 0x59787920 // 'Yxy '
	CmsSigRgbData   cmsColorSpaceSignature = 0x52474220 // 'RGB '
	CmsSigGrayData  cmsColorSpaceSignature = 0x47524159 // 'GRAY'
	CmsSigHsvData   cmsColorSpaceSignature = 0x48535620 // 'HSV '
	CmsSigHlsData   cmsColorSpaceSignature = 0x484C5320 // 'HLS '
	CmsSigCmykData  cmsColorSpaceSignature = 0x434D594B // 'CMYK'
	CmsSigCmyData   cmsColorSpaceSignature = 0x434D5920 // 'CMY '

	CmsSigMCH1Data cmsColorSpaceSignature = 0x4D434831 // 'MCH1'
	CmsSigMCH2Data cmsColorSpaceSignature = 0x4D434832 // 'MCH2'
	CmsSigMCH3Data cmsColorSpaceSignature = 0x4D434833 // 'MCH3'
	CmsSigMCH4Data cmsColorSpaceSignature = 0x4D434834 // 'MCH4'
	CmsSigMCH5Data cmsColorSpaceSignature = 0x4D434835 // 'MCH5'
	CmsSigMCH6Data cmsColorSpaceSignature = 0x4D434836 // 'MCH6'
	CmsSigMCH7Data cmsColorSpaceSignature = 0x4D434837 // 'MCH7'
	CmsSigMCH8Data cmsColorSpaceSignature = 0x4D434838 // 'MCH8'
	CmsSigMCH9Data cmsColorSpaceSignature = 0x4D434839 // 'MCH9'
	CmsSigMCHAData cmsColorSpaceSignature = 0x4D434841 // 'MCHA'
	CmsSigMCHBData cmsColorSpaceSignature = 0x4D434842 // 'MCHB'
	CmsSigMCHCData cmsColorSpaceSignature = 0x4D434843 // 'MCHC'
	CmsSigMCHDData cmsColorSpaceSignature = 0x4D434844 // 'MCHD'
	CmsSigMCHEData cmsColorSpaceSignature = 0x4D434845 // 'MCHE'
	CmsSigMCHFData cmsColorSpaceSignature = 0x4D434846 // 'MCHF'

	CmsSigNamedData  cmsColorSpaceSignature = 0x6E6D636C // 'nmcl'
	CmsSig1colorData cmsColorSpaceSignature = 0x31434C52 // '1CLR'
	CmsSig2colorData cmsColorSpaceSignature = 0x32434C52 // '2CLR'
	CmsSig3colorData cmsColorSpaceSignature = 0x33434C52 // '3CLR'
	CmsSig4colorData cmsColorSpaceSignature = 0x34434C52 // '4CLR'
	CmsSig5colorData cmsColorSpaceSignature = 0x35434C52 // '5CLR'
	CmsSig6colorData cmsColorSpaceSignature = 0x36434C52 // '6CLR'
	CmsSig7colorData cmsColorSpaceSignature = 0x37434C52 // '7CLR'
	CmsSig8colorData cmsColorSpaceSignature = 0x38434C52 // '8CLR'
	CmsSig9colorData cmsColorSpaceSignature = 0x39434C52 // '9CLR'

	CmsSig10colorData cmsColorSpaceSignature = 0x41434C52 // 'ACLR'
	CmsSig11colorData cmsColorSpaceSignature = 0x42434C52 // 'BCLR'
	CmsSig12colorData cmsColorSpaceSignature = 0x43434C52 // 'CCLR'
	CmsSig13colorData cmsColorSpaceSignature = 0x44434C52 // 'DCLR'
	CmsSig14colorData cmsColorSpaceSignature = 0x45434C52 // 'ECLR'
	CmsSig15colorData cmsColorSpaceSignature = 0x46434C52 // 'FCLR'

	CmsSigLuvKData cmsColorSpaceSignature = 0x4C75764B // 'LuvK'
)
View Source
const (
	CmsSigDigitalCamera              cmsTechnologySignature = 0x6463616D // 'dcam'
	CmsSigFilmScanner                cmsTechnologySignature = 0x6673636E // 'fscn'
	CmsSigReflectiveScanner          cmsTechnologySignature = 0x7273636E // 'rscn'
	CmsSigInkJetPrinter              cmsTechnologySignature = 0x696A6574 // 'ijet'
	CmsSigThermalWaxPrinter          cmsTechnologySignature = 0x74776178 // 'twax'
	CmsSigElectrophotographicPrinter cmsTechnologySignature = 0x6570686F // 'epho'
	CmsSigElectrostaticPrinter       cmsTechnologySignature = 0x65737461 // 'esta'
	CmsSigDyeSublimationPrinter      cmsTechnologySignature = 0x64737562 // 'dsub'
	CmsSigPhotographicPaperPrinter   cmsTechnologySignature = 0x7270686F // 'rpho'
	CmsSigFilmWriter                 cmsTechnologySignature = 0x6670726E // 'fprn'
	CmsSigVideoMonitor               cmsTechnologySignature = 0x7669646D // 'vidm'
	CmsSigVideoCamera                cmsTechnologySignature = 0x76696463 // 'vidc'
	CmsSigProjectionTelevision       cmsTechnologySignature = 0x706A7476 // 'pjtv'
	CmsSigCRTDisplay                 cmsTechnologySignature = 0x43525420 // 'CRT '
	CmsSigPMDisplay                  cmsTechnologySignature = 0x504D4420 // 'PMD '
	CmsSigAMDisplay                  cmsTechnologySignature = 0x414D4420 // 'AMD '
	CmsSigPhotoCD                    cmsTechnologySignature = 0x4B504344 // 'KPCD'
	CmsSigPhotoImageSetter           cmsTechnologySignature = 0x696D6773 // 'imgs'
	CmsSigGravure                    cmsTechnologySignature = 0x67726176 // 'grav'
	CmsSigOffsetLithography          cmsTechnologySignature = 0x6F666673 // 'offs'
	CmsSigSilkscreen                 cmsTechnologySignature = 0x73696C6B // 'silk'
	CmsSigFlexography                cmsTechnologySignature = 0x666C6578 // 'flex'
	CmsSigMotionPictureFilmScanner   cmsTechnologySignature = 0x6D706673 // 'mpfs'
	CmsSigMotionPictureFilmRecorder  cmsTechnologySignature = 0x6D706672 // 'mpfr'
	CmsSigDigitalMotionPictureCamera cmsTechnologySignature = 0x646D7063 // 'dmpc'
	CmsSigDigitalCinemaProjector     cmsTechnologySignature = 0x64636A70 // 'dcpj'
)

ICC Technology tag

View Source
const (
	CmsSigCurveSetElemType cmsStageSignature = 0x63767374 // 'cvst'
	CmsSigMatrixElemType   cmsStageSignature = 0x6D617466 // 'matf'
	CmsSigCLutElemType     cmsStageSignature = 0x636C7574 // 'clut'

	CmsSigBAcsElemType cmsStageSignature = 0x62414353 // 'bACS'
	CmsSigEAcsElemType cmsStageSignature = 0x65414353 // 'eACS'

	// Custom from here, not in the ICC Spec
	CmsSigXYZ2LabElemType    cmsStageSignature = 0x6C327820 // 'l2x '
	CmsSigLab2XYZElemType    cmsStageSignature = 0x78326C20 // 'x2l '
	CmsSigNamedColorElemType cmsStageSignature = 0x6E636C20 // 'ncl '
	CmsSigLabV2toV4          cmsStageSignature = 0x32203420 // '2 4 '
	CmsSigLabV4toV2          cmsStageSignature = 0x34203220 // '4 2 '

	// Identities
	CmsSigIdentityElemType cmsStageSignature = 0x69646E20 // 'idn '

	// Float to floatPCS
	CmsSigLab2FloatPCS          cmsStageSignature = 0x64326C20 // 'd2l '
	CmsSigFloatPCS2Lab          cmsStageSignature = 0x6C326420 // 'l2d '
	CmsSigXYZ2FloatPCS          cmsStageSignature = 0x64327820 // 'd2x '
	CmsSigFloatPCS2XYZ          cmsStageSignature = 0x78326420 // 'x2d '
	CmsSigClipNegativesElemType cmsStageSignature = 0x636c7020 // 'clp '
)
View Source
const (
	CmsSigFormulaCurveSeg cmsCurveSegSignature = 0x70617266 // 'parf'
	CmsSigSampledCurveSeg cmsCurveSegSignature = 0x73616D66 // 'samf'
	CmsSigSegmentedCurve  cmsCurveSegSignature = 0x63757266 // 'curf'
)
View Source
const (
	CmsSigStatusA uint32 = 0x53746141 // 'StaA'
	CmsSigStatusE uint32 = 0x53746145 // 'StaE'
	CmsSigStatusI uint32 = 0x53746149 // 'StaI'
	CmsSigStatusT uint32 = 0x53746154 // 'StaT'
	CmsSigStatusM uint32 = 0x5374614D // 'StaM'
	CmsSigDN      uint32 = 0x444E2020 // 'DN  '
	CmsSigDNP     uint32 = 0x444E2050 // 'DN P'
	CmsSigDNN     uint32 = 0x444E4E20 // 'DNN '
	CmsSigDNNP    uint32 = 0x444E4E50 // 'DNNP'
)

Used in ResponseCurveType

View Source
const (
	CmsSigMacintosh cmsPlatformSignature = 0x4150504C // 'APPL'
	CmsSigMicrosoft cmsPlatformSignature = 0x4D534654 // 'MSFT'
	CmsSigSolaris   cmsPlatformSignature = 0x53554E57 // 'SUNW'
	CmsSigSGI       cmsPlatformSignature = 0x53474920 // 'SGI '
	CmsSigTaligent  cmsPlatformSignature = 0x54474E54 // 'TGNT'
	CmsSigUnices    cmsPlatformSignature = 0x2A6E6978 // '*nix'   // From argyll -- Not official

)
View Source
const (
	CmsSigInputClass      cmsProfileClassSignature = 0x73636E72 // 'scnr'
	CmsSigDisplayClass    cmsProfileClassSignature = 0x6D6E7472 // 'mntr'
	CmsSigOutputClass     cmsProfileClassSignature = 0x70727472 // 'prtr'
	CmsSigLinkClass       cmsProfileClassSignature = 0x6C696E6B // 'link'
	CmsSigAbstractClass   cmsProfileClassSignature = 0x61627374 // 'abst'
	CmsSigColorSpaceClass cmsProfileClassSignature = 0x73706163 // 'spac'
	CmsSigNamedColorClass cmsProfileClassSignature = 0x6E6D636C // 'nmcl'
)
View Source
const (
	UserPtr cmsMemoryClient = iota
	Logger
	AlarmCodesContext
	AdaptationStateContext
	MemPlugin
	InterpPlugin
	CurvesPlugin
	FormattersPlugin
	TagTypePlugin
	TagPlugin
	IntentPlugin
	MPEPlugin
	OptimizationPlugin
	TransformPlugin
	MutexPlugin
	ParallelizationPlugin

	MemoryClientMax // Last in the list
)
View Source
const (
	VX = 0
	VY = 1
	VZ = 2
)

Constants

View Source
const (
	CMS_LERP_FLAGS_16BITS    uint32 = 0x0000 // Default
	CMS_LERP_FLAGS_FLOAT     uint32 = 0x0001 // Floating-point implementation required
	CMS_LERP_FLAGS_TRILINEAR uint32 = 0x0100 // Hint for trilinear interpolation
)

Constants for interpolation flags

View Source
const (
	// Matches LCMS_VERSION macro (e.g., 2150 for 2.15)
	LCMSUpstreamEncoded = 2150

	LCMSUpstreamMajor = 2
	LCMSUpstreamMinor = 15
	LCMSUpstreamPatch = 0
)
View Source
const CMS_PACK_FLAGS_16BITS = 0x0000
View Source
const CMS_PACK_FLAGS_FLOAT = 0x0001
View Source
const CMS_PTR_ALIGNMENT = unsafe.Alignof(unsafe.Pointer(nil))

CMS_PTR_ALIGNMENT determines the pointer alignment for the platform For most architectures, this is equal to the size of a pointer.

View Source
const CmsMagicNumber = 0x61637370 // 'acsp'

Definitions in ICC spec

View Source
const DEFAULT_OBSERVER_ADAPTATION_STATE = 1.0

Constants

View Source
const ERR_THRESHOLD = 5
View Source
const INVERSION_MAX_ITERATIONS = 30
View Source
const JACOBIAN_EPSILON = 0.001
View Source
const LCMS_VERSION = 2150
View Source
const MATRIX_DET_TOLERANCE = 0.0001

Determinant lower than that are assumed zero (used on matrix invert)

View Source
const MAX_ENCODEABLE_XYZ = float64(1.0 + 32767.0/32768.0)

Maximum encodeable values in floating point

View Source
const MAX_ENCODEABLE_ab2 = float64((65535.0 / 256.0) - 128.0)
View Source
const MAX_ENCODEABLE_ab4 = float64(127.0)
View Source
const MAX_INPUT_DIMENSIONS = 15

Maximum input dimensions for interpolation

View Source
const MAX_MEMORY_FOR_ALLOC = 512 * 1024 * 1024 // 512MB

Maximum allowed memory allocation (equivalent to MAX_MEMORY_FOR_ALLOC in C)

View Source
const MAX_STAGE_CHANNELS = 128

Maximum of channels for internal pipeline evaluation

View Source
const MAX_TABLE_TAG = 100

cmsICCPROFILE represents the Go version of the C structure. Maximum supported tags in a profile

View Source
const MAX_TYPES_IN_LCMS_PLUGIN = 20

---------------------------------------------------------------------------------------------------------- Maximum number of types in a plugin array

View Source
const MIN_ENCODEABLE_ab2 = float64(-128.0)
View Source
const MIN_ENCODEABLE_ab4 = float64(-128.0)
View Source
const M_LOG10E = 0.434294481903251827651
View Source
const PRELINEARIZATION_POINTS = 4096
View Source
const SAMPLER_INSPECT = 0x01000000

Use this flag to prevent changes being written to destination

Variables

View Source
var (
	Device2PCS16 = []cmsTagSignature{
		CmsSigAToB0Tag,
		CmsSigAToB1Tag,
		CmsSigAToB2Tag,
		CmsSigAToB1Tag,
	}

	Device2PCSFloat = []cmsTagSignature{
		CmsSigDToB0Tag,
		CmsSigDToB1Tag,
		CmsSigDToB2Tag,
		CmsSigDToB3Tag,
	}

	PCS2Device16 = []cmsTagSignature{
		CmsSigBToA0Tag,
		CmsSigBToA1Tag,
		CmsSigBToA2Tag,
		CmsSigBToA1Tag,
	}

	PCS2DeviceFloat = []cmsTagSignature{
		CmsSigBToD0Tag,
		CmsSigBToD1Tag,
		CmsSigBToD2Tag,
		CmsSigBToD3Tag,
	}
)

LUT tags

View Source
var (
	GrayInputMatrix = []float64{
		InpAdj * cmsD50X,
		InpAdj * cmsD50Y,
		InpAdj * cmsD50Z,
	}

	OneToThreeInputMatrix = []float64{
		1, 1, 1,
	}

	PickYMatrix = []float64{
		0,
		OutpAdj * cmsD50Y,
		0,
	}

	PickLstarMatrix = []float64{
		1, 0, 0,
	}
)

Several resources for gray conversions

View Source
var (
	// Flags for pixel format
	ANYSPACE     = COLORSPACE_SH(31)
	ANYCHANNELS  = CHANNELS_SH(15)
	ANYEXTRA     = EXTRA_SH(7)
	ANYPLANAR    = PLANAR_SH(1)
	ANYENDIAN    = ENDIAN16_SH(1)
	ANYSWAP      = DOSWAP_SH(1)
	ANYSWAPFIRST = SWAPFIRST_SH(1)
	ANYFLAVOR    = FLAVOR_SH(1)
	ANYPREMUL    = PREMUL_SH(1)
)
View Source
var (
	TYPE_GRAY_8          = COLORSPACE_SH(PT_GRAY) | CHANNELS_SH(1) | BYTES_SH(1)
	TYPE_GRAY_8_REV      = COLORSPACE_SH(PT_GRAY) | CHANNELS_SH(1) | BYTES_SH(1) | FLAVOR_SH(1)
	TYPE_GRAY_16         = COLORSPACE_SH(PT_GRAY) | CHANNELS_SH(1) | BYTES_SH(2)
	TYPE_GRAY_16_REV     = COLORSPACE_SH(PT_GRAY) | CHANNELS_SH(1) | BYTES_SH(2) | FLAVOR_SH(1)
	TYPE_GRAY_16_SE      = COLORSPACE_SH(PT_GRAY) | CHANNELS_SH(1) | BYTES_SH(2) | ENDIAN16_SH(1)
	TYPE_GRAYA_8         = COLORSPACE_SH(PT_GRAY) | EXTRA_SH(1) | CHANNELS_SH(1) | BYTES_SH(1)
	TYPE_GRAYA_8_PREMUL  = COLORSPACE_SH(PT_GRAY) | EXTRA_SH(1) | CHANNELS_SH(1) | BYTES_SH(1) | PREMUL_SH(1)
	TYPE_GRAYA_16        = COLORSPACE_SH(PT_GRAY) | EXTRA_SH(1) | CHANNELS_SH(1) | BYTES_SH(2)
	TYPE_GRAYA_16_PREMUL = COLORSPACE_SH(PT_GRAY) | EXTRA_SH(1) | CHANNELS_SH(1) | BYTES_SH(2) | PREMUL_SH(1)
	TYPE_GRAYA_16_SE     = COLORSPACE_SH(PT_GRAY) | EXTRA_SH(1) | CHANNELS_SH(1) | BYTES_SH(2) | ENDIAN16_SH(1)
	TYPE_GRAYA_8_PLANAR  = COLORSPACE_SH(PT_GRAY) | EXTRA_SH(1) | CHANNELS_SH(1) | BYTES_SH(1) | PLANAR_SH(1)
	TYPE_GRAYA_16_PLANAR = COLORSPACE_SH(PT_GRAY) | EXTRA_SH(1) | CHANNELS_SH(1) | BYTES_SH(2) | PLANAR_SH(1)

	TYPE_RGB_8          = COLORSPACE_SH(PT_RGB) | CHANNELS_SH(3) | BYTES_SH(1)
	TYPE_RGB_8_PLANAR   = COLORSPACE_SH(PT_RGB) | CHANNELS_SH(3) | BYTES_SH(1) | PLANAR_SH(1)
	TYPE_BGR_8          = COLORSPACE_SH(PT_RGB) | CHANNELS_SH(3) | BYTES_SH(1) | DOSWAP_SH(1)
	TYPE_BGR_8_PLANAR   = COLORSPACE_SH(PT_RGB) | CHANNELS_SH(3) | BYTES_SH(1) | DOSWAP_SH(1) | PLANAR_SH(1)
	TYPE_RGB_16         = COLORSPACE_SH(PT_RGB) | CHANNELS_SH(3) | BYTES_SH(2)
	TYPE_RGB_16_PLANAR  = COLORSPACE_SH(PT_RGB) | CHANNELS_SH(3) | BYTES_SH(2) | PLANAR_SH(1)
	TYPE_RGB_16_SE      = COLORSPACE_SH(PT_RGB) | CHANNELS_SH(3) | BYTES_SH(2) | ENDIAN16_SH(1)
	TYPE_BGR_16         = COLORSPACE_SH(PT_RGB) | CHANNELS_SH(3) | BYTES_SH(2) | DOSWAP_SH(1)
	TYPE_BGR_16_PLANAR  = COLORSPACE_SH(PT_RGB) | CHANNELS_SH(3) | BYTES_SH(2) | DOSWAP_SH(1) | PLANAR_SH(1)
	TYPE_BGR_16_SE      = COLORSPACE_SH(PT_RGB) | CHANNELS_SH(3) | BYTES_SH(2) | DOSWAP_SH(1) | ENDIAN16_SH(1)
	TYPE_RGBA_8         = COLORSPACE_SH(PT_RGB) | EXTRA_SH(1) | CHANNELS_SH(3) | BYTES_SH(1)
	TYPE_RGBA_8_PREMUL  = COLORSPACE_SH(PT_RGB) | EXTRA_SH(1) | CHANNELS_SH(3) | BYTES_SH(1) | PREMUL_SH(1)
	TYPE_RGBA_8_PLANAR  = COLORSPACE_SH(PT_RGB) | EXTRA_SH(1) | CHANNELS_SH(3) | BYTES_SH(1) | PLANAR_SH(1)
	TYPE_RGBA_16        = COLORSPACE_SH(PT_RGB) | EXTRA_SH(1) | CHANNELS_SH(3) | BYTES_SH(2)
	TYPE_RGBA_16_PREMUL = COLORSPACE_SH(PT_RGB) | EXTRA_SH(1) | CHANNELS_SH(3) | BYTES_SH(2) | PREMUL_SH(1)
	TYPE_RGBA_16_PLANAR = COLORSPACE_SH(PT_RGB) | EXTRA_SH(1) | CHANNELS_SH(3) | BYTES_SH(2) | PLANAR_SH(1)
	TYPE_RGBA_16_SE     = COLORSPACE_SH(PT_RGB) | EXTRA_SH(1) | CHANNELS_SH(3) | BYTES_SH(2) | ENDIAN16_SH(1)

	TYPE_ARGB_8         = COLORSPACE_SH(PT_RGB) | EXTRA_SH(1) | CHANNELS_SH(3) | BYTES_SH(1) | SWAPFIRST_SH(1)
	TYPE_ARGB_8_PREMUL  = COLORSPACE_SH(PT_RGB) | EXTRA_SH(1) | CHANNELS_SH(3) | BYTES_SH(1) | SWAPFIRST_SH(1) | PREMUL_SH(1)
	TYPE_ARGB_16        = COLORSPACE_SH(PT_RGB) | EXTRA_SH(1) | CHANNELS_SH(3) | BYTES_SH(2) | SWAPFIRST_SH(1)
	TYPE_ARGB_16_PREMUL = COLORSPACE_SH(PT_RGB) | EXTRA_SH(1) | CHANNELS_SH(3) | BYTES_SH(2) | SWAPFIRST_SH(1) | PREMUL_SH(1)

	TYPE_CMY_8         = COLORSPACE_SH(PT_CMY) | CHANNELS_SH(3) | BYTES_SH(1)
	TYPE_CMY_8_PLANAR  = COLORSPACE_SH(PT_CMY) | CHANNELS_SH(3) | BYTES_SH(1) | PLANAR_SH(1)
	TYPE_CMY_16        = COLORSPACE_SH(PT_CMY) | CHANNELS_SH(3) | BYTES_SH(2)
	TYPE_CMY_16_PLANAR = COLORSPACE_SH(PT_CMY) | CHANNELS_SH(3) | BYTES_SH(2) | PLANAR_SH(1)
	TYPE_CMY_16_SE     = COLORSPACE_SH(PT_CMY) | CHANNELS_SH(3) | BYTES_SH(2) | ENDIAN16_SH(1)

	TYPE_CMYK_8         = COLORSPACE_SH(PT_CMYK) | CHANNELS_SH(4) | BYTES_SH(1)
	TYPE_CMYKA_8        = (PT_CMYK) | EXTRA_SH(1) | CHANNELS_SH(4) | BYTES_SH(1)
	TYPE_CMYK_8_REV     = COLORSPACE_SH(PT_CMYK) | CHANNELS_SH(4) | BYTES_SH(1) | FLAVOR_SH(1)
	TYPE_YUVK_8         = TYPE_CMYK_8_REV
	TYPE_CMYK_8_PLANAR  = COLORSPACE_SH(PT_CMYK) | CHANNELS_SH(4) | BYTES_SH(1) | PLANAR_SH(1)
	TYPE_CMYK_16        = COLORSPACE_SH(PT_CMYK) | CHANNELS_SH(4) | BYTES_SH(2)
	TYPE_CMYK_16_REV    = COLORSPACE_SH(PT_CMYK) | CHANNELS_SH(4) | BYTES_SH(2) | FLAVOR_SH(1)
	TYPE_YUVK_16        = TYPE_CMYK_16_REV
	TYPE_CMYK_16_PLANAR = COLORSPACE_SH(PT_CMYK) | CHANNELS_SH(4) | BYTES_SH(2) | PLANAR_SH(1)
	TYPE_CMYK_16_SE     = COLORSPACE_SH(PT_CMYK) | CHANNELS_SH(4) | BYTES_SH(2) | ENDIAN16_SH(1)

	TYPE_KYMC_8     = COLORSPACE_SH(PT_CMYK) | CHANNELS_SH(4) | BYTES_SH(1) | DOSWAP_SH(1)
	TYPE_KYMC_16    = COLORSPACE_SH(PT_CMYK) | CHANNELS_SH(4) | BYTES_SH(2) | DOSWAP_SH(1)
	TYPE_KYMC_16_SE = COLORSPACE_SH(PT_CMYK) | CHANNELS_SH(4) | BYTES_SH(2) | DOSWAP_SH(1) | ENDIAN16_SH(1)

	TYPE_KCMY_8      = COLORSPACE_SH(PT_CMYK) | CHANNELS_SH(4) | BYTES_SH(1) | SWAPFIRST_SH(1)
	TYPE_KCMY_8_REV  = COLORSPACE_SH(PT_CMYK) | CHANNELS_SH(4) | BYTES_SH(1) | FLAVOR_SH(1) | SWAPFIRST_SH(1)
	TYPE_KCMY_16     = COLORSPACE_SH(PT_CMYK) | CHANNELS_SH(4) | BYTES_SH(2) | SWAPFIRST_SH(1)
	TYPE_KCMY_16_REV = COLORSPACE_SH(PT_CMYK) | CHANNELS_SH(4) | BYTES_SH(2) | FLAVOR_SH(1) | SWAPFIRST_SH(1)
	TYPE_KCMY_16_SE  = COLORSPACE_SH(PT_CMYK) | CHANNELS_SH(4) | BYTES_SH(2) | ENDIAN16_SH(1) | SWAPFIRST_SH(1)

	TYPE_CMYK5_8         = COLORSPACE_SH(PT_MCH5) | CHANNELS_SH(5) | BYTES_SH(1)
	TYPE_CMYK5_16        = COLORSPACE_SH(PT_MCH5) | CHANNELS_SH(5) | BYTES_SH(2)
	TYPE_CMYK5_16_SE     = COLORSPACE_SH(PT_MCH5) | CHANNELS_SH(5) | BYTES_SH(2) | ENDIAN16_SH(1)
	TYPE_KYMC5_8         = COLORSPACE_SH(PT_MCH5) | CHANNELS_SH(5) | BYTES_SH(1) | DOSWAP_SH(1)
	TYPE_KYMC5_16        = COLORSPACE_SH(PT_MCH5) | CHANNELS_SH(5) | BYTES_SH(2) | DOSWAP_SH(1)
	TYPE_KYMC5_16_SE     = COLORSPACE_SH(PT_MCH5) | CHANNELS_SH(5) | BYTES_SH(2) | DOSWAP_SH(1) | ENDIAN16_SH(1)
	TYPE_CMYK6_8         = COLORSPACE_SH(PT_MCH6) | CHANNELS_SH(6) | BYTES_SH(1)
	TYPE_CMYK6_8_PLANAR  = COLORSPACE_SH(PT_MCH6) | CHANNELS_SH(6) | BYTES_SH(1) | PLANAR_SH(1)
	TYPE_CMYK6_16        = COLORSPACE_SH(PT_MCH6) | CHANNELS_SH(6) | BYTES_SH(2)
	TYPE_CMYK6_16_PLANAR = COLORSPACE_SH(PT_MCH6) | CHANNELS_SH(6) | BYTES_SH(2) | PLANAR_SH(1)
	TYPE_CMYK6_16_SE     = COLORSPACE_SH(PT_MCH6) | CHANNELS_SH(6) | BYTES_SH(2) | ENDIAN16_SH(1)
	TYPE_CMYK7_8         = COLORSPACE_SH(PT_MCH7) | CHANNELS_SH(7) | BYTES_SH(1)
	TYPE_CMYK7_16        = COLORSPACE_SH(PT_MCH7) | CHANNELS_SH(7) | BYTES_SH(2)
	TYPE_CMYK7_16_SE     = COLORSPACE_SH(PT_MCH7) | CHANNELS_SH(7) | BYTES_SH(2) | ENDIAN16_SH(1)
	TYPE_KYMC7_8         = COLORSPACE_SH(PT_MCH7) | CHANNELS_SH(7) | BYTES_SH(1) | DOSWAP_SH(1)
	TYPE_KYMC7_16        = COLORSPACE_SH(PT_MCH7) | CHANNELS_SH(7) | BYTES_SH(2) | DOSWAP_SH(1)
	TYPE_KYMC7_16_SE     = COLORSPACE_SH(PT_MCH7) | CHANNELS_SH(7) | BYTES_SH(2) | DOSWAP_SH(1) | ENDIAN16_SH(1)
	TYPE_CMYK8_8         = COLORSPACE_SH(PT_MCH8) | CHANNELS_SH(8) | BYTES_SH(1)
	TYPE_CMYK8_16        = COLORSPACE_SH(PT_MCH8) | CHANNELS_SH(8) | BYTES_SH(2)
	TYPE_CMYK8_16_SE     = COLORSPACE_SH(PT_MCH8) | CHANNELS_SH(8) | BYTES_SH(2) | ENDIAN16_SH(1)
	TYPE_KYMC8_8         = COLORSPACE_SH(PT_MCH8) | CHANNELS_SH(8) | BYTES_SH(1) | DOSWAP_SH(1)
	TYPE_KYMC8_16        = COLORSPACE_SH(PT_MCH8) | CHANNELS_SH(8) | BYTES_SH(2) | DOSWAP_SH(1)
	TYPE_KYMC8_16_SE     = COLORSPACE_SH(PT_MCH8) | CHANNELS_SH(8) | BYTES_SH(2) | DOSWAP_SH(1) | ENDIAN16_SH(1)
	TYPE_CMYK9_8         = COLORSPACE_SH(PT_MCH9) | CHANNELS_SH(9) | BYTES_SH(1)
	TYPE_CMYK9_16        = COLORSPACE_SH(PT_MCH9) | CHANNELS_SH(9) | BYTES_SH(2)
	TYPE_CMYK9_16_SE     = COLORSPACE_SH(PT_MCH9) | CHANNELS_SH(9) | BYTES_SH(2) | ENDIAN16_SH(1)
	TYPE_KYMC9_8         = COLORSPACE_SH(PT_MCH9) | CHANNELS_SH(9) | BYTES_SH(1) | DOSWAP_SH(1)
	TYPE_KYMC9_16        = COLORSPACE_SH(PT_MCH9) | CHANNELS_SH(9) | BYTES_SH(2) | DOSWAP_SH(1)
	TYPE_KYMC9_16_SE     = COLORSPACE_SH(PT_MCH9) | CHANNELS_SH(9) | BYTES_SH(2) | DOSWAP_SH(1) | ENDIAN16_SH(1)
	TYPE_CMYK10_8        = COLORSPACE_SH(PT_MCH10) | CHANNELS_SH(10) | BYTES_SH(1)
	TYPE_CMYK10_16       = COLORSPACE_SH(PT_MCH10) | CHANNELS_SH(10) | BYTES_SH(2)
	TYPE_CMYK10_16_SE    = COLORSPACE_SH(PT_MCH10) | CHANNELS_SH(10) | BYTES_SH(2) | ENDIAN16_SH(1)
	TYPE_KYMC10_8        = COLORSPACE_SH(PT_MCH10) | CHANNELS_SH(10) | BYTES_SH(1) | DOSWAP_SH(1)
	TYPE_KYMC10_16       = COLORSPACE_SH(PT_MCH10) | CHANNELS_SH(10) | BYTES_SH(2) | DOSWAP_SH(1)
	TYPE_KYMC10_16_SE    = COLORSPACE_SH(PT_MCH10) | CHANNELS_SH(10) | BYTES_SH(2) | DOSWAP_SH(1) | ENDIAN16_SH(1)
	TYPE_CMYK11_8        = COLORSPACE_SH(PT_MCH11) | CHANNELS_SH(11) | BYTES_SH(1)
	TYPE_CMYK11_16       = COLORSPACE_SH(PT_MCH11) | CHANNELS_SH(11) | BYTES_SH(2)
	TYPE_CMYK11_16_SE    = COLORSPACE_SH(PT_MCH11) | CHANNELS_SH(11) | BYTES_SH(2) | ENDIAN16_SH(1)
	TYPE_KYMC11_8        = COLORSPACE_SH(PT_MCH11) | CHANNELS_SH(11) | BYTES_SH(1) | DOSWAP_SH(1)
	TYPE_KYMC11_16       = COLORSPACE_SH(PT_MCH11) | CHANNELS_SH(11) | BYTES_SH(2) | DOSWAP_SH(1)
	TYPE_KYMC11_16_SE    = COLORSPACE_SH(PT_MCH11) | CHANNELS_SH(11) | BYTES_SH(2) | DOSWAP_SH(1) | ENDIAN16_SH(1)
	TYPE_CMYK12_8        = COLORSPACE_SH(PT_MCH12) | CHANNELS_SH(12) | BYTES_SH(1)
	TYPE_CMYK12_16       = COLORSPACE_SH(PT_MCH12) | CHANNELS_SH(12) | BYTES_SH(2)
	TYPE_CMYK12_16_SE    = COLORSPACE_SH(PT_MCH12) | CHANNELS_SH(12) | BYTES_SH(2) | ENDIAN16_SH(1)
	TYPE_KYMC12_8        = COLORSPACE_SH(PT_MCH12) | CHANNELS_SH(12) | BYTES_SH(1) | DOSWAP_SH(1)
	TYPE_KYMC12_16       = COLORSPACE_SH(PT_MCH12) | CHANNELS_SH(12) | BYTES_SH(2) | DOSWAP_SH(1)
	TYPE_KYMC12_16_SE    = COLORSPACE_SH(PT_MCH12) | CHANNELS_SH(12) | BYTES_SH(2) | DOSWAP_SH(1) | ENDIAN16_SH(1)

	// Colorimetric
	TYPE_XYZ_16  = COLORSPACE_SH(PT_XYZ) | CHANNELS_SH(3) | BYTES_SH(2)
	TYPE_Lab_8   = COLORSPACE_SH(PT_Lab) | CHANNELS_SH(3) | BYTES_SH(1)
	TYPE_LabV2_8 = COLORSPACE_SH(PT_LabV2) | CHANNELS_SH(3) | BYTES_SH(1)

	TYPE_ALab_8   = COLORSPACE_SH(PT_Lab) | CHANNELS_SH(3) | BYTES_SH(1) | EXTRA_SH(1) | SWAPFIRST_SH(1)
	TYPE_ALabV2_8 = COLORSPACE_SH(PT_LabV2) | CHANNELS_SH(3) | BYTES_SH(1) | EXTRA_SH(1) | SWAPFIRST_SH(1)
	TYPE_Lab_16   = COLORSPACE_SH(PT_Lab) | CHANNELS_SH(3) | BYTES_SH(2)
	TYPE_LabV2_16 = COLORSPACE_SH(PT_LabV2) | CHANNELS_SH(3) | BYTES_SH(2)
	TYPE_Yxy_16   = COLORSPACE_SH(PT_Yxy) | CHANNELS_SH(3) | BYTES_SH(2)

	// YCbCr
	TYPE_YCbCr_8         = COLORSPACE_SH(PT_YCbCr) | CHANNELS_SH(3) | BYTES_SH(1)
	TYPE_YCbCr_8_PLANAR  = COLORSPACE_SH(PT_YCbCr) | CHANNELS_SH(3) | BYTES_SH(1) | PLANAR_SH(1)
	TYPE_YCbCr_16        = COLORSPACE_SH(PT_YCbCr) | CHANNELS_SH(3) | BYTES_SH(2)
	TYPE_YCbCr_16_PLANAR = COLORSPACE_SH(PT_YCbCr) | CHANNELS_SH(3) | BYTES_SH(2) | PLANAR_SH(1)
	TYPE_YCbCr_16_SE     = COLORSPACE_SH(PT_YCbCr) | CHANNELS_SH(3) | BYTES_SH(2) | ENDIAN16_SH(1)

	// YUV
	TYPE_YUV_8         = COLORSPACE_SH(PT_YUV) | CHANNELS_SH(3) | BYTES_SH(1)
	TYPE_YUV_8_PLANAR  = COLORSPACE_SH(PT_YUV) | CHANNELS_SH(3) | BYTES_SH(1) | PLANAR_SH(1)
	TYPE_YUV_16        = COLORSPACE_SH(PT_YUV) | CHANNELS_SH(3) | BYTES_SH(2)
	TYPE_YUV_16_PLANAR = COLORSPACE_SH(PT_YUV) | CHANNELS_SH(3) | BYTES_SH(2) | PLANAR_SH(1)
	TYPE_YUV_16_SE     = COLORSPACE_SH(PT_YUV) | CHANNELS_SH(3) | BYTES_SH(2) | ENDIAN16_SH(1)

	// HLS
	TYPE_HLS_8         = COLORSPACE_SH(PT_HLS) | CHANNELS_SH(3) | BYTES_SH(1)
	TYPE_HLS_8_PLANAR  = COLORSPACE_SH(PT_HLS) | CHANNELS_SH(3) | BYTES_SH(1) | PLANAR_SH(1)
	TYPE_HLS_16        = COLORSPACE_SH(PT_HLS) | CHANNELS_SH(3) | BYTES_SH(2)
	TYPE_HLS_16_PLANAR = COLORSPACE_SH(PT_HLS) | CHANNELS_SH(3) | BYTES_SH(2) | PLANAR_SH(1)
	TYPE_HLS_16_SE     = COLORSPACE_SH(PT_HLS) | CHANNELS_SH(3) | BYTES_SH(2) | ENDIAN16_SH(1)

	// HSV
	TYPE_HSV_8         = COLORSPACE_SH(PT_HSV) | CHANNELS_SH(3) | BYTES_SH(1)
	TYPE_HSV_8_PLANAR  = COLORSPACE_SH(PT_HSV) | CHANNELS_SH(3) | BYTES_SH(1) | PLANAR_SH(1)
	TYPE_HSV_16        = COLORSPACE_SH(PT_HSV) | CHANNELS_SH(3) | BYTES_SH(2)
	TYPE_HSV_16_PLANAR = COLORSPACE_SH(PT_HSV) | CHANNELS_SH(3) | BYTES_SH(2) | PLANAR_SH(1)
	TYPE_HSV_16_SE     = COLORSPACE_SH(PT_HSV) | CHANNELS_SH(3) | BYTES_SH(2) | ENDIAN16_SH(1)
)

Define constants using the shift macros

View Source
var (
	TYPE_XYZ_FLT          = FLOAT_SH(1) | COLORSPACE_SH(PT_XYZ) | CHANNELS_SH(3) | BYTES_SH(4)
	TYPE_Lab_FLT          = FLOAT_SH(1) | COLORSPACE_SH(PT_Lab) | CHANNELS_SH(3) | BYTES_SH(4)
	TYPE_LabA_FLT         = FLOAT_SH(1) | COLORSPACE_SH(PT_Lab) | EXTRA_SH(1) | CHANNELS_SH(3) | BYTES_SH(4)
	TYPE_GRAY_FLT         = FLOAT_SH(1) | COLORSPACE_SH(PT_GRAY) | CHANNELS_SH(1) | BYTES_SH(4)
	TYPE_GRAYA_FLT        = FLOAT_SH(1) | COLORSPACE_SH(PT_GRAY) | CHANNELS_SH(1) | BYTES_SH(4) | EXTRA_SH(1)
	TYPE_GRAYA_FLT_PREMUL = FLOAT_SH(1) | COLORSPACE_SH(PT_GRAY) | CHANNELS_SH(1) | BYTES_SH(4) | EXTRA_SH(1) | PREMUL_SH(1)
	TYPE_RGB_FLT          = FLOAT_SH(1) | COLORSPACE_SH(PT_RGB) | CHANNELS_SH(3) | BYTES_SH(4)

	TYPE_RGBA_FLT        = FLOAT_SH(1) | COLORSPACE_SH(PT_RGB) | EXTRA_SH(1) | CHANNELS_SH(3) | BYTES_SH(4)
	TYPE_RGBA_FLT_PREMUL = FLOAT_SH(1) | COLORSPACE_SH(PT_RGB) | EXTRA_SH(1) | CHANNELS_SH(3) | BYTES_SH(4) | PREMUL_SH(1)
	TYPE_ARGB_FLT        = FLOAT_SH(1) | COLORSPACE_SH(PT_RGB) | EXTRA_SH(1) | CHANNELS_SH(3) | BYTES_SH(4) | SWAPFIRST_SH(1)
	TYPE_ARGB_FLT_PREMUL = FLOAT_SH(1) | COLORSPACE_SH(PT_RGB) | EXTRA_SH(1) | CHANNELS_SH(3) | BYTES_SH(4) | SWAPFIRST_SH(1) | PREMUL_SH(1)
	TYPE_BGR_FLT         = FLOAT_SH(1) | COLORSPACE_SH(PT_RGB) | CHANNELS_SH(3) | BYTES_SH(4) | DOSWAP_SH(1)
	TYPE_BGRA_FLT        = FLOAT_SH(1) | COLORSPACE_SH(PT_RGB) | EXTRA_SH(1) | CHANNELS_SH(3) | BYTES_SH(4) | DOSWAP_SH(1) | SWAPFIRST_SH(1)
	TYPE_BGRA_FLT_PREMUL = FLOAT_SH(1) | COLORSPACE_SH(PT_RGB) | EXTRA_SH(1) | CHANNELS_SH(3) | BYTES_SH(4) | DOSWAP_SH(1) | SWAPFIRST_SH(1) | PREMUL_SH(1)
	TYPE_ABGR_FLT        = FLOAT_SH(1) | COLORSPACE_SH(PT_RGB) | EXTRA_SH(1) | CHANNELS_SH(3) | BYTES_SH(4) | DOSWAP_SH(1)
	TYPE_ABGR_FLT_PREMUL = FLOAT_SH(1) | COLORSPACE_SH(PT_RGB) | EXTRA_SH(1) | CHANNELS_SH(3) | BYTES_SH(4) | DOSWAP_SH(1) | PREMUL_SH(1)

	TYPE_CMYK_FLT = FLOAT_SH(1) | COLORSPACE_SH(PT_CMYK) | CHANNELS_SH(4) | BYTES_SH(4)
)

Float formatters

View Source
var (
	TYPE_XYZ_DBL  = FLOAT_SH(1) | COLORSPACE_SH(PT_XYZ) | CHANNELS_SH(3) | BYTES_SH(0)
	TYPE_Lab_DBL  = FLOAT_SH(1) | COLORSPACE_SH(PT_Lab) | CHANNELS_SH(3) | BYTES_SH(0)
	TYPE_GRAY_DBL = FLOAT_SH(1) | COLORSPACE_SH(PT_GRAY) | CHANNELS_SH(1) | BYTES_SH(0)
	TYPE_RGB_DBL  = FLOAT_SH(1) | COLORSPACE_SH(PT_RGB) | CHANNELS_SH(3) | BYTES_SH(0)
	TYPE_BGR_DBL  = FLOAT_SH(1) | COLORSPACE_SH(PT_RGB) | CHANNELS_SH(3) | BYTES_SH(0) | DOSWAP_SH(1)
	TYPE_CMYK_DBL = FLOAT_SH(1) | COLORSPACE_SH(PT_CMYK) | CHANNELS_SH(4) | BYTES_SH(0)
)

Floating point formatters

View Source
var (
	TYPE_GRAY_HALF_FLT = FLOAT_SH(1) | COLORSPACE_SH(PT_GRAY) | CHANNELS_SH(1) | BYTES_SH(2)
	TYPE_RGB_HALF_FLT  = FLOAT_SH(1) | COLORSPACE_SH(PT_RGB) | CHANNELS_SH(3) | BYTES_SH(2)
	TYPE_RGBA_HALF_FLT = FLOAT_SH(1) | COLORSPACE_SH(PT_RGB) | EXTRA_SH(1) | CHANNELS_SH(3) | BYTES_SH(2)
	TYPE_CMYK_HALF_FLT = FLOAT_SH(1) | COLORSPACE_SH(PT_CMYK) | CHANNELS_SH(4) | BYTES_SH(2)

	TYPE_ARGB_HALF_FLT = FLOAT_SH(1) | COLORSPACE_SH(PT_RGB) | EXTRA_SH(1) | CHANNELS_SH(3) | BYTES_SH(2) | SWAPFIRST_SH(1)
	TYPE_BGR_HALF_FLT  = FLOAT_SH(1) | COLORSPACE_SH(PT_RGB) | CHANNELS_SH(3) | BYTES_SH(2) | DOSWAP_SH(1)
	TYPE_BGRA_HALF_FLT = FLOAT_SH(1) | COLORSPACE_SH(PT_RGB) | EXTRA_SH(1) | CHANNELS_SH(3) | BYTES_SH(2) | DOSWAP_SH(1) | SWAPFIRST_SH(1)
	TYPE_ABGR_HALF_FLT = FLOAT_SH(1) | COLORSPACE_SH(PT_RGB) | CHANNELS_SH(3) | BYTES_SH(2) | DOSWAP_SH(1)
)

IEEE 754-2008 "half"

View Source
var Base = []uint16{}/* 512 elements not displayed */
View Source
var DEFAULT_ALARM_CODES_VALUE = [cmsMAXCHANNELS]uint16{0x7F00, 0x7F00, 0x7F00, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
View Source
var DOUBLE_TO_1FIXED14 = func(x float64) cmsS1Fixed14Number {
	return cmsS1Fixed14Number(math.Floor(x*16384.0 + 0.5))
}
View Source
var DefaultCurves = cmsParametricCurvesCollection{
	NFunctions:     10,
	FunctionTypes:  [MAX_TYPES_IN_LCMS_PLUGIN]uint32{1, 2, 3, 4, 5, 6, 7, 8, 108, 109},
	ParameterCount: [MAX_TYPES_IN_LCMS_PLUGIN]uint32{1, 3, 4, 5, 7, 4, 5, 5, 1, 1},
	Evaluator:      DefaultEvalParametricFn,
	Next:           nil,
}

The built-in list

View Source
var DefaultIntents []cmsIntentsList
View Source
var DefaultOptimization []cmsOptimizationCollection
View Source
var Exponent = []uint32{
	0x00000000, 0x00800000, 0x01000000, 0x01800000, 0x02000000, 0x02800000,
	0x03000000, 0x03800000, 0x04000000, 0x04800000, 0x05000000, 0x05800000,
	0x06000000, 0x06800000, 0x07000000, 0x07800000, 0x08000000, 0x08800000,
	0x09000000, 0x09800000, 0x0a000000, 0x0a800000, 0x0b000000, 0x0b800000,
	0x0c000000, 0x0c800000, 0x0d000000, 0x0d800000, 0x0e000000, 0x0e800000,
	0x0f000000, 0x47800000, 0x80000000, 0x80800000, 0x81000000, 0x81800000,
	0x82000000, 0x82800000, 0x83000000, 0x83800000, 0x84000000, 0x84800000,
	0x85000000, 0x85800000, 0x86000000, 0x86800000, 0x87000000, 0x87800000,
	0x88000000, 0x88800000, 0x89000000, 0x89800000, 0x8a000000, 0x8a800000,
	0x8b000000, 0x8b800000, 0x8c000000, 0x8c800000, 0x8d000000, 0x8d800000,
	0x8e000000, 0x8e800000, 0x8f000000, 0xc7800000}
View Source
var FormatterAlpha = [6][6]cmsFormatterAlphaFn{
	{copy8, from8to16, from8to16SE, from8toHLF, from8toFLT, from8toDBL},
	{from16to8, copy16, from16to16, from16toHLF, from16toFLT, from16toDBL},
	{from16SEto8, from16to16, copy16, from16SEtoHLF, from16SEtoFLT, from16SEtoDBL},
	{fromHLFto8, fromHLFto16, fromHLFto16SE, copy16, fromHLFtoFLT, fromHLFtoDBL},
	{fromFLTto8, fromFLTto16, fromFLTto16SE, fromFLTtoHLF, copy32, fromFLTtoDBL},
	{fromDBLto8, fromDBLto16, fromDBLto16SE, fromDBLtoHLF, fromDBLtoFLT, copy64},
}

FormatterAlpha is a static array of functions

View Source
var InputFormatters16 = []cmsFormatters16{
	{Type: TYPE_Lab_DBL, Mask: ANYPLANAR | ANYEXTRA, Frm: UnrollLabDoubleTo16},
	{Type: TYPE_XYZ_DBL, Mask: ANYPLANAR | ANYEXTRA, Frm: UnrollXYZDoubleTo16},
	{Type: TYPE_Lab_FLT, Mask: ANYPLANAR | ANYEXTRA, Frm: UnrollLabFloatTo16},
	{Type: TYPE_XYZ_FLT, Mask: ANYPLANAR | ANYEXTRA, Frm: UnrollXYZFloatTo16},
	{Type: TYPE_GRAY_DBL, Mask: 0, Frm: UnrollDouble1Chan},
	{Type: FLOAT_SH(1) | BYTES_SH(0), Mask: ANYCHANNELS | ANYPLANAR | ANYSWAPFIRST | ANYFLAVOR | ANYSWAP | ANYEXTRA | ANYSPACE, Frm: UnrollDoubleTo16},
	{Type: FLOAT_SH(1) | BYTES_SH(4), Mask: ANYCHANNELS | ANYPLANAR | ANYSWAPFIRST | ANYFLAVOR | ANYSWAP | ANYEXTRA | ANYSPACE, Frm: UnrollFloatTo16},

	{Type: FLOAT_SH(1) | BYTES_SH(2), Mask: ANYCHANNELS | ANYPLANAR | ANYSWAPFIRST | ANYFLAVOR | ANYEXTRA | ANYSWAP | ANYSPACE, Frm: UnrollHalfTo16},
	{Type: CHANNELS_SH(1) | BYTES_SH(1), Mask: ANYSPACE, Frm: Unroll1Byte},
	{Type: CHANNELS_SH(1) | BYTES_SH(1) | EXTRA_SH(1), Mask: ANYSPACE, Frm: Unroll1ByteSkip1},
	{Type: CHANNELS_SH(1) | BYTES_SH(1) | EXTRA_SH(2), Mask: ANYSPACE, Frm: Unroll1ByteSkip2},
	{Type: CHANNELS_SH(1) | BYTES_SH(1) | FLAVOR_SH(1), Mask: ANYSPACE, Frm: Unroll1ByteReversed},
	{Type: COLORSPACE_SH(PT_MCH2) | CHANNELS_SH(2) | BYTES_SH(1), Mask: 0, Frm: Unroll2Bytes},
	{Type: TYPE_LabV2_8, Mask: 0, Frm: UnrollLabV2_8},
	{Type: TYPE_ALabV2_8, Mask: 0, Frm: UnrollALabV2_8},
	{Type: TYPE_LabV2_16, Mask: 0, Frm: UnrollLabV2_16},
	{Type: CHANNELS_SH(3) | BYTES_SH(1), Mask: ANYSPACE, Frm: Unroll3Bytes},
	{Type: CHANNELS_SH(3) | BYTES_SH(1) | DOSWAP_SH(1), Mask: ANYSPACE, Frm: Unroll3BytesSwap},
	{Type: CHANNELS_SH(3) | EXTRA_SH(1) | BYTES_SH(1) | DOSWAP_SH(1), Mask: ANYSPACE, Frm: Unroll3BytesSkip1Swap},
	{Type: CHANNELS_SH(3) | EXTRA_SH(1) | BYTES_SH(1) | SWAPFIRST_SH(1), Mask: ANYSPACE, Frm: Unroll3BytesSkip1SwapFirst},
	{Type: CHANNELS_SH(3) | EXTRA_SH(1) | BYTES_SH(1) | DOSWAP_SH(1) | SWAPFIRST_SH(1), Mask: ANYSPACE, Frm: Unroll3BytesSkip1SwapSwapFirst},
	{Type: CHANNELS_SH(4) | BYTES_SH(1), Mask: ANYSPACE, Frm: Unroll4Bytes},
	{Type: CHANNELS_SH(4) | BYTES_SH(1) | FLAVOR_SH(1), Mask: ANYSPACE, Frm: Unroll4BytesReverse},
	{Type: CHANNELS_SH(4) | BYTES_SH(1) | SWAPFIRST_SH(1), Mask: ANYSPACE, Frm: Unroll4BytesSwapFirst},
	{Type: CHANNELS_SH(4) | BYTES_SH(1) | DOSWAP_SH(1), Mask: ANYSPACE, Frm: Unroll4BytesSwap},
	{Type: CHANNELS_SH(4) | BYTES_SH(1) | DOSWAP_SH(1) | SWAPFIRST_SH(1), Mask: ANYSPACE, Frm: Unroll4BytesSwapSwapFirst},
	{Type: BYTES_SH(1) | PLANAR_SH(1), Mask: ANYFLAVOR | ANYSWAPFIRST | ANYPREMUL | ANYSWAP | ANYEXTRA | ANYCHANNELS | ANYSPACE, Frm: UnrollPlanarBytes},
	{Type: BYTES_SH(1), Mask: ANYFLAVOR | ANYSWAPFIRST | ANYSWAP | ANYPREMUL | ANYEXTRA | ANYCHANNELS | ANYSPACE, Frm: UnrollChunkyBytes},
	{Type: CHANNELS_SH(1) | BYTES_SH(2), Mask: ANYSPACE, Frm: Unroll1Word},
	{Type: CHANNELS_SH(1) | BYTES_SH(2) | FLAVOR_SH(1), Mask: ANYSPACE, Frm: Unroll1WordReversed},
	{Type: CHANNELS_SH(1) | BYTES_SH(2) | EXTRA_SH(3), Mask: ANYSPACE, Frm: Unroll1WordSkip3},
	{Type: CHANNELS_SH(2) | BYTES_SH(2), Mask: ANYSPACE, Frm: Unroll2Words},
	{Type: CHANNELS_SH(3) | BYTES_SH(2), Mask: ANYSPACE, Frm: Unroll3Words},
	{Type: CHANNELS_SH(4) | BYTES_SH(2), Mask: ANYSPACE, Frm: Unroll4Words},
	{Type: CHANNELS_SH(3) | BYTES_SH(2) | DOSWAP_SH(1), Mask: ANYSPACE, Frm: Unroll3WordsSwap},
	{Type: CHANNELS_SH(3) | BYTES_SH(2) | EXTRA_SH(1) | SWAPFIRST_SH(1), Mask: ANYSPACE, Frm: Unroll3WordsSkip1SwapFirst},
	{Type: CHANNELS_SH(3) | BYTES_SH(2) | EXTRA_SH(1) | DOSWAP_SH(1), Mask: ANYSPACE, Frm: Unroll3WordsSkip1Swap},
	{Type: CHANNELS_SH(4) | BYTES_SH(2) | FLAVOR_SH(1), Mask: ANYSPACE, Frm: Unroll4WordsReverse},
	{Type: CHANNELS_SH(4) | BYTES_SH(2) | SWAPFIRST_SH(1), Mask: ANYSPACE, Frm: Unroll4WordsSwapFirst},
	{Type: CHANNELS_SH(4) | BYTES_SH(2) | DOSWAP_SH(1), Mask: ANYSPACE, Frm: Unroll4WordsSwap},
	{Type: CHANNELS_SH(4) | BYTES_SH(2) | DOSWAP_SH(1) | SWAPFIRST_SH(1), Mask: ANYSPACE, Frm: Unroll4WordsSwapSwapFirst},
	{Type: BYTES_SH(2) | PLANAR_SH(1), Mask: ANYFLAVOR | ANYSWAP | ANYENDIAN | ANYEXTRA | ANYCHANNELS | ANYSPACE, Frm: UnrollPlanarWords},
	{Type: BYTES_SH(2), Mask: ANYFLAVOR | ANYSWAPFIRST | ANYSWAP | ANYENDIAN | ANYEXTRA | ANYCHANNELS | ANYSPACE, Frm: UnrollAnyWords},
	{Type: BYTES_SH(2) | PLANAR_SH(1), Mask: ANYFLAVOR | ANYSWAP | ANYENDIAN | ANYEXTRA | ANYCHANNELS | ANYSPACE | PREMUL_SH(1), Frm: UnrollPlanarWordsPremul},
	{Type: BYTES_SH(2), Mask: ANYFLAVOR | ANYSWAPFIRST | ANYSWAP | ANYENDIAN | ANYEXTRA | ANYCHANNELS | ANYSPACE | PREMUL_SH(1), Frm: UnrollAnyWordsPremul},
}

InputFormatters16 is the table of 16-bit input formatters

Define the `InputFormattersFloat` array.

View Source
var Mantissa = []uint32{}/* 2048 elements not displayed */
View Source
var NISO = len(isotempdata)

Constants

View Source
var Offset = []uint16{
	0x0000, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400,
	0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400,
	0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400,
	0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400,
	0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400,
	0x0400, 0x0400, 0x0000, 0x0400, 0x0400, 0x0400,
	0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400,
	0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400,
	0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400,
	0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400,
	0x0400, 0x0400, 0x0400, 0x0400}
View Source
var OutputFormatters16 = []cmsFormatters16{
	{Type: TYPE_Lab_DBL, Mask: ANYPLANAR | ANYEXTRA, Frm: PackLabDoubleFrom16},
	{Type: TYPE_XYZ_DBL, Mask: ANYPLANAR | ANYEXTRA, Frm: PackXYZDoubleFrom16},
	{Type: TYPE_Lab_FLT, Mask: ANYPLANAR | ANYEXTRA, Frm: PackLabFloatFrom16},
	{Type: TYPE_XYZ_FLT, Mask: ANYPLANAR | ANYEXTRA, Frm: PackXYZFloatFrom16},
	{Type: FLOAT_SH(1) | BYTES_SH(0), Mask: ANYFLAVOR | ANYSWAPFIRST | ANYSWAP |
		ANYCHANNELS | ANYPLANAR | ANYEXTRA | ANYSPACE, Frm: PackDoubleFrom16},
	{Type: FLOAT_SH(1) | BYTES_SH(4), Mask: ANYFLAVOR | ANYSWAPFIRST | ANYSWAP |
		ANYCHANNELS | ANYPLANAR | ANYEXTRA | ANYSPACE, Frm: PackFloatFrom16},
	{Type: FLOAT_SH(1) | BYTES_SH(2), Mask: ANYFLAVOR | ANYSWAPFIRST | ANYSWAP |
		ANYCHANNELS | ANYPLANAR | ANYEXTRA | ANYSPACE, Frm: PackHalfFrom16},
	{Type: CHANNELS_SH(1) | BYTES_SH(1), Mask: ANYSPACE, Frm: Pack1Byte},
	{Type: CHANNELS_SH(1) | BYTES_SH(1) | EXTRA_SH(1), Mask: ANYSPACE, Frm: Pack1ByteSkip1},
	{Type: CHANNELS_SH(1) | BYTES_SH(1) | EXTRA_SH(1) | SWAPFIRST_SH(1), Mask: ANYSPACE, Frm: Pack1ByteSkip1SwapFirst},
	{Type: CHANNELS_SH(1) | BYTES_SH(1) | FLAVOR_SH(1), Mask: ANYSPACE, Frm: Pack1ByteReversed},
	{Type: TYPE_LabV2_8, Mask: 0, Frm: PackLabV2_8},
	{Type: TYPE_ALabV2_8, Mask: 0, Frm: PackALabV2_8},
	{Type: TYPE_LabV2_16, Mask: 0, Frm: PackLabV2_16},
	{Type: CHANNELS_SH(3) | BYTES_SH(1) | OPTIMIZED_SH(1), Mask: ANYSPACE, Frm: Pack3BytesOptimized},
	{Type: CHANNELS_SH(3) | BYTES_SH(1) | EXTRA_SH(1) | OPTIMIZED_SH(1), Mask: ANYSPACE, Frm: Pack3BytesAndSkip1Optimized},
	{Type: CHANNELS_SH(3) | BYTES_SH(1) | EXTRA_SH(1) | SWAPFIRST_SH(1) | OPTIMIZED_SH(1),
		Mask: ANYSPACE, Frm: Pack3BytesAndSkip1SwapFirstOptimized},
	{Type: CHANNELS_SH(3) | BYTES_SH(1) | EXTRA_SH(1) | DOSWAP_SH(1) | SWAPFIRST_SH(1) | OPTIMIZED_SH(1),
		Mask: ANYSPACE, Frm: Pack3BytesAndSkip1SwapSwapFirstOptimized},
	{Type: CHANNELS_SH(3) | BYTES_SH(1) | DOSWAP_SH(1) | EXTRA_SH(1) | OPTIMIZED_SH(1),
		Mask: ANYSPACE, Frm: Pack3BytesAndSkip1SwapOptimized},
	{Type: CHANNELS_SH(3) | BYTES_SH(1) | DOSWAP_SH(1) | OPTIMIZED_SH(1), Mask: ANYSPACE, Frm: Pack3BytesSwapOptimized},
	{Type: CHANNELS_SH(3) | BYTES_SH(1), Mask: ANYSPACE, Frm: Pack3Bytes},
	{Type: CHANNELS_SH(3) | BYTES_SH(1) | EXTRA_SH(1), Mask: ANYSPACE, Frm: Pack3BytesAndSkip1},
	{Type: CHANNELS_SH(3) | BYTES_SH(1) | EXTRA_SH(1) | SWAPFIRST_SH(1), Mask: ANYSPACE, Frm: Pack3BytesAndSkip1SwapFirst},
	{Type: CHANNELS_SH(3) | BYTES_SH(1) | EXTRA_SH(1) | DOSWAP_SH(1) | SWAPFIRST_SH(1),
		Mask: ANYSPACE, Frm: Pack3BytesAndSkip1SwapSwapFirst},
	{Type: CHANNELS_SH(3) | BYTES_SH(1) | DOSWAP_SH(1) | EXTRA_SH(1), Mask: ANYSPACE, Frm: Pack3BytesAndSkip1Swap},
	{Type: CHANNELS_SH(3) | BYTES_SH(1) | DOSWAP_SH(1), Mask: ANYSPACE, Frm: Pack3BytesSwap},
	{Type: CHANNELS_SH(4) | BYTES_SH(1), Mask: ANYSPACE, Frm: Pack4Bytes},
	{Type: CHANNELS_SH(4) | BYTES_SH(1) | FLAVOR_SH(1), Mask: ANYSPACE, Frm: Pack4BytesReverse},
	{Type: CHANNELS_SH(4) | BYTES_SH(1) | SWAPFIRST_SH(1), Mask: ANYSPACE, Frm: Pack4BytesSwapFirst},
	{Type: CHANNELS_SH(4) | BYTES_SH(1) | DOSWAP_SH(1), Mask: ANYSPACE, Frm: Pack4BytesSwap},
	{Type: CHANNELS_SH(4) | BYTES_SH(1) | DOSWAP_SH(1) | SWAPFIRST_SH(1), Mask: ANYSPACE, Frm: Pack4BytesSwapSwapFirst},
	{Type: CHANNELS_SH(6) | BYTES_SH(1), Mask: ANYSPACE, Frm: Pack6Bytes},
	{Type: CHANNELS_SH(6) | BYTES_SH(1) | DOSWAP_SH(1), Mask: ANYSPACE, Frm: Pack6BytesSwap},
	{Type: BYTES_SH(1), Mask: ANYFLAVOR | ANYSWAPFIRST | ANYSWAP | ANYEXTRA | ANYCHANNELS | ANYSPACE | ANYPREMUL,
		Frm: PackChunkyBytes},
	{Type: BYTES_SH(1) | PLANAR_SH(1), Mask: ANYFLAVOR | ANYSWAPFIRST | ANYSWAP | ANYEXTRA | ANYCHANNELS | ANYSPACE | ANYPREMUL,
		Frm: PackPlanarBytes},
	{Type: CHANNELS_SH(1) | BYTES_SH(2), Mask: ANYSPACE, Frm: Pack1Word},
	{Type: CHANNELS_SH(1) | BYTES_SH(2) | EXTRA_SH(1), Mask: ANYSPACE, Frm: Pack1WordSkip1},
	{Type: CHANNELS_SH(1) | BYTES_SH(2) | EXTRA_SH(1) | SWAPFIRST_SH(1), Mask: ANYSPACE, Frm: Pack1WordSkip1SwapFirst},
	{Type: CHANNELS_SH(1) | BYTES_SH(2) | FLAVOR_SH(1), Mask: ANYSPACE, Frm: Pack1WordReversed},
	{Type: CHANNELS_SH(1) | BYTES_SH(2) | ENDIAN16_SH(1), Mask: ANYSPACE, Frm: Pack1WordBigEndian},
	{Type: CHANNELS_SH(3) | BYTES_SH(2), Mask: ANYSPACE, Frm: Pack3Words},
	{Type: CHANNELS_SH(3) | BYTES_SH(2) | DOSWAP_SH(1), Mask: ANYSPACE, Frm: Pack3WordsSwap},
	{Type: CHANNELS_SH(3) | BYTES_SH(2) | ENDIAN16_SH(1), Mask: ANYSPACE, Frm: Pack3WordsBigEndian},
	{Type: CHANNELS_SH(3) | BYTES_SH(2) | EXTRA_SH(1), Mask: ANYSPACE, Frm: Pack3WordsAndSkip1},
	{Type: CHANNELS_SH(3) | BYTES_SH(2) | EXTRA_SH(1) | DOSWAP_SH(1), Mask: ANYSPACE, Frm: Pack3WordsAndSkip1Swap},
	{Type: CHANNELS_SH(3) | BYTES_SH(2) | EXTRA_SH(1) | SWAPFIRST_SH(1), Mask: ANYSPACE, Frm: Pack3WordsAndSkip1SwapFirst},
	{Type: CHANNELS_SH(3) | BYTES_SH(2) | EXTRA_SH(1) | DOSWAP_SH(1) | SWAPFIRST_SH(1), Mask: ANYSPACE, Frm: Pack3WordsAndSkip1SwapSwapFirst},
	{Type: CHANNELS_SH(4) | BYTES_SH(2), Mask: ANYSPACE, Frm: Pack4Words},
	{Type: CHANNELS_SH(4) | BYTES_SH(2) | FLAVOR_SH(1), Mask: ANYSPACE, Frm: Pack4WordsReverse},
	{Type: CHANNELS_SH(4) | BYTES_SH(2) | DOSWAP_SH(1), Mask: ANYSPACE, Frm: Pack4WordsSwap},
	{Type: CHANNELS_SH(4) | BYTES_SH(2) | ENDIAN16_SH(1), Mask: ANYSPACE, Frm: Pack4WordsBigEndian},
	{Type: CHANNELS_SH(6) | BYTES_SH(2), Mask: ANYSPACE, Frm: Pack6Words},
	{Type: CHANNELS_SH(6) | BYTES_SH(2) | DOSWAP_SH(1), Mask: ANYSPACE, Frm: Pack6WordsSwap},
	{Type: BYTES_SH(2), Mask: ANYFLAVOR | ANYSWAPFIRST | ANYSWAP | ANYENDIAN | ANYEXTRA | ANYCHANNELS | ANYSPACE | ANYPREMUL, Frm: PackChunkyWords},
	{Type: BYTES_SH(2) | PLANAR_SH(1), Mask: ANYFLAVOR | ANYENDIAN | ANYSWAP | ANYEXTRA | ANYCHANNELS | ANYSPACE | ANYPREMUL, Frm: PackPlanarWords},
}

OutputFormatters16 is the Go equivalent of the C++ array.

OutputFormattersFloat is the Go equivalent of the C++ array.

View Source
var Shift = []uint8{}/* 512 elements not displayed */
View Source
var SupportedMPEtypes []cmsTagTypeLinkedList
View Source
var SupportedTagTypes []cmsTagTypeLinkedList
View Source
var SupportedTags []cmsTagLinkedList

Functions

func AddConversion

func AddConversion(mm mem.Manager, Result *cmsPipeline, InPCS cmsColorSpaceSignature, OutPCS cmsColorSpaceSignature, m *cmsMAT3, off *cmsVEC3) bool

func AddMLUBlock

func AddMLUBlock(mlu *cmsMLU, block []uint16, LanguageCode, CountryCode uint16) bool

AddMLUBlock adds a block of characters to the MLU for a specific language and country.

func AllCurvesAreLinear

func AllCurvesAreLinear(mpe *cmsStage) bool

func AllocArray

func AllocArray(mm mem.Manager, contextID CmsContext, a *cmsDICarray, count uint32, length uint32) bool

Allocate the entire array

func AllocElem

func AllocElem(mm mem.Manager, contextID CmsContext, e *cmsDICelem, count uint32) bool

Allocate an empty array element

func AllocEmptyTransform

func AllocEmptyTransform(mm mem.Manager,
	ContextID CmsContext,
	lut *cmsPipeline,
	Intent uint32,
	InputFormat, OutputFormat, dwFlags *uint32,
) *cmsTRANSFORM

func BYTES_SH

func BYTES_SH(b uint32) uint32

func BaseToBase

func BaseToBase(input uint32, baseIn, baseOut int) uint32

BaseToBase converts a number from one base to another.

func BilinearInterp16

func BilinearInterp16(mm mem.Manager, Input []uint16, Output []uint16, p *cmsInterpParams)

BilinearInterp16 performs bilinear interpolation for 16-bit values.

func BilinearInterpFloat

func BilinearInterpFloat(mm mem.Manager, Input []float32, Output []float32, p *cmsInterpParams)

BilinearInterpFloat performs bilinear interpolation for floating-point values.

func BlackPointAsDarkerColorant

func BlackPointAsDarkerColorant(mm mem.Manager, hInput CmsHPROFILE, Intent uint32, BlackPoint *cmsCIEXYZ, dwFlags uint32) bool

BlackPointAsDarkerColorant uses darker colorants to obtain the black point. This works in the relative colorimetric intent and assumes more ink results in darker colors. No ink limit is assumed.

func BlackPointUsingPerceptualBlack

func BlackPointUsingPerceptualBlack(mm mem.Manager, BlackPoint *cmsCIEXYZ, hProfile CmsHPROFILE) bool

BlackPointUsingPerceptualBlack calculates the black point of an output CMYK profile, discounting any ink-limiting embedded in the profile. The process involves a roundtrip transformation using perceptual intent: Lab (0, 0, 0) -> [Perceptual] Profile -> CMYK -> [Rel. Colorimetric] Profile -> Lab.

func BlackPreservingGrayOnlySampler

func BlackPreservingGrayOnlySampler(mm mem.Manager, In []uint16, Out []uint16, cargo any) int32

BlackPreservingGrayOnlySampler preserves black-only CMYK transformations.

func BlackPreservingKOnlyIntents

func BlackPreservingKOnlyIntents(mm mem.Manager,
	ContextID CmsContext,
	nProfiles uint32,
	TheIntents []uint32,
	hProfiles []CmsHPROFILE,
	BPC []bool,
	AdaptationStates []float64,
	dwFlags uint32,
) *cmsPipeline

BlackPreservingKOnlyIntents handles black-preserving K-only intents.

func BlackPreservingKPlaneIntents

func BlackPreservingKPlaneIntents(mm mem.Manager,
	ContextID CmsContext,
	nProfiles uint32,
	TheIntents []uint32,
	hProfiles []CmsHPROFILE,
	BPC []bool,
	AdaptationStates []float64,
	dwFlags uint32,
) *cmsPipeline

BlackPreservingKPlaneIntents handles black-plane preserving intents.

func BlackPreservingSampler

func BlackPreservingSampler(mm mem.Manager, In, Out []uint16, cargo any) int32

BlackPreservingSampler performs sampling for K-plane preservation.

func BlessLUT

func BlessLUT(lut *cmsPipeline) bool

BlessLUT sets up the channel count and ensures consistency across stages.

func BuildGrayInputMatrixPipeline

func BuildGrayInputMatrixPipeline(mm mem.Manager, hProfile CmsHPROFILE) *cmsPipeline

BuildGrayInputMatrixPipeline translates the first function

func BuildGrayOutputPipeline

func BuildGrayOutputPipeline(mm mem.Manager, hProfile CmsHPROFILE) *cmsPipeline

func BuildRGBInputMatrixShaper

func BuildRGBInputMatrixShaper(mm mem.Manager, hProfile CmsHPROFILE) *cmsPipeline

func BuildRGBOutputMatrixShaper

func BuildRGBOutputMatrixShaper(mm mem.Manager, hProfile CmsHPROFILE) *cmsPipeline

BuildRGBOutputMatrixShaper translates the given function

func BytesPerPixel

func BytesPerPixel(fmt uint32) uint32

BytesPerPixel returns how many bytes a single *pixel* occupies in memory for a given LCMS packed format. This is different from PixelSize, which is bytes per *sample* (channel).

func BytesToFloat32sLE

func BytesToFloat32sLE(b []byte) []float32

func BytesToFloat64sLE

func BytesToFloat64sLE(b []byte) []float64

func BytesToUint16sLE

func BytesToUint16sLE(b []byte) []uint16

func CHAD2Temp

func CHAD2Temp(Chad *cmsMAT3) float64

Approximate a blackbody illuminant based on CHAD information Approximate a blackbody illuminant based on CHAD information

func CHANGE_ENDIAN

func CHANGE_ENDIAN(w uint16) uint16

Change endianness of a 16-bit word

func CHANNELS_SH

func CHANNELS_SH(c uint32) uint32

func CIE2000DeltaE

func CIE2000DeltaE(Lab1, Lab2 *cmsCIELab, Kl, Kc, Kh float64) float64

CIE2000 Delta-E

func CLUTElemDup

func CLUTElemDup(mm mem.Manager, mpe *cmsStage) any

CLUTElemDup duplicates a CLUT element.

func CLutElemTypeFree

func CLutElemTypeFree(mm mem.Manager, mpe *cmsStage)

CLutElemTypeFree frees the resources of a CLUT element.

func COLORSPACE_SH

func COLORSPACE_SH(s uint32) uint32

func CachedXFORM

func CachedXFORM(
	mm mem.Manager,
	p *cmsTRANSFORM,
	in, out any,
	PixelsPerLine, LineCount uint32,
	Stride *cmsStride,
)

func CachedXFORMBytes added in v0.0.3

func CachedXFORMBytes(
	mm mem.Manager,
	p *cmsTRANSFORM,
	in, out []byte,
	PixelsPerLine, LineCount uint32,
	Stride *cmsStride,
)

func CachedXFORMGamutCheck

func CachedXFORMGamutCheck(mm mem.Manager,
	p *cmsTRANSFORM,
	in, out any,
	PixelsPerLine, LineCount uint32,
	Stride *cmsStride,
)

func CachedXFORMGamutCheckBytes added in v0.0.3

func CachedXFORMGamutCheckBytes(mm mem.Manager,
	p *cmsTRANSFORM,
	in, out []byte,
	PixelsPerLine, LineCount uint32,
	Stride *cmsStride,
)

func ChangeInterpolationToTrilinear

func ChangeInterpolationToTrilinear(Lut *cmsPipeline)

func Clamp_L_doubleV2

func Clamp_L_doubleV2(L float64) float64

Clamp function for Lab L values (Version 2)

func Clamp_L_doubleV4

func Clamp_L_doubleV4(L float64) float64

Lab encoding (Version 4)

func Clamp_ab_doubleV2

func Clamp_ab_doubleV2(ab float64) float64

Clamp function for Lab a/b values (Version 2)

func Clamp_ab_doubleV4

func Clamp_ab_doubleV4(ab float64) float64

func Clipper

func Clipper(mm mem.Manager, In []float32, Out []float32, mpe *cmsStage)

func CloseEnough

func CloseEnough(a, b float64) bool

func CloseEnoughFloat

func CloseEnoughFloat(a, b float64) bool

CloseEnoughFloat checks if two floating-point numbers are close enough.

func CmsCloseProfile

func CmsCloseProfile(mm mem.Manager, hProfile CmsHPROFILE) bool

func CmsContextGetClientChunk

func CmsContextGetClientChunk(ContextID CmsContext, mc cmsMemoryClient) any

CmsContextGetClientChunk retrieves the memory area associated with each context client Internal: get the memory area associanted with each context client Returns the block assigned to the specific zone. Never return nil.

func CmsDeleteTransform

func CmsDeleteTransform(hTransform CmsHTRANSFORM)

cmsDeleteTransform releases the resources associated with a transform.

func CmsDoTransform

func CmsDoTransform(mm mem.Manager, Transform CmsHTRANSFORM, InputBuffer, OutputBuffer any, Size uint32)

cmsDoTransform applies a transformation to the input buffer and writes the result to the output buffer.

func CmsDoTransformBytes added in v0.0.3

func CmsDoTransformBytes(mm mem.Manager, Transform CmsHTRANSFORM, InputBuffer, OutputBuffer []byte, Size uint32)

cmsDoTransform applies a transformation to the input buffer and writes the result to the output buffer.

func CmsDoTransformLineStride

func CmsDoTransformLineStride(mm mem.Manager,
	Transform CmsHTRANSFORM,
	InputBuffer,
	OutputBuffer any,
	PixelsPerLine uint32,
	LineCount uint32,
	BytesPerLineIn uint32,
	BytesPerLineOut uint32,
	BytesPerPlaneIn uint32,
	BytesPerPlaneOut uint32)

func CmsDoTransformParallel

func CmsDoTransformParallel(
	mm mem.Manager,
	xform CmsHTRANSFORM,
	inBuf, outBuf []byte,
	pixelCount uint32,
	workers int,
)

func CmsDoTransformParallelBytes added in v0.0.3

func CmsDoTransformParallelBytes(mm mem.Manager,
	xform CmsHTRANSFORM,
	inBuf, outBuf []byte,
	pixelCount uint32,
	workers int,
)

func CmsDoTransformStride

func CmsDoTransformStride(mm mem.Manager,
	Transform CmsHTRANSFORM,
	InputBuffer, OutputBuffer any,
	Size uint32,
	Stride uint32)

func CmsFLAGS_GRIDPOINTS

func CmsFLAGS_GRIDPOINTS(n int) int

Helper to calculate grid points

func CmsFreeToneCurve

func CmsFreeToneCurve(Curve *CmsToneCurve)

Free all memory taken by the gamma curve

func CmsGetColorSpace

func CmsGetColorSpace(hProfile CmsHPROFILE) cmsColorSpaceSignature

cmsGetColorSpace retrieves the color space from the profile

func CmsGetProfileInfoASCII

func CmsGetProfileInfoASCII(mm mem.Manager, hProfile CmsHPROFILE, Info CmsInfoType,
	LanguageCode string, CountryCode string,
	Buffer []byte, BufferSize uint32) uint32

func ColorSpaceIsCompatible

func ColorSpaceIsCompatible(a, b cmsColorSpaceSignature) bool

ColorSpaceIsCompatible checks if two color spaces are compatible.

func CompatibleTypes

func CompatibleTypes(desc1 *cmsTagDescriptor, desc2 *cmsTagDescriptor) bool

Checks for link compatibility

func ComputeAbsoluteIntent

func ComputeAbsoluteIntent(
	AdaptationState float64,
	WhitePointIn *cmsCIEXYZ,
	ChromaticAdaptationMatrixIn *cmsMAT3,
	WhitePointOut *cmsCIEXYZ,
	ChromaticAdaptationMatrixOut *cmsMAT3,
	m *cmsMAT3,
) bool

Join scalings to obtain relative input to absolute and then to relative output. Result is stored in a 3x3 matrix

func ComputeBlackPointCompensation

func ComputeBlackPointCompensation(BlackPointIn *cmsCIEXYZ, BlackPointOut *cmsCIEXYZ, m *cmsMAT3, off *cmsVEC3)

ComputeBlackPointCompensation calculates the black point compensation matrix and offset. Black points should come relative to the white point. Fills a matrix `m` and an offset `off`, organized as a 4x4 matrix.

Implementation details: The function computes a linear scaling in XYZ such that: - [m]*bpin + off = bpout - [m]*D50 + off = D50

This linear scaling takes the form: ax+b, where: - a = (bpout - D50) / (bpin - D50) - b = -D50 * (bpout - bpin) / (bpin - D50)

func ComputeChromaticAdaptation

func ComputeChromaticAdaptation(Conversion *cmsMAT3, SourceWhitePoint, DestWhitePoint *cmsCIEXYZ, Chad *cmsMAT3) bool

Compute chromatic adaptation matrix using Chad as cone matrix

func ComputeComponentIncrements

func ComputeComponentIncrements(format, bytesPerPlane uint32, componentStartingOrder, componentPointerIncrements []uint32)

Dispatcher for chunky and planar formats

func ComputeConversion

func ComputeConversion(mm mem.Manager, i uint32, hProfiles []CmsHPROFILE, Intent uint32, BPC bool, AdaptationState float64, m *cmsMAT3, off *cmsVEC3) bool

func ComputeIncrementsForChunky

func ComputeIncrementsForChunky(format uint32, componentStartingOrder, componentPointerIncrements []uint32)

Compute increments for chunky formats

func ComputeIncrementsForPlanar

func ComputeIncrementsForPlanar(format uint32, bytesPerPlane uint32, componentStartingOrder, componentPointerIncrements []uint32)

Compute increments for planar formats

func ComputeLBFD

func ComputeLBFD(Lab *cmsCIELab) float64

Auxiliary

func CubeSize

func CubeSize(Dims []uint32, b uint32) uint32

CubeSize calculates the total number of nodes in a hypercube.

func CurveSetDup

func CurveSetDup(mm mem.Manager, mpe *cmsStage) any

func CurveSetElemTypeFree

func CurveSetElemTypeFree(mm mem.Manager, mpe *cmsStage)

func CurvesDup

func CurvesDup(ContextID CmsContext, ptr any) any

CurvesDup duplicates a Curves16Data structure

func CurvesFree

func CurvesFree(ContextID CmsContext, ptr any)

func DOSWAP_SH

func DOSWAP_SH(e uint32) uint32

func DSWAP

func DSWAP(x, y *float64)

func DecideCurveType

func DecideCurveType(ICCVersion float64, Data any) cmsTagTypeSignature

DecideCurveType decides which curve type to use when writing.

func DecideLUTtypeA2B

func DecideLUTtypeA2B(ICCVersion float64, Data any) cmsTagTypeSignature

DecideLUTtypeA2B decides which LUT type to use when writing A2B LUTs.

func DecideLUTtypeB2A

func DecideLUTtypeB2A(ICCVersion float64, Data any) cmsTagTypeSignature

DecideLUTtypeB2A decides which LUT type to use when writing B2A LUTs.

func DecideTextDescType

func DecideTextDescType(ICCVersion float64, Data any) cmsTagTypeSignature

DecideTextDescType determines the type of text description

func DecideTextType

func DecideTextType(iccVersion float64, Data any) cmsTagTypeSignature

DecideTextType determines the text type signature based on ICC version.

func DecideXYZtype

func DecideXYZtype(ICCVersion float64, Data any) cmsTagTypeSignature

DecideXYZtype decides the type of XYZ tag.

func DefaultEvalParametricFn

func DefaultEvalParametricFn(Type int32, Params []float64, R float64) float64

DefaultEvalParametricFn evaluates a parametric curve using floating point. The behavior depends on the curve type and associated parameters.

func DefaultICCintents

func DefaultICCintents(mm mem.Manager,
	ContextID CmsContext,
	nProfiles uint32,
	TheIntents []uint32,
	hProfiles []CmsHPROFILE,
	BPC []bool,
	AdaptationStates []float64,
	dwFlags uint32,
) *cmsPipeline

func DefaultInterpolatorsFactory

func DefaultInterpolatorsFactory(nInputChannels, nOutputChannels, dwFlags uint32) cmsInterpFunction

The default factory DefaultInterpolatorsFactory defines the default interpolation routine.

func DefaultLogErrorHandlerFunction

func DefaultLogErrorHandlerFunction(ContextID CmsContext, ErrorCode uint32, text string)

The default error logger does nothing.

func DupFormatterFactoryList

func DupFormatterFactoryList(mm mem.Manager, ctx CmsContext, src CmsContext)

Duplicate the zone of memory used by the plugin in the new context

func DupMatShaper

func DupMatShaper(ContextID CmsContext, Data any) any

func DupNamedColorList

func DupNamedColorList(mm mem.Manager, mpe *cmsStage) any

DupNamedColorList duplicates the named color list.

func DupPluginOptimizationList

func DupPluginOptimizationList(mm mem.Manager, ctx CmsContext, src CmsContext)

DupPluginOptimizationList duplicates the optimization list for a new context.

func DupPluginTransformList

func DupPluginTransformList(mm mem.Manager, ctx CmsContext, src CmsContext)

DupPluginTransformList duplicates the transform plugin list for a new context.

func DupWcs

func DupWcs(contextID CmsContext, ptr []uint16) []uint16

Duplicate a wide character string

func ENDIAN16_SH

func ENDIAN16_SH(e uint32) uint32

func EXTRA_SH

func EXTRA_SH(e uint32) uint32

func EntriesByGamma

func EntriesByGamma(Gamma float64) uint32

EntriesByGamma calculates the number of entries by gamma.

func EstimateTAC

func EstimateTAC(mm mem.Manager, in []uint16, out []uint16, cargo any) int32

EstimateTAC is the callback function to calculate maximum TAC.

func EuclideanDistance

func EuclideanDistance(a, b []float32, n int) float32

Euclidean distance between two vectors of n elements each one

func Eval1Input

func Eval1Input(mm mem.Manager, Input []uint16, Output []uint16, p16 *cmsInterpParams)

Eval1Input performs 1D interpolation for a single input.

func Eval1InputFloat

func Eval1InputFloat(mm mem.Manager, Value []float32, Output []float32, p *cmsInterpParams)

Eval1InputFloat evaluates a gray LUT having only one input channel (float version).

func Eval4Inputs

func Eval4Inputs(mm mem.Manager, Input, Output []uint16, p *cmsInterpParams)

Eval4Inputs — optimized, WASM-safe, no unsafe pointers. Key changes explained after the code.

func Eval4InputsFloat

func Eval4InputsFloat(mm mem.Manager, Input, Output []float32, p *cmsInterpParams)

Eval4InputsFloat performs tetrahedral interpolation with 4 input channels for floating-point values. Eval4InputsFloat — tetrahedral interp with 4 inputs (float32), K split + 3D tetra. WASM-safe, no unsafe. Mirrors the structure you now use in Eval4Inputs (U16).

func Eval5Inputs

func Eval5Inputs(mm mem.Manager, Input []uint16, Output []uint16, p16 *cmsInterpParams)

Eval5Inputs evaluates a 5-input LUT.

func Eval5InputsFloat

func Eval5InputsFloat(mm mem.Manager, Input []float32, Output []float32, p *cmsInterpParams)

Eval5InputsFloat evaluates a 5-input LUT using floating-point interpolation.

func Eval6Inputs

func Eval6Inputs(mm mem.Manager, Input []uint16, Output []uint16, p16 *cmsInterpParams)

Eval6Inputs evaluates a 6-input LUT with `[]uint16` table.

func Eval6InputsFloat

func Eval6InputsFloat(mm mem.Manager, Input []float32, Output []float32, p *cmsInterpParams)

Eval6InputsFloat evaluates a 6-input LUT with `[]float32` table.

func Eval7Inputs

func Eval7Inputs(mm mem.Manager, Input []uint16, Output []uint16, p16 *cmsInterpParams)

Eval7Inputs evaluates a 7-input LUT with `[]uint16` table.

func Eval7InputsFloat

func Eval7InputsFloat(mm mem.Manager, Input []float32, Output []float32, p *cmsInterpParams)

Eval7InputsFloat evaluates a 7-input LUT with `[]float32` table.

func Eval8Inputs

func Eval8Inputs(mm mem.Manager, Input []uint16, Output []uint16, p16 *cmsInterpParams)

Eval8Inputs evaluates an 8-input LUT with `[]uint16` table.

func Eval8InputsFloat

func Eval8InputsFloat(mm mem.Manager, Input []float32, Output []float32, p *cmsInterpParams)

Eval8InputsFloat evaluates an 8-input LUT with `[]float32` table.

func Eval9Inputs

func Eval9Inputs(mm mem.Manager, Input []uint16, Output []uint16, p16 *cmsInterpParams)

Eval9Inputs evaluates a 9-input LUT with `[]uint16` table.

func Eval9InputsFloat

func Eval9InputsFloat(mm mem.Manager, Input []float32, Output []float32, p *cmsInterpParams)

Eval9InputsFloat evaluates a 9-input LUT with `[]float32` table.

func Eval10Inputs

func Eval10Inputs(mm mem.Manager, Input []uint16, Output []uint16, p16 *cmsInterpParams)

Eval10Inputs evaluates a 10-input LUT with `[]uint16` table.

func Eval10InputsFloat

func Eval10InputsFloat(mm mem.Manager, Input []float32, Output []float32, p *cmsInterpParams)

Eval10InputsFloat evaluates a 10-input LUT with `[]float32` table.

func Eval11Inputs

func Eval11Inputs(mm mem.Manager, Input []uint16, Output []uint16, p16 *cmsInterpParams)

Eval11Inputs evaluates an 11-input LUT with `[]uint16` table.

func Eval11InputsFloat

func Eval11InputsFloat(mm mem.Manager, Input []float32, Output []float32, p *cmsInterpParams)

Eval11InputsFloat evaluates an 11-input LUT with `[]float32` table.

func Eval12Inputs

func Eval12Inputs(mm mem.Manager, Input []uint16, Output []uint16, p16 *cmsInterpParams)

Eval12Inputs evaluates a 12-input LUT with `[]uint16` table.

func Eval12InputsFloat

func Eval12InputsFloat(mm mem.Manager, Input []float32, Output []float32, p *cmsInterpParams)

Eval12InputsFloat evaluates a 12-input LUT with `[]float32` table.

func Eval13Inputs

func Eval13Inputs(mm mem.Manager, Input []uint16, Output []uint16, p16 *cmsInterpParams)

Eval13Inputs evaluates a 13-input LUT with `[]uint16` table.

func Eval13InputsFloat

func Eval13InputsFloat(mm mem.Manager, Input []float32, Output []float32, p *cmsInterpParams)

Eval13InputsFloat evaluates a 13-input LUT with `[]float32` table.

func Eval14Inputs

func Eval14Inputs(mm mem.Manager, Input []uint16, Output []uint16, p16 *cmsInterpParams)

Eval14Inputs evaluates a 14-input LUT with `[]uint16` table.

func Eval14InputsFloat

func Eval14InputsFloat(mm mem.Manager, Input []float32, Output []float32, p *cmsInterpParams)

Eval14InputsFloat evaluates a 14-input LUT with `[]float32` table.

func Eval15Inputs

func Eval15Inputs(mm mem.Manager, Input []uint16, Output []uint16, p16 *cmsInterpParams)

Eval15Inputs evaluates a 15-input LUT with `[]uint16` table.

func Eval15InputsFloat

func Eval15InputsFloat(mm mem.Manager, Input []float32, Output []float32, p *cmsInterpParams)

Eval15InputsFloat evaluates a 15-input LUT with `[]float32` table.

func Eval16nop1D

func Eval16nop1D(mm mem.Manager, Input []uint16, Output []uint16, params *cmsInterpParams)

func EvalNamedColor

func EvalNamedColor(mm mem.Manager, in []float32, out []float32, mpe *cmsStage)

EvalNamedColor evaluates named color in device colorant space.

func EvalNamedColorPCS

func EvalNamedColorPCS(mm mem.Manager, in []float32, out []float32, mpe *cmsStage)

EvalNamedColorPCS evaluates named color in PCS (Lab) space.

func EvalSegmentedFn

func EvalSegmentedFn(mm mem.Manager, g *CmsToneCurve, R float64) float64

func EvaluateCLUTfloat

func EvaluateCLUTfloat(mm mem.Manager, In []float32, Out []float32, mpe *cmsStage)

EvaluateCLUTfloat evaluates a CLUT in true floating point.

func EvaluateCLUTfloatIn16

func EvaluateCLUTfloatIn16(mm mem.Manager, In, Out []float32, mpe *cmsStage)

func EvaluateCurves

func EvaluateCurves(mm mem.Manager, In []float32, Out []float32, mpe *cmsStage)

func EvaluateIdentity

func EvaluateIdentity(mm mem.Manager, In []float32, Out []float32, mpe *cmsStage)

func EvaluateLab2XYZ

func EvaluateLab2XYZ(mm mem.Manager, In []float32, Out []float32, mpe *cmsStage)

func EvaluateMatrix

func EvaluateMatrix(mm mem.Manager, in []float32, out []float32, mpe *cmsStage)

func EvaluateXYZ2Lab

func EvaluateXYZ2Lab(mm mem.Manager, In []float32, Out []float32, mpe *cmsStage)

func FIXED_REST_TO_INT

func FIXED_REST_TO_INT(x cmsS15Fixed16Number) uint16

func FIXED_TO_INT

func FIXED_TO_INT(x cmsS15Fixed16Number) int32

Fixed point macros translated to Go functions

func FLAVOR_SH

func FLAVOR_SH(s uint32) uint32

func FLOAT_SH

func FLOAT_SH(a uint32) uint32

func FROM_8_TO_16

func FROM_8_TO_16(rgb uint8) uint16

FROM_8_TO_16 converts an 8-bit value to a 16-bit value

func FROM_16_TO_8

func FROM_16_TO_8(rgb uint16) uint8

FROM_16_TO_8 converts a 16-bit value to an 8-bit value

func FastEvaluateCurves8

func FastEvaluateCurves8(mm mem.Manager, In []uint16, Out []uint16, D any)

func FastEvaluateCurves16

func FastEvaluateCurves16(mm mem.Manager, In []uint16, Out []uint16, D any)

func FastIdentity16

func FastIdentity16(mm mem.Manager, In []uint16, Out []uint16, D any)

func FileClose

func FileClose(iohandler *cms_io_handler) bool

FileClose closes the file stream. Returns true on success, false otherwise.

func FileRead

func FileRead(iohandler *cms_io_handler, buffer any, size, count uint32) uint32

FileRead reads count elements of size bytes each from the file stream. Returns the number of elements read.

func FileSeek

func FileSeek(iohandler *cms_io_handler, offset uint32) bool

FileSeek repositions the file pointer within the file. Returns true on success, false otherwise.

func FileTell

func FileTell(iohandler *cms_io_handler) uint32

FileTell returns the current position of the file pointer within the file. Returns 0 on error, which is also a valid position.

func FileWrite

func FileWrite(iohandler *cms_io_handler, size uint32, buffer []byte) bool

FileWrite writes data to the stream. Returns true on success, false otherwise.

func FillFirstShaper

func FillFirstShaper(mm mem.Manager, Table []cmsS1Fixed14Number, Curve *CmsToneCurve)

func FillSecondShaper

func FillSecondShaper(mm mem.Manager, Table []uint16, Curve *CmsToneCurve, Is8BitsOutput bool)

func FixWhiteMisalignment

func FixWhiteMisalignment(mm mem.Manager, Lut *cmsPipeline, EntryColorSpace, ExitColorSpace cmsColorSpaceSignature) bool

func Float32sToBytesLE

func Float32sToBytesLE(src []float32) []byte

func Float64sToBytesLE

func Float64sToBytesLE(src []float64) []byte

func FloatXFORM

func FloatXFORM(mm mem.Manager,
	p *cmsTRANSFORM,
	in, out any,
	PixelsPerLine, LineCount uint32,
	Stride *cmsStride,
)

func FloatXFORMBytes added in v0.0.3

func FloatXFORMBytes(mm mem.Manager,
	p *cmsTRANSFORM,
	in, out []byte,
	PixelsPerLine, LineCount uint32,
	Stride *cmsStride,
)

func FormatterPos

func FormatterPos(frm uint32) int32

Returns the position (x or y) of the formatter in the table of functions

func FreeArray

func FreeArray(a *cmsDICarray)

Free the entire array

func FreeElem

func FreeElem(e *cmsDICelem)

Free an array element

func FreeMatShaper

func FreeMatShaper(ContextID CmsContext, Data any)

func FreeNamedColorList

func FreeNamedColorList(mm mem.Manager, mpe *cmsStage)

FreeNamedColorList releases the resources for the named color list.

func From16ToFloat

func From16ToFloat(In []uint16, Out []float32, n uint32)

From16ToFloat converts n uint16 values in In to float32 in Out, in [0, 1].

func FromFloatTo16

func FromFloatTo16(In []float32, Out []uint16, n uint32)

FromFloatTo16 converts a slice of float32 values to a slice of uint16 values FromFloatTo16 converts a slice of float32 values to a slice of uint16 values using unsafe pointer arithmetic.

func FromLabV2ToLabV4

func FromLabV2ToLabV4(x uint16) uint16

Convert LabV2 to LabV4

func FromLabV4ToLabV2

func FromLabV4ToLabV2(x uint16) uint16

Convert LabV4 to LabV2

func GamutSampler

func GamutSampler(mm mem.Manager, In []uint16, Out []uint16, cargo any) int32

GamutSampler computes gamut boundaries by comparing original values with a transform going back and forth. Values above ERR_THRESHOLD are considered out of gamut.

func GenericMPEDup

func GenericMPEDup(mm mem.Manager, self *cmsTagTypeHandler, ptr any, n uint32) any

func GenericMPEFree

func GenericMPEFree(mm mem.Manager, self *cmsTagTypeHandler, ptr any)

func GetHandler

func GetHandler(
	sig cmsTagTypeSignature,
	PluginLinkedList *cmsTagTypeLinkedList,
	DefaultLinkedList *cmsTagTypeLinkedList,
) *cmsTagTypeHandler

Return handler for a given type or NULL if not found. Shared between normal types and MPE. It first tries the additons made by plug-ins and then the built-in defaults. GetHandler returns the handler for a given type signature. It first tries the additions made by plug-ins and then the built-in defaults.

func GetInfo

func GetInfo(mm mem.Manager, hProfile CmsHPROFILE, Info CmsInfoType) *cmsMLU

func GetInterval

func GetInterval(In float64, LutTable []uint16, p *cmsInterpParams) int

func GetMLUFromProfile

func GetMLUFromProfile(mm mem.Manager, h CmsHPROFILE, sig cmsTagSignature) *cmsMLU

GetMLUFromProfile reads and duplicates an MLU tag from the profile if found.

func GetParametricCurveByType

func GetParametricCurveByType(ContextID CmsContext, Type int, index *int) *cmsParametricCurvesCollection

Parametric curves

Parameters goes as: Curve, a, b, c, d, e, f Type is the ICC type +1 if type is negative, then the curve is analytically inverted GetParametricCurveByType searches for the collection that contains a specific type of parametric curve.

func GetTransformFlags

func GetTransformFlags(cmmCargo *cmsTRANSFORM) uint32

GetTransformFlags retrieves the original flags.

func GetTransformFormatters16

func GetTransformFormatters16(cmmCargo *cmsTRANSFORM) (fromInput, toOutput cmsFormatter16)

GetTransformFormatters16 retrieves the current 16-bit formatters.

func GetTransformFormattersFloat

func GetTransformFormattersFloat(cmmCargo *cmsTRANSFORM) (fromInputFloat, toOutputFloat cmsFormatterFloat)

GetTransformFormattersFloat retrieves the current float formatters.

func GetTransformMaxWorkers

func GetTransformMaxWorkers(cmmCargo *cmsTRANSFORM) int32

GetTransformMaxWorkers retrieves the maximum number of workers or -1 for auto.

func GetTransformUserData

func GetTransformUserData(cmmCargo *cmsTRANSFORM) any

GetTransformUserData retrieves the user-defined data.

func GetTransformWorker

func GetTransformWorker(cmmCargo *cmsTRANSFORM) cmsTransform2Fn

GetTransformWorker retrieves the worker callback for parallelization plugins.

func GetTransformWorkerFlags

func GetTransformWorkerFlags(cmmCargo *cmsTRANSFORM) uint32

GetTransformWorkerFlags retrieves the worker flags.

func GetXFormColorSpaces

func GetXFormColorSpaces(
	nProfiles uint32,
	hProfiles []CmsHPROFILE,
	Input, Output *cmsColorSpaceSignature,
) bool

func GrowMLUpool

func GrowMLUpool(mlu *cmsMLU) bool

GrowMLUpool grows the memory pool for an MLU. Pool size is doubled on each call.

func GrowMLUtable

func GrowMLUtable(mlu *cmsMLU) bool

GrowMLUtable grows the entry table for an MLU. Table size is doubled on each call.

func GrowNamedColorList

func GrowNamedColorList(mm mem.Manager, v *cmsNAMEDCOLORLIST) bool

GrowNamedColorList grows the list to accommodate at least NumElements. GrowNamedColorList expands the capacity of the named color list dynamically.

func IdentitySampler

func IdentitySampler(mm mem.Manager, In []uint16, Out []uint16, cargo any) int32

func IncDelta

func IncDelta(Val *float32)

Increment with reflexion on boundary

func InitContextMutex

func InitContextMutex() bool

Initialize the context mutex

func InkLimitingSampler

func InkLimitingSampler(mm mem.Manager, In []uint16, Out []uint16, cargo any) int32

InkLimitingSampler translates the given function

func IsDegenerated

func IsDegenerated(g *CmsToneCurve) bool

func IsEmptyLayer

func IsEmptyLayer(m *cmsMAT3, off *cmsVEC3) bool

IsEmptyLayer checks if the given matrix `m` and offset `off` represent an empty layer. Returns true if the layer is effectively empty, false otherwise.

An empty layer is defined as: - Both `m` and `off` are NULL (allowed as an empty layer). - `m` is NULL but `off` is not (this indicates an internal error). - `m` is the identity matrix and `off` is a zero vector.

Tolerance for differences is set to 0.002.

func IsInSet

func IsInSet(Type int, c *cmsParametricCurvesCollection) int

Search in type list, return position or -1 if not found

func IsInkSpace

func IsInkSpace(Type uint32) bool

func IsProperColorSpace

func IsProperColorSpace(Check cmsColorSpaceSignature, dwFormat uint32) bool

func IsTypeSupported

func IsTypeSupported(TagDescriptor *cmsTagDescriptor, Type cmsTagTypeSignature) bool

Returns TRUE if a given tag is supported by a plug-in

func L2Fix2

func L2Fix2(L float64) uint16

Lab value to fixed-point encoding (Version 2)

func L2Fix4

func L2Fix4(L float64) uint16

func L2float2

func L2float2(v uint16) float64

Helper functions to convert Lab values to float and back

func L2float4

func L2float4(v uint16) float64

Lab value to float decoding (Version 4)

func LUTeval16

func LUTeval16(mm mem.Manager, In, Out []uint16, D any)

func LUTevalFloat

func LUTevalFloat(mm mem.Manager, In, Out []float32, D any)

func LabToSlice

func LabToSlice(lab cmsCIELab) []float64

func LinLerp1D

func LinLerp1D(mm mem.Manager, Value, Output []uint16, p *cmsInterpParams)

Linear interpolation (fixed-point optimized)

func LinLerp1DScalar16

func LinLerp1DScalar16(v uint16, p *cmsInterpParams) uint16

Scalar, fixed-point path (uint16 -> uint16)

func LinLerp1Dfloat

func LinLerp1Dfloat(mm mem.Manager, Value []float32, Output []float32, p *cmsInterpParams)

LinLerp1Dfloat performs 1D linear interpolation on floating-point values.

func LinearInterp

func LinearInterp(a, l, h int32) uint16

LinearInterp performs inline fixed-point interpolation.

func MatShaperEval16

func MatShaperEval16(mm mem.Manager, In []uint16, Out []uint16, D any)

func MatToSlice

func MatToSlice(mat cmsMAT3) []float64

func MatrixElemDup

func MatrixElemDup(mm mem.Manager, mpe *cmsStage) any

MatrixElemDup duplicates the matrix stage data.

func MatrixElemTypeFree

func MatrixElemTypeFree(mm mem.Manager, mpe *cmsStage)

MatrixElemTypeFree frees the matrix stage data.

func MemcpySlice

func MemcpySlice[T any](dst, src []T, length int)

func MemmoveSlice

func MemmoveSlice[T any](dest, src []T, count int)

func MemoryClose

func MemoryClose(iohandler *cms_io_handler) bool

MemoryClose closes the memory-based stream and frees resources if necessary.

func MemoryRead

func MemoryRead(iohandler *cms_io_handler, buffer any, size, count uint32) uint32

func MemoryRead(iohandler *cms_io_handler, buffer []byte, size, count uint32) uint32 {

func MemorySeek

func MemorySeek(iohandler *cms_io_handler, offset uint32) bool

MemorySeek sets the current position in the memory block.

func MemoryTell

func MemoryTell(iohandler *cms_io_handler) uint32

MemoryTell returns the current position in the memory block.

func MemoryWrite

func MemoryWrite(iohandler *cms_io_handler, size uint32, ptr []byte) bool

MemoryWrite writes data to the memory block and updates the used space.

func MemsetSlice

func MemsetSlice[T any](slice []T, value T, length int)

func NULLClose

func NULLClose(iohandler *cms_io_handler) bool

NULLClose closes the null IOHandler and releases associated memory.

func NULLRead

func NULLRead(iohandler *cms_io_handler, buffer any, size, count uint32) uint32

NULLRead simulates reading from a null IOHandler.

func NULLSeek

func NULLSeek(iohandler *cms_io_handler, offset uint32) bool

NULLSeek simulates seeking in a null IOHandler.

func NULLTell

func NULLTell(iohandler *cms_io_handler) uint32

NULLTell retrieves the current pointer position in the null IOHandler.

func NULLWrite

func NULLWrite(iohandler *cms_io_handler, size uint32, ptr []byte) bool

NULLWrite simulates writing to a null IOHandler. func NULLWrite(iohandler *cms_io_handler, size uint32, ptr []byte) bool {

func NewCmsMutex

func NewCmsMutex() *cmsMutex

func NormalizeXYZ

func NormalizeXYZ(Dest *cmsCIEXYZ)

func NullFloatXFORM

func NullFloatXFORM(mm mem.Manager,
	p *cmsTRANSFORM,
	in, out any,
	PixelsPerLine, LineCount uint32,
	Stride *cmsStride,
)

func NullFloatXFORMBytes added in v0.0.3

func NullFloatXFORMBytes(mm mem.Manager,
	p *cmsTRANSFORM,
	in, out []byte,
	PixelsPerLine, LineCount uint32,
	Stride *cmsStride,
)

func NullXFORM

func NullXFORM(mm mem.Manager,
	p *cmsTRANSFORM,
	in, out any,
	PixelsPerLine, LineCount uint32,
	Stride *cmsStride,
)

func NullXFORMBytes added in v0.0.3

func NullXFORMBytes(mm mem.Manager,
	p *cmsTRANSFORM,
	in, out []byte,
	PixelsPerLine, LineCount uint32,
	Stride *cmsStride,
)

func OPTIMIZED_SH

func OPTIMIZED_SH(s uint32) uint32

func OptimizeByComputingLinearization

func OptimizeByComputingLinearization(mm mem.Manager, Lut **cmsPipeline, Intent uint32, InputFormat, OutputFormat, dwFlags *uint32) bool

func OptimizeByJoiningCurves

func OptimizeByJoiningCurves(mm mem.Manager,
	Lut **cmsPipeline,
	Intent uint32,
	InputFormat *uint32,
	OutputFormat *uint32,
	dwFlags *uint32,
) bool

cmsOPToptimizeFn defines the function type for optimizations.

func OptimizeByResampling

func OptimizeByResampling(mm mem.Manager, Lut **cmsPipeline, Intent uint32, InputFormat *uint32, OutputFormat *uint32, dwFlags *uint32) bool

func OptimizeMatrixShaper

func OptimizeMatrixShaper(mm mem.Manager, Lut **cmsPipeline, Intent uint32, InputFormat *uint32, OutputFormat *uint32, dwFlags *uint32) bool

func PLANAR_SH

func PLANAR_SH(p uint32) uint32

func PREMUL_SH

func PREMUL_SH(m uint32) uint32

Bit-shift macros for pixel format

func Pack1Byte

func Pack1Byte(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []uint8, Stride uint32) []uint8

func Pack1ByteReversed

func Pack1ByteReversed(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []uint8, Stride uint32) []uint8

func Pack1ByteSkip1

func Pack1ByteSkip1(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []uint8, Stride uint32) []uint8

func Pack1ByteSkip1SwapFirst

func Pack1ByteSkip1SwapFirst(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []uint8, Stride uint32) []uint8

func Pack1Word

func Pack1Word(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []uint8, Stride uint32) []uint8

func Pack1WordBigEndian

func Pack1WordBigEndian(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []uint8, Stride uint32) []uint8

func Pack1WordReversed

func Pack1WordReversed(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []uint8, Stride uint32) []uint8

func Pack1WordSkip1

func Pack1WordSkip1(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []uint8, Stride uint32) []uint8

func Pack1WordSkip1SwapFirst

func Pack1WordSkip1SwapFirst(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []uint8, Stride uint32) []uint8

func Pack3Bytes

func Pack3Bytes(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []uint8, Stride uint32) []uint8

func Pack3BytesAndSkip1

func Pack3BytesAndSkip1(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []uint8, Stride uint32) []uint8

func Pack3BytesAndSkip1Optimized

func Pack3BytesAndSkip1Optimized(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []uint8, Stride uint32) []uint8

func Pack3BytesAndSkip1Swap

func Pack3BytesAndSkip1Swap(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []uint8, Stride uint32) []uint8

func Pack3BytesAndSkip1SwapFirst

func Pack3BytesAndSkip1SwapFirst(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []uint8, Stride uint32) []uint8

func Pack3BytesAndSkip1SwapFirstOptimized

func Pack3BytesAndSkip1SwapFirstOptimized(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []uint8, Stride uint32) []uint8

func Pack3BytesAndSkip1SwapOptimized

func Pack3BytesAndSkip1SwapOptimized(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []uint8, Stride uint32) []uint8

func Pack3BytesAndSkip1SwapSwapFirst

func Pack3BytesAndSkip1SwapSwapFirst(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []uint8, stride uint32) []uint8

func Pack3BytesAndSkip1SwapSwapFirstOptimized

func Pack3BytesAndSkip1SwapSwapFirstOptimized(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []uint8, stride uint32) []uint8

func Pack3BytesOptimized

func Pack3BytesOptimized(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []uint8, Stride uint32) []uint8

func Pack3BytesSwap

func Pack3BytesSwap(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []uint8, Stride uint32) []uint8

func Pack3BytesSwapOptimized

func Pack3BytesSwapOptimized(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []uint8, Stride uint32) []uint8

func Pack3Words

func Pack3Words(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []uint8, Stride uint32) []uint8

func Pack3WordsAndSkip1

func Pack3WordsAndSkip1(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []uint8, Stride uint32) []uint8

func Pack3WordsAndSkip1Swap

func Pack3WordsAndSkip1Swap(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []uint8, Stride uint32) []uint8

func Pack3WordsAndSkip1SwapFirst

func Pack3WordsAndSkip1SwapFirst(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []uint8, Stride uint32) []uint8

func Pack3WordsAndSkip1SwapSwapFirst

func Pack3WordsAndSkip1SwapSwapFirst(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []uint8, Stride uint32) []uint8

func Pack3WordsBigEndian

func Pack3WordsBigEndian(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []uint8, Stride uint32) []uint8

func Pack3WordsSwap

func Pack3WordsSwap(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []uint8, Stride uint32) []uint8

func Pack4Bytes

func Pack4Bytes(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []uint8, Stride uint32) []uint8

func Pack4BytesReverse

func Pack4BytesReverse(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []uint8, Stride uint32) []uint8

func Pack4BytesSwap

func Pack4BytesSwap(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []uint8, Stride uint32) []uint8

func Pack4BytesSwapFirst

func Pack4BytesSwapFirst(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []uint8, Stride uint32) []uint8

func Pack4BytesSwapSwapFirst

func Pack4BytesSwapSwapFirst(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []uint8, Stride uint32) []uint8

func Pack4Words

func Pack4Words(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []uint8, Stride uint32) []uint8

func Pack4WordsBigEndian

func Pack4WordsBigEndian(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []uint8, Stride uint32) []uint8

func Pack4WordsReverse

func Pack4WordsReverse(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []uint8, Stride uint32) []uint8

func Pack4WordsSwap

func Pack4WordsSwap(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []uint8, Stride uint32) []uint8

func Pack6Bytes

func Pack6Bytes(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []uint8, Stride uint32) []uint8

func Pack6BytesSwap

func Pack6BytesSwap(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []uint8, Stride uint32) []uint8

func Pack6Words

func Pack6Words(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []uint8, stride uint32) []uint8

func Pack6WordsSwap

func Pack6WordsSwap(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []uint8, stride uint32) []uint8

func PackALabV2_8

func PackALabV2_8(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []uint8, Stride uint32) []uint8

func PackChunkyBytes

func PackChunkyBytes(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []uint8, Stride uint32) []uint8

func PackChunkyWords

func PackChunkyWords(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []byte, stride uint32) []byte

func PackDoubleFrom16

func PackDoubleFrom16(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []uint8, Stride uint32) []uint8

func PackDoublesFromFloat

func PackDoublesFromFloat(mm mem.Manager, info *cmsTRANSFORM, wOut []float32, output []uint8, Stride uint32) []uint8

func PackFloatFrom16

func PackFloatFrom16(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []uint8, Stride uint32) []uint8

func PackFloatsFromFloat

func PackFloatsFromFloat(mm mem.Manager, info *cmsTRANSFORM, wOut []float32, output []uint8, Stride uint32) []uint8

func PackHalfFrom16

func PackHalfFrom16(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []uint8, stride uint32) []uint8

func PackHalfFromFloat

func PackHalfFromFloat(mm mem.Manager, info *cmsTRANSFORM, wOut []float32, output []uint8, stride uint32) []uint8

func PackLabDoubleFrom16

func PackLabDoubleFrom16(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []uint8, stride uint32) []uint8

func PackLabDoubleFromFloat

func PackLabDoubleFromFloat(mm mem.Manager, info *cmsTRANSFORM, wOut []float32, output []uint8, Stride uint32) []uint8

func PackLabFloatFrom16

func PackLabFloatFrom16(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []uint8, stride uint32) []uint8

func PackLabFloatFromFloat

func PackLabFloatFromFloat(mm mem.Manager, info *cmsTRANSFORM, wOut []float32, output []uint8, Stride uint32) []uint8

func PackLabV2_8

func PackLabV2_8(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []uint8, Stride uint32) []uint8

func PackLabV2_16

func PackLabV2_16(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []uint8, Stride uint32) []uint8

func PackNothing

func PackNothing(mm mem.Manager,
	info *cmsTRANSFORM,
	wOut []uint16,
	output []uint8,
	Stride uint32,
) []uint8

func PackPlanarBytes

func PackPlanarBytes(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []uint8, Stride uint32) []uint8

func PackPlanarWords

func PackPlanarWords(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []byte, stride uint32) []byte

func PackXYZDoubleFrom16

func PackXYZDoubleFrom16(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []uint8, stride uint32) []uint8

func PackXYZDoubleFromFloat

func PackXYZDoubleFromFloat(mm mem.Manager, info *cmsTRANSFORM, wOut []float32, output []uint8, Stride uint32) []uint8

func PackXYZFloatFrom16

func PackXYZFloatFrom16(mm mem.Manager, info *cmsTRANSFORM, wOut []uint16, output []uint8, stride uint32) []uint8

func PackXYZFloatFromFloat

func PackXYZFloatFromFloat(mm mem.Manager, info *cmsTRANSFORM, wOut []float32, output []uint8, Stride uint32) []uint8

func ParallelizeIfSuitable

func ParallelizeIfSuitable(p *cmsTRANSFORM)

func PatchLUT

func PatchLUT(CLUT *cmsStage, At []uint16, Value []uint16, nChannelsOut, nChannelsIn uint32) bool

func PixelSize

func PixelSize(Format uint32) uint32

PixelSize calculates the size of a pixel in bytes based on its format. If the format specifies double-precision, it returns the size of a double (float64 in Go).

func PreOptimize

func PreOptimize(mm mem.Manager, Lut *cmsPipeline) bool

PreOptimize performs various optimization steps on a pipeline.

func PrecalculatedXFORM

func PrecalculatedXFORM(mm mem.Manager,
	p *cmsTRANSFORM,
	in, out any,
	PixelsPerLine, LineCount uint32,
	Stride *cmsStride,
)

func PrecalculatedXFORMBytes added in v0.0.3

func PrecalculatedXFORMBytes(mm mem.Manager,
	p *cmsTRANSFORM,
	in, out []byte,
	PixelsPerLine, LineCount uint32,
	Stride *cmsStride,
)

func PrecalculatedXFORMGamutCheck

func PrecalculatedXFORMGamutCheck(mm mem.Manager,
	p *cmsTRANSFORM,
	in, out any,
	PixelsPerLine, LineCount uint32,
	Stride *cmsStride,
)

func PrecalculatedXFORMGamutCheckBytes added in v0.0.3

func PrecalculatedXFORMGamutCheckBytes(mm mem.Manager,
	p *cmsTRANSFORM,
	in, out []byte,
	PixelsPerLine, LineCount uint32,
	Stride *cmsStride,
)

func Prelin8dup

func Prelin8dup(ContextID CmsContext, ptr any) any

func Prelin8free

func Prelin8free(ContextID CmsContext, ptr any)

func Prelin16dup

func Prelin16dup(_ CmsContext, ptr any) any

func PrelinEval8

func PrelinEval8(mm mem.Manager, Input []uint16, Output []uint16, D any)

func PrelinEval16

func PrelinEval16(mm mem.Manager, Input []uint16, Output []uint16, D any)

PrelinEval16 implements the optimized interpolation for 16-bit input

func PrelinOpt16free

func PrelinOpt16free(ContextID CmsContext, ptr any)

PrelinOpt16free frees memory associated with Prelin16Data

func RADIANS

func RADIANS(deg float64) float64

Utility Functions

func REVERSE_FLAVOR_8

func REVERSE_FLAVOR_8(x uint8) uint8

Reverse the flavor for 8-bit values

func REVERSE_FLAVOR_16

func REVERSE_FLAVOR_16(x uint16) uint16

Reverse the flavor for 16-bit values

func ROUND_FIXED_TO_INT

func ROUND_FIXED_TO_INT(x cmsS15Fixed16Number) int32

func Read8bitTables

func Read8bitTables(mm mem.Manager, ContextID CmsContext, io *cmsIOHANDLER, lut *cmsPipeline, nChannels uint32) bool

func Read16bitTables

func Read16bitTables(mm mem.Manager, ContextID CmsContext, io *cmsIOHANDLER, lut *cmsPipeline, nChannels, nEntries uint32) bool

******************************************************************************** Type CmsSigLut16Type ********************************************************************************

func ReadCLUT

func ReadCLUT(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, offset, inputChannels, outputChannels uint32) *cmsStage

func ReadCountAndString

func ReadCountAndString(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, mlu *cmsMLU, sizeOfTag *uint32, section string) bool

func ReadEmbeddedText

func ReadEmbeddedText(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, mlu **cmsMLU, sizeOfTag uint32) bool

This type is an array of structures, each of which contains information from the header fields and tags from the original profiles which were combined to create the final profile. The order of the structures is the order in which the profiles were combined and includes a structure for the final profile. This provides a description of the profile sequence from source to destination, typically used with the DeviceLink profile.

func ReadICCMatrixRGB2XYZ

func ReadICCMatrixRGB2XYZ(mm mem.Manager, r *cmsMAT3, hProfile CmsHPROFILE) bool

ReadICCMatrixRGB2XYZ translates the given function

func ReadMPECurve

func ReadMPECurve(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, cargo any, n, sizeOfTag uint32) bool

ReadMPECurve reads a single curve for MPE

func ReadMPEElem

func ReadMPEElem(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, cargo any, n, sizeOfTag uint32) bool

ReadMPEElem reads a single multi-processing element (MPE).

func ReadMatrix

func ReadMatrix(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, offset uint32) *cmsStage

func ReadOffsetArray

func ReadOffsetArray(io *cmsIOHANDLER, a *cmsDICarray, count uint32, length uint32, baseOffset uint32, signedSizeOfTagPtr *int32) bool

Read offset array

func ReadOneElem

func ReadOneElem(io *cmsIOHANDLER, e *cmsDICelem, i uint32, baseOffset uint32) bool

Read a single element

func ReadOneMLUC

func ReadOneMLUC(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, e *cmsDICelem, i uint32, mlu **cmsMLU) bool

Read an MLUC element

func ReadOneWChar

func ReadOneWChar(io *cmsIOHANDLER, e *cmsDICelem, i uint32) (string, bool)

func ReadPositionTable

func ReadPositionTable(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, count, baseOffset uint32, cargo any, elementFn PositionTableEntryFn) bool

func ReadSeqID

func ReadSeqID(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, cargo any, n, sizeOfTag uint32) bool

******************************************************************************** Type CmsSigProfileSequenceIdType ********************************************************************************

In certain workflows using ICC Device Link Profiles, it is necessary to identify the original profiles that were combined to create the Device Link Profile. This type is an array of structures, each of which contains information for identification of a profile used in a sequence

func ReadSetOfCurves

func ReadSetOfCurves(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, offset, nCurves uint32) *cmsStage

func ReadStruct

func ReadStruct[T any](io *cmsIOHANDLER, endian binary.ByteOrder, count uint32) (T, error)

func RegisterTypesPlugin

func RegisterTypesPlugin(mm mem.Manager, id CmsContext, Data PluginIntrfc, pos cmsMemoryClient) bool

Register a new type handler. This routine is shared between normal types and MPE.

func Remove1Op

func Remove1Op(mm mem.Manager, Lut *cmsPipeline, UnaryOp cmsStageSignature) bool

_Remove1Op removes all identities in the chain.

func Remove2Op

func Remove2Op(mm mem.Manager, Lut *cmsPipeline, Op1, Op2 cmsStageSignature) bool

_Remove2Op removes two adjacent elements if they match the specified types.

func RemoveElement

func RemoveElement(mm mem.Manager, head **cmsStage)

_RemoveElement removes an element from the linked chain.

func ReverseFloat

func ReverseFloat(value float32, reverse bool) float32

func RootOfLeastSquaresFitQuadraticCurve

func RootOfLeastSquaresFitQuadraticCurve(n int, x []float64, y []float64) float64

RootOfLeastSquaresFitQuadraticCurve calculates the root of a least squares fit quadratic curve to data. Reference: http://www.personal.psu.edu/jhm/f90/lectures/lsq2.html

func SWAPFIRST_SH

func SWAPFIRST_SH(s uint32) uint32

func SaveDescription

func SaveDescription(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, text *cmsMLU) bool

func SaveOneChromaticity

func SaveOneChromaticity(x, y float64, io *cmsIOHANDLER) bool

SaveOneChromaticity writes a single chromaticity point.

func SaveTags

func SaveTags(mm mem.Manager, Icc *cmsICCPROFILE, FileOrig *cmsICCPROFILE) bool

SaveTags dumps tag contents. If the profile is being modified, untouched tags are copied from FileOrig.

func SearchIntent

func SearchIntent(ContextID CmsContext, Intent uint32) *cmsIntentsList

SearchIntent translates the given function

func SearchMLUEntry

func SearchMLUEntry(mlu *cmsMLU, LanguageCode, CountryCode uint16) int

SearchMLUEntry searches for a specific entry in the MLU based on language and country codes.

func SearchOneTag

func SearchOneTag(Profile *cmsICCPROFILE, sig cmsTagSignature) int

Search for a specific tag in the tag dictionary

func SetLinks(Icc *cmsICCPROFILE) bool

SetLinks fills the offset and size fields for all linked tags.

func SetMatShaper

func SetMatShaper(mm mem.Manager, Dest *cmsPipeline, Curve1 [3]*CmsToneCurve, Mat *cmsMAT3, Off *cmsVEC3, Curve2 [3]*CmsToneCurve, OutputFormat *uint32) bool

func SetSeqDescTag

func SetSeqDescTag(mm mem.Manager, hProfile CmsHPROFILE, Model []byte) bool

func SetTextTags

func SetTextTags(mm mem.Manager, hProfile CmsHPROFILE, Description []uint16) bool

func SetTransformUserData

func SetTransformUserData(cmmCargo *cmsTRANSFORM, ptr unsafe.Pointer, freePrivateDataFn cmsFreeUserDataFn)

SetTransformUserData sets the user-defined data and its cleanup function.

func SetWhitePoint

func SetWhitePoint(wtPt *cmsCIEXYZ, src *cmsCIEXYZ)

func SliceToLab

func SliceToLab(f []float64) cmsCIELab

func SliceToMat

func SliceToMat(s []float64) cmsMAT3

func SliceToVec

func SliceToVec(s []float64) cmsVEC3

func SlopeLimiting

func SlopeLimiting(g *CmsToneCurve)

Normalize endpoints by slope limiting max and min. This assures endpoints as well. Descending curves are handled as well.

func Sqr

func Sqr(v float64) float64

func StringToUTF16Slice

func StringToUTF16Slice(s string) []uint16

StringToUTF16Slice converts a Go string to a slice of uint16 for wide characters. StringToUTF16Slice converts a Go string to a UTF-16 encoded []uint16 (with null terminator)

func SwapFirstFloat

func SwapFirstFloat(wIn []float32, nChan uint32)

func T_BYTES

func T_BYTES(b uint32) uint32

func T_CHANNELS

func T_CHANNELS(c uint32) uint32

func T_COLORSPACE

func T_COLORSPACE(s uint32) uint32

func T_DOSWAP

func T_DOSWAP(e uint32) uint32

func T_ENDIAN16

func T_ENDIAN16(e uint32) uint32

func T_EXTRA

func T_EXTRA(e uint32) uint32

func T_FLAVOR

func T_FLAVOR(s uint32) uint32

func T_FLOAT

func T_FLOAT(a uint32) uint32

func T_OPTIMIZED

func T_OPTIMIZED(o uint32) uint32

func T_PLANAR

func T_PLANAR(p uint32) uint32

func T_PREMUL

func T_PREMUL(m uint32) uint32

func T_SWAPFIRST

func T_SWAPFIRST(s uint32) uint32

func Temp2CHAD

func Temp2CHAD(Chad *cmsMAT3, Temp float64)

Compute a CHAD based on a given temperature

func TetrahedralInterp16

func TetrahedralInterp16(mm mem.Manager, Input []uint16, Output []uint16, p *cmsInterpParams)

func TetrahedralInterpFloat

func TetrahedralInterpFloat(mm mem.Manager, Input, Output []float32, p *cmsInterpParams)

TetrahedralInterpFloat — 3D tetrahedral for float32 (no K split).

func TransformOnePixelWithGamutCheck

func TransformOnePixelWithGamutCheck(mm mem.Manager, p *cmsTRANSFORM, wIn, wOut []uint16)

Auxiliary: Handle precalculated gamut check. The retrieval of context may be alittle bit slow, but this function is not critical.

func TranslateNonICCIntents

func TranslateNonICCIntents(Intent uint32) uint32

func TrilinearInterp16

func TrilinearInterp16(mm mem.Manager, Input []uint16, Output []uint16, p *cmsInterpParams)

TrilinearInterp16 performs trilinear interpolation for 16-bit values.

func TrilinearInterpFloat

func TrilinearInterpFloat(mm mem.Manager, Input []float32, Output []float32, p *cmsInterpParams)

TrilinearInterpFloat performs trilinear interpolation for floating-point values.

func TypeChromaticityDup

func TypeChromaticityDup(mm mem.Manager, self *cmsTagTypeHandler, ptr any, n uint32) any

Type_Chromaticity_Dup duplicates a Chromaticity structure.

func TypeChromaticityFree

func TypeChromaticityFree(mm mem.Manager, self *cmsTagTypeHandler, ptr any)

Type_Chromaticity_Free frees the memory allocated for a Chromaticity structure.

func TypeChromaticityRead

func TypeChromaticityRead(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, nItems *uint32, sizeOfTag uint32) any

Type_Chromaticity_Read reads a Chromaticity type from the IO handler.

func TypeChromaticityWrite

func TypeChromaticityWrite(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, ptr any, nItems uint32) bool

Type_Chromaticity_Write writes a Chromaticity type to the IO handler.

func TypeColorantOrderTypeDup

func TypeColorantOrderTypeDup(mm mem.Manager, self *cmsTagTypeHandler, ptr any, n uint32) any

func TypeColorantOrderTypeFree

func TypeColorantOrderTypeFree(mm mem.Manager, self *cmsTagTypeHandler, ptr any)

func TypeColorantOrderTypeRead

func TypeColorantOrderTypeRead(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, nItems *uint32, sizeOfTag uint32) any

func TypeColorantOrderTypeWrite

func TypeColorantOrderTypeWrite(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, ptr any, nItems uint32) bool

func TypeColorantTableDup

func TypeColorantTableDup(mm mem.Manager, self *cmsTagTypeHandler, ptr any, n uint32) any

func TypeColorantTableFree

func TypeColorantTableFree(mm mem.Manager, self *cmsTagTypeHandler, ptr any)

func TypeColorantTableRead

func TypeColorantTableRead(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, nItems *uint32, sizeOfTag uint32) any

func TypeColorantTableWrite

func TypeColorantTableWrite(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, ptr any, nItems uint32) bool

func TypeCrdInfoDup

func TypeCrdInfoDup(mm mem.Manager, self *cmsTagTypeHandler, ptr any, nItems uint32) any

func TypeCrdInfoFree

func TypeCrdInfoFree(mm mem.Manager, self *cmsTagTypeHandler, ptr any)

func TypeCrdInfoRead

func TypeCrdInfoRead(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, nItems *uint32, sizeOfTag uint32) any

func TypeCrdInfoWrite

func TypeCrdInfoWrite(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, ptr any, nItems uint32) bool

func TypeCurveDup

func TypeCurveDup(mm mem.Manager, self *cmsTagTypeHandler, ptr any, n uint32) any

func TypeCurveFree

func TypeCurveFree(mm mem.Manager, self *cmsTagTypeHandler, ptr any)

func TypeCurveRead

func TypeCurveRead(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, nItems *uint32, sizeOfTag uint32) any

func TypeCurveWrite

func TypeCurveWrite(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, ptr any, nItems uint32) bool

func TypeDataDup

func TypeDataDup(mm mem.Manager, self *cmsTagTypeHandler, ptr any, n uint32) any

func TypeDataFree

func TypeDataFree(mm mem.Manager, self *cmsTagTypeHandler, ptr any)

func TypeDataRead

func TypeDataRead(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, nItems *uint32, sizeOfTag uint32) any

******************************************************************************** Type CmsSigDataType ********************************************************************************

func TypeDataWrite

func TypeDataWrite(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, ptr any, nItems uint32) bool

func TypeDateTimeDup

func TypeDateTimeDup(mm mem.Manager, self *cmsTagTypeHandler, ptr any, n uint32) any

func TypeDateTimeFree

func TypeDateTimeFree(mm mem.Manager, self *cmsTagTypeHandler, ptr any)

func TypeDateTimeRead

func TypeDateTimeRead(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, nItems *uint32, sizeOfTag uint32) any

A 12-byte value representation of the time and date, where the byte usage is assigned as specified in table 1. The actual values are encoded as 16-bit unsigned integers (uInt16Number - see 5.1.6).

All the dateTimeNumber values in a profile shall be in Coordinated Universal Time (UTC, also known as GMT or ZULU Time). Profile writers are required to convert local time to UTC when setting these values. Programs that display these values may show the dateTimeNumber as UTC, show the equivalent local time (at current locale), or display both UTC and local versions of the dateTimeNumber.

func TypeDateTimeWrite

func TypeDateTimeWrite(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, ptr any, nItems uint32) bool

func TypeDictionaryDup

func TypeDictionaryDup(mm mem.Manager, self *cmsTagTypeHandler, ptr any, nItems uint32) any

func TypeDictionaryFree

func TypeDictionaryFree(mm mem.Manager, self *cmsTagTypeHandler, ptr any)

func TypeDictionaryRead

func TypeDictionaryRead(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, nItems *uint32, sizeOfTag uint32) any

func TypeDictionaryWrite

func TypeDictionaryWrite(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, ptr any, nItems uint32) bool

func TypeLUT8Dup

func TypeLUT8Dup(mm mem.Manager, self *cmsTagTypeHandler, ptr any, nItems uint32) any

func TypeLUT8Free

func TypeLUT8Free(mm mem.Manager, self *cmsTagTypeHandler, ptr any)

func TypeLUT8Read

func TypeLUT8Read(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, nItems *uint32, sizeOfTag uint32) any

func TypeLUT8Write

func TypeLUT8Write(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, ptr any, nItems uint32) bool

func TypeLUT16Dup

func TypeLUT16Dup(mm mem.Manager, self *cmsTagTypeHandler, ptr any, n uint32) any

func TypeLUT16Free

func TypeLUT16Free(mm mem.Manager, self *cmsTagTypeHandler, ptr any)

func TypeLUT16Read

func TypeLUT16Read(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, nItems *uint32, sizeOfTag uint32) any

func TypeLUT16Write

func TypeLUT16Write(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, ptr any, nItems uint32) bool

func TypeLUTA2BDup

func TypeLUTA2BDup(mm mem.Manager, self *cmsTagTypeHandler, ptr any, n uint32) any

func TypeLUTA2BFree

func TypeLUTA2BFree(mm mem.Manager, self *cmsTagTypeHandler, ptr any)

func TypeLUTA2BRead

func TypeLUTA2BRead(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, nItems *uint32, sizeOfTag uint32) any

This structure represents a colour transform. The type contains up to five processing elements which are stored in the AtoBTag tag in the following order: a set of one dimensional curves, a 3 by 3 matrix with offset terms, a set of one dimensional curves, a multidimensional lookup table, and a set of one dimensional output curves. Data are processed using these elements via the following sequence:

("A" curves) -> (multidimensional lookup table - CLUT) -> ("M" curves) -> (matrix) -> ("B" curves).

It is possible to use any or all of these processing elements. At least one processing element must be included.Only the following combinations are allowed:

B M - Matrix - B A - CLUT - B A - CLUT - M - Matrix - B

func TypeLUTA2BWrite

func TypeLUTA2BWrite(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, ptr any, nItems uint32) bool

func TypeLUTB2ADup

func TypeLUTB2ADup(mm mem.Manager, self *cmsTagTypeHandler, ptr any, nItems uint32) any

func TypeLUTB2AFree

func TypeLUTB2AFree(mm mem.Manager, self *cmsTagTypeHandler, ptr any)

func TypeLUTB2ARead

func TypeLUTB2ARead(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, nItems *uint32, sizeOfTag uint32) any

func TypeLUTB2AWrite

func TypeLUTB2AWrite(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, ptr any, nItems uint32) bool

func TypeMLUDup

func TypeMLUDup(mm mem.Manager, self *cmsTagTypeHandler, ptr any, n uint32) any

func TypeMLUFree

func TypeMLUFree(mm mem.Manager, self *cmsTagTypeHandler, ptr any)

func TypeMLURead

func TypeMLURead(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, nItems *uint32, sizeOfTag uint32) any

******************************************************************************** Type CmsSigMultiLocalizedUnicodeType ********************************************************************************

Do NOT trust SizeOfTag as there is an issue on the definition of profileSequenceDescTag. See the TechNote from
Max Derhak and Rohit Patil about this: basically the size of the string table should be guessed and cannot be
taken from the size of tag if this tag is embedded as part of bigger structures (profileSequenceDescTag, for instance)

func TypeMLUWrite

func TypeMLUWrite(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, ptr any, nItems uint32) bool

func TypeMPEDup

func TypeMPEDup(mm mem.Manager, self *cmsTagTypeHandler, ptr any, nItems uint32) any

func TypeMPEFree

func TypeMPEFree(mm mem.Manager, self *cmsTagTypeHandler, ptr any)

func TypeMPERead

func TypeMPERead(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, nItems *uint32, sizeOfTag uint32) any

func TypeMPEWrite

func TypeMPEWrite(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, ptr any, nItems uint32) bool

func TypeMPEclutRead

func TypeMPEclutRead(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, nItems *uint32, sizeOfTag uint32) any

func TypeMPEclutWrite

func TypeMPEclutWrite(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, ptr any, nItems uint32) bool

func TypeMPEcurveRead

func TypeMPEcurveRead(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, nItems *uint32, sizeOfTag uint32) any

Type_MPEcurve_Read reads MPE curve type

func TypeMPEcurveWrite

func TypeMPEcurveWrite(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, ptr any, nItems uint32) bool

Type_MPEcurve_Write writes the MPE curve type

func TypeMPEmatrixRead

func TypeMPEmatrixRead(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, nItems *uint32, sizeOfTag uint32) any

func TypeMPEmatrixWrite

func TypeMPEmatrixWrite(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, ptr any, nItems uint32) bool

func TypeMeasurementDup

func TypeMeasurementDup(mm mem.Manager, self *cmsTagTypeHandler, ptr any, n uint32) any

func TypeMeasurementFree

func TypeMeasurementFree(mm mem.Manager, self *cmsTagTypeHandler, ptr any)

func TypeMeasurementRead

func TypeMeasurementRead(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, nItems *uint32, sizeOfTag uint32) any

The measurementType information refers only to the internal profile data and is meant to provide profile makers an alternative to the default measurement specifications.

func TypeMeasurementWrite

func TypeMeasurementWrite(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, ptr any, nItems uint32) bool

func TypeNamedColorDup

func TypeNamedColorDup(mm mem.Manager, self *cmsTagTypeHandler, ptr any, n uint32) any

func TypeNamedColorFree

func TypeNamedColorFree(mm mem.Manager, self *cmsTagTypeHandler, ptr any)

func TypeNamedColorRead

func TypeNamedColorRead(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, nItems *uint32, sizeOfTag uint32) any

******************************************************************************** Type CmsSigNamedColor2Type ********************************************************************************

The namedColor2Type is a count value and array of structures that provide color coordinates for 7-bit ASCII color names. For each named color, a PCS and optional device representation of the color are given. Both representations are 16-bit values. The device representation corresponds to the header's 'color space of data' field. This representation should be consistent with the 'number of device components' field in the namedColor2Type. If this field is 0, device coordinates are not provided. The PCS representation corresponds to the header's PCS field. The PCS representation is always provided. Color names are fixed-length, 32-byte fields including null termination. In order to maintain maximum portability, it is strongly recommended that special characters of the 7-bit ASCII set not be used.

func TypeNamedColorWrite

func TypeNamedColorWrite(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, ptr any, nItems uint32) bool

func TypeParametricCurveDup

func TypeParametricCurveDup(mm mem.Manager, self *cmsTagTypeHandler, ptr any, n uint32) any

TypeParametricCurveDup duplicates a parametric curve.

func TypeParametricCurveFree

func TypeParametricCurveFree(mm mem.Manager, self *cmsTagTypeHandler, ptr any)

TypeParametricCurveFree frees a parametric curve.

func TypeParametricCurveRead

func TypeParametricCurveRead(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, nItems *uint32, SizeOfTag uint32) any

TypeParametricCurveRead reads a parametric curve from the IO handler.

func TypeParametricCurveWrite

func TypeParametricCurveWrite(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, ptr any, nItems uint32) bool

TypeParametricCurveWrite writes a parametric curve to the IO handler.

func TypeProfileSequenceDescDup

func TypeProfileSequenceDescDup(mm mem.Manager, self *cmsTagTypeHandler, ptr any, n uint32) any

func TypeProfileSequenceDescFree

func TypeProfileSequenceDescFree(mm mem.Manager, self *cmsTagTypeHandler, ptr any)

func TypeProfileSequenceDescRead

func TypeProfileSequenceDescRead(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, nItems *uint32, sizeOfTag uint32) any

func TypeProfileSequenceDescWrite

func TypeProfileSequenceDescWrite(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, ptr any, nItems uint32) bool

func TypeProfileSequenceIdDup

func TypeProfileSequenceIdDup(mm mem.Manager, self *cmsTagTypeHandler, ptr any, nItems uint32) any

func TypeProfileSequenceIdFree

func TypeProfileSequenceIdFree(mm mem.Manager, self *cmsTagTypeHandler, ptr any)

func TypeProfileSequenceIdRead

func TypeProfileSequenceIdRead(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, nItems *uint32, sizeOfTag uint32) any

func TypeProfileSequenceIdWrite

func TypeProfileSequenceIdWrite(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, ptr any, nItems uint32) bool

func TypeS15Fixed16Dup

func TypeS15Fixed16Dup(mm mem.Manager, self *cmsTagTypeHandler, ptr any, n uint32) any

func TypeS15Fixed16Free

func TypeS15Fixed16Free(mm mem.Manager, self *cmsTagTypeHandler, ptr any)

func TypeS15Fixed16Read

func TypeS15Fixed16Read(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, nItems *uint32, sizeOfTag uint32) any

func TypeS15Fixed16Write

func TypeS15Fixed16Write(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, ptr any, nItems uint32) bool

func TypeScreeningDup

func TypeScreeningDup(mm mem.Manager, self *cmsTagTypeHandler, ptr any, n uint32) any

func TypeScreeningFree

func TypeScreeningFree(mm mem.Manager, self *cmsTagTypeHandler, ptr any)

func TypeScreeningRead

func TypeScreeningRead(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, nItems *uint32, sizeOfTag uint32) any

******************************************************************************** Type CmsSigScreeningType ********************************************************************************

The screeningType describes various screening parameters including screen frequency, screening angle, and spot shape.

func TypeScreeningWrite

func TypeScreeningWrite(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, ptr any, nItems uint32) bool

func TypeSignatureDup

func TypeSignatureDup(mm mem.Manager, self *cmsTagTypeHandler, ptr any, n uint32) any

TypeSignatureDup duplicates a CmsSignature.

func TypeSignatureFree

func TypeSignatureFree(mm mem.Manager, self *cmsTagTypeHandler, ptr any)

func TypeSignatureRead

func TypeSignatureRead(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, nItems *uint32, sizeOfTag uint32) any

******************************************************************************** Type CmsSigSignatureType ********************************************************************************

The signatureType contains a four-byte sequence, Sequences of less than four characters are padded at the end with spaces, 20h. Typically this type is used for registered tags that can be displayed on many development systems as a sequence of four characters. TypeSignatureRead reads a CmsSignature from the io handler.

func TypeSignatureWrite

func TypeSignatureWrite(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, ptr any, nItems uint32) bool

TypeSignatureWrite writes a CmsSignature to the io handler.

func TypeTextDescriptionDup

func TypeTextDescriptionDup(mm mem.Manager, self *cmsTagTypeHandler, ptr any, nItems uint32) any

Type_Text_Description_Dup duplicates a cmsMLU object

func TypeTextDescriptionFree

func TypeTextDescriptionFree(mm mem.Manager, self *cmsTagTypeHandler, ptr any)

Type_Text_Description_Free frees a cmsMLU object

func TypeTextDescriptionRead

func TypeTextDescriptionRead(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, nItems *uint32, sizeOfTag uint32) any

func TypeTextDescriptionWrite

func TypeTextDescriptionWrite(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, ptr any, nItems uint32) bool

This tag can come IN UNALIGNED SIZE. In order to prevent issues, we force zeros on description to align it Type_Text_Description_Write writes a text description tag

func TypeTextDup

func TypeTextDup(mm mem.Manager, self *cmsTagTypeHandler, ptr any, n uint32) any

Type_Text_Dup duplicates a text type structure.

func TypeTextFree

func TypeTextFree(mm mem.Manager, self *cmsTagTypeHandler, ptr any)

Type_Text_Free frees a text type structure.

func TypeTextRead

func TypeTextRead(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, nItems *uint32, sizeOfTag uint32) any

Type_Text_Read reads a text type structure from the io handler.

func TypeTextWrite

func TypeTextWrite(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, ptr any, nItems uint32) bool

Type_Text_Write writes a text type structure to the io handler.

func TypeU16Fixed16Dup

func TypeU16Fixed16Dup(mm mem.Manager, self *cmsTagTypeHandler, ptr any, n uint32) any

func TypeU16Fixed16Free

func TypeU16Fixed16Free(mm mem.Manager, self *cmsTagTypeHandler, ptr any)

func TypeU16Fixed16Read

func TypeU16Fixed16Read(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, nItems *uint32, sizeOfTag uint32) any

func TypeU16Fixed16Write

func TypeU16Fixed16Write(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, ptr any, nItems uint32) bool

func TypeUcrBgDup

func TypeUcrBgDup(mm mem.Manager, self *cmsTagTypeHandler, ptr any, n uint32) any

func TypeUcrBgFree

func TypeUcrBgFree(mm mem.Manager, self *cmsTagTypeHandler, ptr any)

func TypeUcrBgRead

func TypeUcrBgRead(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, nItems *uint32, sizeOfTag uint32) any

******************************************************************************** Type CmsSigUcrBgType ********************************************************************************

This type contains curves representing the under color removal and black generation and a text string which is a general description of the method used for the ucr/bg.

func TypeUcrBgWrite

func TypeUcrBgWrite(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, ptr any, nItems uint32) bool

func TypeVcgtDup

func TypeVcgtDup(mm mem.Manager, self *cmsTagTypeHandler, ptr any, n uint32) any

func TypeVcgtFree

func TypeVcgtFree(mm mem.Manager, self *cmsTagTypeHandler, ptr any)

func TypeVcgtRead

func TypeVcgtRead(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, nItems *uint32, sizeOfTag uint32) any

func TypeVcgtWrite

func TypeVcgtWrite(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, ptr any, nItems uint32) bool

func TypeVideoSignalDup

func TypeVideoSignalDup(mm mem.Manager, self *cmsTagTypeHandler, ptr any, n uint32) any

Duplicate a video signal tag

func TypeVideoSignalFree

func TypeVideoSignalFree(mm mem.Manager, self *cmsTagTypeHandler, ptr any)

Free a video signal tag

func TypeVideoSignalRead

func TypeVideoSignalRead(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, nItems *uint32, sizeOfTag uint32) any

Read a video signal tag

func TypeVideoSignalWrite

func TypeVideoSignalWrite(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, ptr any, nItems uint32) bool

Write a video signal tag

func TypeViewingConditionsDup

func TypeViewingConditionsDup(mm mem.Manager, self *cmsTagTypeHandler, ptr any, n uint32) any

func TypeViewingConditionsFree

func TypeViewingConditionsFree(mm mem.Manager, self *cmsTagTypeHandler, ptr any)

func TypeViewingConditionsRead

func TypeViewingConditionsRead(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, nItems *uint32, sizeOfTag uint32) any

func TypeViewingConditionsWrite

func TypeViewingConditionsWrite(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, ptr any, nItems uint32) bool

func TypeXYZDup

func TypeXYZDup(mm mem.Manager, self *cmsTagTypeHandler, ptr any, n uint32) any

Type_XYZ_Dup duplicates XYZ color space data.

func TypeXYZFree

func TypeXYZFree(mm mem.Manager, self *cmsTagTypeHandler, ptr any)

Type_XYZ_Free frees XYZ color space data.

func TypeXYZRead

func TypeXYZRead(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, nItems *uint32, SizeOfTag uint32) any

Type_XYZ_Read reads XYZ color space data.

func TypeXYZWrite

func TypeXYZWrite(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, ptr any, nItems uint32) bool

Type_XYZ_Write writes XYZ color space data.

func Uint16sToBytesLE

func Uint16sToBytesLE(src []uint16) []byte

func Unroll1Byte

func Unroll1Byte(mm mem.Manager, info *cmsTRANSFORM, wIn []uint16, accum []uint8, stride uint32) []uint8

Unroll1Byte duplicates L into RGB channels for monochrome data.

func Unroll1ByteReversed

func Unroll1ByteReversed(mm mem.Manager, info *cmsTRANSFORM, wIn []uint16, accum []uint8, stride uint32) []uint8

Unroll1ByteReversed processes monochrome data with reversed flavor.

func Unroll1ByteSkip1

func Unroll1ByteSkip1(mm mem.Manager, info *cmsTRANSFORM, wIn []uint16, accum []uint8, stride uint32) []uint8

Unroll1ByteSkip1 processes monochrome data, skipping one channel.

func Unroll1ByteSkip2

func Unroll1ByteSkip2(mm mem.Manager, info *cmsTRANSFORM, wIn []uint16, accum []uint8, stride uint32) []uint8

Unroll1ByteSkip2 processes monochrome data, skipping two channels.

func Unroll1Word

func Unroll1Word(mm mem.Manager, info *cmsTRANSFORM, wIn []uint16, accum []uint8, stride uint32) []uint8

func Unroll1WordReversed

func Unroll1WordReversed(mm mem.Manager, info *cmsTRANSFORM, wIn []uint16, accum []uint8, stride uint32) []uint8

func Unroll1WordSkip3

func Unroll1WordSkip3(mm mem.Manager, info *cmsTRANSFORM, wIn []uint16, accum []uint8, stride uint32) []uint8

func Unroll2Bytes

func Unroll2Bytes(mm mem.Manager, info *cmsTRANSFORM, wIn []uint16, accum []uint8, stride uint32) []uint8

Unroll2Bytes processes duplex values from 8-bit input.

func Unroll2Words

func Unroll2Words(mm mem.Manager, info *cmsTRANSFORM, wIn []uint16, accum []uint8, stride uint32) []uint8

func Unroll3Bytes

func Unroll3Bytes(mm mem.Manager, info *cmsTRANSFORM, wIn []uint16, accum []uint8, stride uint32) []uint8

Unroll3Bytes processes 3 bytes in RGB order.

func Unroll3BytesSkip1Swap

func Unroll3BytesSkip1Swap(mm mem.Manager, info *cmsTRANSFORM, wIn []uint16, accum []uint8, stride uint32) []uint8

Unroll3BytesSkip1Swap processes 3 bytes, skips 1 (A), and swaps to BRG order.

func Unroll3BytesSkip1SwapFirst

func Unroll3BytesSkip1SwapFirst(mm mem.Manager, info *cmsTRANSFORM, wIn []uint16, accum []uint8, stride uint32) []uint8

Unroll3BytesSkip1SwapFirst processes 3 bytes, skips 1 (A), and places R first.

func Unroll3BytesSkip1SwapSwapFirst

func Unroll3BytesSkip1SwapSwapFirst(mm mem.Manager, info *cmsTRANSFORM, wIn []uint16, accum []uint8, stride uint32) []uint8

Unroll3BytesSkip1SwapSwapFirst processes 3 bytes, skips 1 (A), and swaps to BRG order with the first byte swapped.

func Unroll3BytesSwap

func Unroll3BytesSwap(mm mem.Manager, info *cmsTRANSFORM, wIn []uint16, accum []uint8, stride uint32) []uint8

Unroll3BytesSwap processes 3 bytes in BRG order.

func Unroll3Words

func Unroll3Words(mm mem.Manager, info *cmsTRANSFORM, wIn []uint16, accum []uint8, stride uint32) []uint8

func Unroll3WordsSkip1Swap

func Unroll3WordsSkip1Swap(mm mem.Manager, info *cmsTRANSFORM, wIn []uint16, accum []uint8, stride uint32) []uint8

func Unroll3WordsSkip1SwapFirst

func Unroll3WordsSkip1SwapFirst(mm mem.Manager, info *cmsTRANSFORM, wIn []uint16, accum []uint8, stride uint32) []uint8

func Unroll3WordsSwap

func Unroll3WordsSwap(mm mem.Manager, info *cmsTRANSFORM, wIn []uint16, accum []uint8, stride uint32) []uint8

func Unroll4Bytes

func Unroll4Bytes(mm mem.Manager, info *cmsTRANSFORM, wIn []uint16, accum []uint8, stride uint32) []uint8

Unroll4Bytes processes 4 bytes in sequence.

func Unroll4BytesReverse

func Unroll4BytesReverse(mm mem.Manager, info *cmsTRANSFORM, wIn []uint16, accum []uint8, stride uint32) []uint8

Unroll4BytesReverse processes 4 bytes with reverse flavor applied.

func Unroll4BytesSwap

func Unroll4BytesSwap(mm mem.Manager, info *cmsTRANSFORM, wIn []uint16, accum []uint8, stride uint32) []uint8

Unroll4BytesSwap processes 4 bytes in KYMC order.

func Unroll4BytesSwapFirst

func Unroll4BytesSwapFirst(mm mem.Manager, info *cmsTRANSFORM, wIn []uint16, accum []uint8, stride uint32) []uint8

Unroll4BytesSwapFirst processes 4 bytes with the first byte swapped to the last position.

func Unroll4BytesSwapSwapFirst

func Unroll4BytesSwapSwapFirst(mm mem.Manager, info *cmsTRANSFORM, wIn []uint16, accum []uint8, stride uint32) []uint8

Unroll4BytesSwapSwapFirst processes 4 bytes in swapped order with the first byte swapped.

func Unroll4Words

func Unroll4Words(mm mem.Manager, info *cmsTRANSFORM, wIn []uint16, accum []uint8, stride uint32) []uint8

func Unroll4WordsReverse

func Unroll4WordsReverse(mm mem.Manager, info *cmsTRANSFORM, wIn []uint16, accum []uint8, stride uint32) []uint8

func Unroll4WordsSwap

func Unroll4WordsSwap(mm mem.Manager, info *cmsTRANSFORM, wIn []uint16, accum []uint8, stride uint32) []uint8

func Unroll4WordsSwapFirst

func Unroll4WordsSwapFirst(mm mem.Manager, info *cmsTRANSFORM, wIn []uint16, accum []uint8, stride uint32) []uint8

func Unroll4WordsSwapSwapFirst

func Unroll4WordsSwapSwapFirst(mm mem.Manager, info *cmsTRANSFORM, wIn []uint16, accum []uint8, stride uint32) []uint8

func Unroll8ToFloat

func Unroll8ToFloat(mm mem.Manager, info *cmsTRANSFORM, wIn []float32, accum []uint8, Stride uint32) []uint8

func Unroll16ToFloat

func Unroll16ToFloat(mm mem.Manager, info *cmsTRANSFORM, wIn []float32, accum []uint8, Stride uint32) []uint8

func UnrollALabV2_8

func UnrollALabV2_8(mm mem.Manager, info *cmsTRANSFORM, wIn []uint16, accum []uint8, stride uint32) []uint8

UnrollALabV2_8 processes ALab values from 8-bit input, skipping the alpha channel.

func UnrollALabV2_8ToFloat

func UnrollALabV2_8ToFloat(mm mem.Manager, info *cmsTRANSFORM, wIn []float32, accum []uint8, Stride uint32) []uint8

func UnrollAnyWords

func UnrollAnyWords(mm mem.Manager, info *cmsTRANSFORM, wIn []uint16, accum []uint8, stride uint32) []uint8

func UnrollAnyWordsPremul

func UnrollAnyWordsPremul(mm mem.Manager, info *cmsTRANSFORM, wIn []uint16, accum []uint8, stride uint32) []uint8

func UnrollChunkyBytes

func UnrollChunkyBytes(mm mem.Manager, info *cmsTRANSFORM, wIn []uint16, accum []uint8, stride uint32) []uint8

Unpacking routines (16 bits) ----------------------------------------------------------------------------------------

func UnrollDouble1Chan

func UnrollDouble1Chan(mm mem.Manager, info *cmsTRANSFORM, wIn []uint16, accum []uint8, Stride uint32) []uint8

func UnrollDoubleTo16

func UnrollDoubleTo16(mm mem.Manager, info *cmsTRANSFORM, wIn []uint16, accum []uint8, Stride uint32) []uint8

func UnrollDoublesToFloat

func UnrollDoublesToFloat(mm mem.Manager, info *cmsTRANSFORM, wIn []float32, accum []uint8, Stride uint32) []uint8

func UnrollFloatTo16

func UnrollFloatTo16(mm mem.Manager, info *cmsTRANSFORM, wIn []uint16, accum []uint8, Stride uint32) []uint8

func UnrollFloatsToFloat

func UnrollFloatsToFloat(mm mem.Manager, info *cmsTRANSFORM, wIn []float32, accum []uint8, Stride uint32) []uint8

func UnrollHalfTo16

func UnrollHalfTo16(mm mem.Manager, info *cmsTRANSFORM, wIn []uint16, accum []uint8, stride uint32) []uint8

func UnrollHalfToFloat

func UnrollHalfToFloat(mm mem.Manager, info *cmsTRANSFORM, wIn []float32, accum []uint8, stride uint32) []uint8

func UnrollLabDoubleTo16

func UnrollLabDoubleTo16(mm mem.Manager, info *cmsTRANSFORM, wIn []uint16, accum []uint8, stride uint32) []uint8

func UnrollLabDoubleToFloat

func UnrollLabDoubleToFloat(mm mem.Manager, info *cmsTRANSFORM, wIn []float32, accum []uint8, stride uint32) []uint8

func UnrollLabFloatTo16

func UnrollLabFloatTo16(mm mem.Manager, info *cmsTRANSFORM, wIn []uint16, accum []uint8, stride uint32) []uint8

func UnrollLabFloatToFloat

func UnrollLabFloatToFloat(mm mem.Manager, info *cmsTRANSFORM, wIn []float32, accum []uint8, stride uint32) []uint8

func UnrollLabV2_8

func UnrollLabV2_8(mm mem.Manager, info *cmsTRANSFORM, wIn []uint16, accum []uint8, stride uint32) []uint8

UnrollLabV2_8 processes Lab values from 8-bit input and converts them to 16-bit.

func UnrollLabV2_8ToFloat

func UnrollLabV2_8ToFloat(mm mem.Manager, info *cmsTRANSFORM, wIn []float32, accum []uint8, Stride uint32) []uint8

func UnrollLabV2_16

func UnrollLabV2_16(mm mem.Manager, info *cmsTRANSFORM, wIn []uint16, accum []uint8, stride uint32) []uint8

UnrollLabV2_16 processes Lab values from 16-bit input.

func UnrollLabV2_16ToFloat

func UnrollLabV2_16ToFloat(mm mem.Manager, info *cmsTRANSFORM, wIn []float32, accum []uint8, stride uint32) []uint8

func UnrollNothing

func UnrollNothing(mm mem.Manager,
	info *cmsTRANSFORM,
	wIn []uint16,
	accum []uint8,
	Stride uint32,
) []uint8

func UnrollPlanarBytes

func UnrollPlanarBytes(mm mem.Manager, info *cmsTRANSFORM, wIn []uint16, accum []uint8, stride uint32) []uint8

func UnrollPlanarWords

func UnrollPlanarWords(mm mem.Manager, info *cmsTRANSFORM, wIn []uint16, accum []uint8, stride uint32) []uint8

func UnrollPlanarWordsPremul

func UnrollPlanarWordsPremul(mm mem.Manager, info *cmsTRANSFORM, wIn []uint16, accum []uint8, stride uint32) []uint8

func UnrollXYZDoubleTo16

func UnrollXYZDoubleTo16(mm mem.Manager, info *cmsTRANSFORM, wIn []uint16, accum []uint8, stride uint32) []uint8

func UnrollXYZDoubleToFloat

func UnrollXYZDoubleToFloat(mm mem.Manager, info *cmsTRANSFORM, wIn []float32, accum []uint8, stride uint32) []uint8

func UnrollXYZFloatTo16

func UnrollXYZFloatTo16(mm mem.Manager, info *cmsTRANSFORM, wIn []uint16, accum []uint8, stride uint32) []uint8

func UnrollXYZFloatToFloat

func UnrollXYZFloatToFloat(mm mem.Manager, info *cmsTRANSFORM, wIn []float32, accum []uint8, stride uint32) []uint8

func UpstreamVersion

func UpstreamVersion() string

func VecToSlice

func VecToSlice(vec cmsVEC3) []float64

func WhitesAreEqual

func WhitesAreEqual(n uint32, White1, White2 []uint16) bool

func Write8bitTables

func Write8bitTables(ContextID CmsContext, io *cmsIOHANDLER, n uint32, tables *cmsStageToneCurvesData) bool

func Write16bitTables

func Write16bitTables(ContextID CmsContext, io *cmsIOHANDLER, tables *cmsStageToneCurvesData) bool

func WriteCLUT

func WriteCLUT(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, precision uint8, mpe *cmsStage) bool

func WriteCountAndString

func WriteCountAndString(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, mlu *cmsMLU, section string) bool

func WriteMPECurve

func WriteMPECurve(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, cargo any, n, sizeOfTag uint32) bool

WriteMPECurve writes a curve for MPE

func WriteMatrix

func WriteMatrix(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, mpe *cmsStage) bool

func WriteOffsetArray

func WriteOffsetArray(io *cmsIOHANDLER, a *cmsDICarray, count uint32, length uint32) bool

Write offset array

func WriteOneElem

func WriteOneElem(io *cmsIOHANDLER, e *cmsDICelem, i uint32) bool

Write a single element

func WriteOneMLUC

func WriteOneMLUC(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, e *cmsDICelem, i uint32, mlu *cmsMLU, baseOffset uint32) bool

Write an MLUC element

func WriteOneWChar

func WriteOneWChar(io *cmsIOHANDLER, e *cmsDICelem, i uint32, str string, baseOffset uint32) bool

Read a single wchar string

func WritePositionTable

func WritePositionTable(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, sizeOfTag, count, baseOffset uint32, cargo any, elementFn PositionTableEntryFn) bool

func WriteSegmentedCurve

func WriteSegmentedCurve(io *cmsIOHANDLER, curve *CmsToneCurve) bool

WriteSegmentedCurve writes a single segmented curve

func WriteSeqID

func WriteSeqID(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, cargo any, n, sizeOfTag uint32) bool

func WriteSetOfCurves

func WriteSetOfCurves(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, curveType cmsTagTypeSignature, mpe *cmsStage) bool

func WriteStruct

func WriteStruct[T any](io *cmsIOHANDLER, value T, endian binary.ByteOrder) bool

func XFormSampler16

func XFormSampler16(mm mem.Manager, In, Out []uint16, cargo any) int32

func XYZ2Fix

func XYZ2Fix(d float64) uint16

XYZ Encoding and Decoding

func XYZ2Float

func XYZ2Float(v uint16) float64

Types

type CmsCIExyY

type CmsCIExyY struct {
	X_small float64
	Y_small float64
	Y_large float64 //
}

type CmsCIExyYTRIPLE

type CmsCIExyYTRIPLE struct {
	Red   CmsCIExyY
	Green CmsCIExyY
	Blue  CmsCIExyY
}

CmsCIExyYTRIPLE represents a set of primary colors (Red, Green, Blue) in the CIE xyY color space

type CmsContext

type CmsContext *CmsContextStruct
var (
	CmsContextPoolHeadMutex sync.Mutex
	CmsContextPoolHead      CmsContext
)
C-code The context pool (linked list head)  NOT IMPEMENTED NEEDS FURTHER CONSIDERATION

static _cmsMutex _cmsContextPoolHeadMutex = CMS_MUTEX_INITIALIZER; static struct _cmsContext_struct* _cmsContextPoolHead = NULL;

Mutex for context pool head

type CmsContextStruct

type CmsContextStruct struct {
	Next    CmsContext       // Points to next context in the new style
	MemPool *cmsSubAllocator // The memory pool that stores context data

	// If NULL, then it reverts to global Context0
	DefaultMemoryManager cmsMemPluginChunkType // The allocators used for creating the context itself. Cannot be overridden
	// contains filtered or unexported fields
}

Internal structure for context

type CmsHANDLE

type CmsHANDLE any // Generic handle

type CmsHPROFILE

type CmsHPROFILE any

func CmsCreateGrayProfile

func CmsCreateGrayProfile(mm mem.Manager, WhitePoint *CmsCIExyY, TransferFunction *CmsToneCurve) CmsHPROFILE

func CmsCreateLab2Profile

func CmsCreateLab2Profile(mm mem.Manager, WhitePoint *CmsCIExyY) CmsHPROFILE

func CmsCreateRGBProfile

func CmsCreateRGBProfile(mm mem.Manager, WhitePoint *CmsCIExyY, Primaries *CmsCIExyYTRIPLE, TransferFunction []*CmsToneCurve) CmsHPROFILE

func CmsCreateRGBProfileTHR

func CmsCreateRGBProfileTHR(mm mem.Manager, ContextID CmsContext, WhitePoint *CmsCIExyY, Primaries *CmsCIExyYTRIPLE, TransferFunction []*CmsToneCurve) CmsHPROFILE

func CmsCreateXYZProfile

func CmsCreateXYZProfile(mm mem.Manager) CmsHPROFILE

func CmsCreate_sRGBProfile

func CmsCreate_sRGBProfile(mm mem.Manager) CmsHPROFILE

func CmsCreate_sRGBProfileTHR

func CmsCreate_sRGBProfileTHR(mm mem.Manager, ContextID CmsContext) CmsHPROFILE

func CmsOpenProfileFromFile

func CmsOpenProfileFromFile(mm mem.Manager, ICCProfile string, sAccess string) CmsHPROFILE

func CmsOpenProfileFromMem

func CmsOpenProfileFromMem(mm mem.Manager, MemPtr any, dwSize uint32) CmsHPROFILE

type CmsHTRANSFORM

type CmsHTRANSFORM any

func CmsCreateTransform

func CmsCreateTransform(mm mem.Manager,
	Input CmsHPROFILE,
	InputFormat uint32,
	Output CmsHPROFILE,
	OutputFormat uint32,
	Intent uint32,
	dwFlags uint32,
) CmsHTRANSFORM

func CreateRoundtripXForm

func CreateRoundtripXForm(mm mem.Manager, hProfile CmsHPROFILE, nIntent uint32) CmsHTRANSFORM

CreateRoundtripXForm creates a PCS -> PCS round trip transform, always using relative intent on the device -> PCS.

type CmsICCHeader

type CmsICCHeader struct {
	Size            uint32                   // Profile size in bytes
	CmmId           cmsSignature             // CMM for this profile
	Version         uint32                   // Format version number
	DeviceClass     cmsProfileClassSignature // Type of profile
	ColorSpace      cmsColorSpaceSignature   // Color space of data
	PCS             cmsColorSpaceSignature   // PCS, XYZ or Lab only
	Date            cmsDateTimeNumber        // Date profile was created
	Magic           cmsSignature             // Magic Number to identify an ICC profile
	Platform        cmsPlatformSignature     // Primary Platform
	Flags           uint32                   // Various bit settings
	Manufacturer    cmsSignature             // Device manufacturer
	Model           uint32                   // Device model number
	Attributes      uint64                   // Device attributes
	RenderingIntent uint32                   // Rendering intent
	Illuminant      cmsEncodedXYZNumber      // Profile illuminant
	Creator         cmsSignature             // Profile creator
	ProfileID       cmsProfileID             // Profile ID using MD5
	Reserved        [28]uint8                // Reserved for future use

}

Profile header -- it is 32-bit aligned, so no issues are expected on alignment

type CmsInfoType

type CmsInfoType int

type CmsTagBase

type CmsTagBase struct {
	Sig      cmsTagTypeSignature
	Reserved [4]int8
}

ICC base tag

type CmsTagEntry

type CmsTagEntry struct {
	Sig    cmsTagSignature // The tag signature
	Offset uint32          // Start of tag
	Size   uint32          // Size in bytes

}

A tag entry in directory

type CmsToneCurve

type CmsToneCurve cms_curve_struct

func AllocateToneCurveStruct

func AllocateToneCurveStruct(mm mem.Manager,
	ContextID CmsContext,
	nEntries uint32,
	nSegments uint32,
	Segments []cmsCurveSegment,
	Values []uint16,
) *CmsToneCurve

AllocateToneCurveStruct allocates memory for a tone curve structure.

func Build_sRGBGamma

func Build_sRGBGamma(mm mem.Manager, ContextID CmsContext) *CmsToneCurve

func CmsBuildGamma

func CmsBuildGamma(mm mem.Manager, ContextID CmsContext, Gamma float64) *CmsToneCurve

Build a gamma table based on gamma constant

func ComputeKToLstar

func ComputeKToLstar(mm mem.Manager, ContextID CmsContext,
	nPoints uint32,
	nProfiles uint32,
	Intents []uint32,
	hProfiles []CmsHPROFILE,
	BPC []bool,
	AdaptationStates []float64,
	dwFlags uint32) *CmsToneCurve

Compute K -> L* relationship. Flags may include black point compensation. In this case, the relationship is assumed from the profile with BPC to a black point zero.

func ConvertToToneCurveArray

func ConvertToToneCurveArray(curves []*CmsToneCurve) [3]*CmsToneCurve

func ReadEmbeddedCurve

func ReadEmbeddedCurve(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER) *CmsToneCurve

func ReadSegmentedCurve

func ReadSegmentedCurve(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER) *CmsToneCurve

ReadSegmentedCurve reads an embedded segmented curve

type Curves16Data

type Curves16Data struct {
	ContextID CmsContext

	NCurves   uint32     // Number of curves
	NElements uint32     // Elements in curves
	Curves    [][]uint16 // Points to a dynamically allocated array
}

func CurvesAlloc

func CurvesAlloc(mm mem.Manager, ContextID CmsContext, nCurves, nElements uint32, G []*CmsToneCurve) *Curves16Data

type FILEMEM

type FILEMEM struct {
	Block            []byte // Points to allocated memory
	Size             uint32 // Size of allocated memory
	Pointer          uint32 // Points to current location
	FreeBlockOnClose bool   // Indicates if the block should be freed on close
}

FILEMEM represents the memory-based stream structure.

type FILENULL

type FILENULL struct {
	Pointer uint32 // Points to current location
}

FILENULL represents the null file structure for tracking byte usage.

type FormatterAlphaFn

type FormatterAlphaFn func(dst, src any)

Formatter function type

type GAMUTCHAIN

type GAMUTCHAIN struct {
	Threshold float64 // The threshold after which is considered out of gamut
	// contains filtered or unexported fields
}

Define the GAMUTCHAIN structure

type GrayOnlyParams

type GrayOnlyParams struct {
	Cmyk2Cmyk *cmsPipeline  // The original transform
	KTone     *CmsToneCurve // Black-to-black tone curve
}

type ISOTEMPERATURE

type ISOTEMPERATURE struct {
	Mirek float64 // Temperature in microreciprocal kelvin
	Ut    float64 // u coordinate of intersection with blackbody locus
	Vt    float64 // v coordinate of intersection with blackbody locus
	Tt    float64 // Slope of ISOTEMPERATURE line
}

ISOTEMPERATURE represents isotemperature data used for white point conversions.

type Lerp16Fn

type Lerp16Fn = func(mm mem.Manager, in, out []uint16, p *cmsInterpParams)

type MatShaper8Data

type MatShaper8Data struct {
	ContextID CmsContext

	// Shapers from 0..255 to 1.14 fixed
	Shaper1R [256]cmsS1Fixed14Number
	Shaper1G [256]cmsS1Fixed14Number
	Shaper1B [256]cmsS1Fixed14Number

	// Matrix and offset (n.14 fixed)
	Mat [3][3]cmsS1Fixed14Number
	Off [3]cmsS1Fixed14Number

	// Shapers from 1.14 fixed to 0..255
	Shaper2R [16385]uint16
	Shaper2G [16385]uint16
	Shaper2B [16385]uint16
}

type PluginIntrfc

type PluginIntrfc interface {
	// Common methods all plugins must implement
	GetBase() *cmsPluginBase
	PluginType() uint32
	GetNext() PluginIntrfc
}

cmsPluginBase represents the base structure for plugins.

type PositionTableEntryFn

type PositionTableEntryFn func(mm mem.Manager, self *cmsTagTypeHandler, io *cmsIOHANDLER, cargo any, n, SizeOfTag uint32) bool

To deal with position tables

type Prelin8Data

type Prelin8Data struct {
	ContextID CmsContext

	// Tetrahedral interpolation parameters (not-owned pointer)
	P *cmsInterpParams

	Rx [256]uint16
	Ry [256]uint16
	Rz [256]uint16

	// Precomputed nodes and offsets for 8-bit input data
	X0 [256]uint32
	Y0 [256]uint32
	Z0 [256]uint32
}

func PrelinOpt8alloc

func PrelinOpt8alloc(mm mem.Manager, ContextID CmsContext, p *cmsInterpParams, G [3]*CmsToneCurve) *Prelin8Data

type Prelin16Data

type Prelin16Data struct {
	ContextID CmsContext

	// Number of channels
	NInputs  uint32
	NOutputs uint32

	// Input curves
	EvalCurveIn16   [MAX_INPUT_DIMENSIONS]cmsInterpFn16
	ParamsCurveIn16 [MAX_INPUT_DIMENSIONS]*cmsInterpParams

	// 3D grid evaluator
	EvalCLUT   cmsInterpFn16
	CLUTParams *cmsInterpParams // Not-owned pointer

	// Output curves
	EvalCurveOut16   []cmsInterpFn16    // Points to an array of curve evaluators in 16 bits (not-owned pointer)
	ParamsCurveOut16 []*cmsInterpParams // Points to an array of references to interpolation params (not-owned pointer)
}

func PrelinOpt16alloc

func PrelinOpt16alloc(mm mem.Manager, ContextID CmsContext, ColorMap *cmsInterpParams, nInputs uint32, In []*CmsToneCurve, nOutputs uint32, Out []*CmsToneCurve) *Prelin16Data

PrelinOpt16alloc allocates and initializes Prelin16Data

type PreserveKPlaneParams

type PreserveKPlaneParams struct {
	Cmyk2Cmyk    *cmsPipeline  // The original transform
	HProofOutput CmsHTRANSFORM // Output CMYK to Lab (last profile)
	Cmyk2Lab     CmsHTRANSFORM // The input chain
	KTone        *CmsToneCurve // Black-to-black tone curve
	LabK2Cmyk    *cmsPipeline  // The output profile
	MaxError     float64       // Maximum error
	HRoundTrip   CmsHTRANSFORM // Round-trip transform
	MaxTAC       float64       // Maximum total area coverage
}

K Plane-preserving CMYK to CMYK ------------------------------------------------------------------------------------

Directories

Path Synopsis
cmd
golcms-demo command
SPDX-License-Identifier: MIT
SPDX-License-Identifier: MIT

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL