From d9b9db64caefcd952653be0aa5fb10ae4bfa076b Mon Sep 17 00:00:00 2001 From: alexiscatnip Date: Wed, 19 Jan 2022 23:07:16 +0800 Subject: [PATCH] Remove Imagesharp dlls... I forget this existed. --- Assets/InitTestScene637782234512083174.unity | 454 + ...nitTestScene637782234512083174.unity.meta} | 4 +- .../Assets/AssetTypes/AssetTexture.cs | 19 +- Assets/Plugins/LibreMetaverse/Imaging/T2D.cs | 20 + .../LibreMetaverse/Imaging/T2D.cs.meta | 3 + .../LibreMetaverseAssembly.asmdef | 4 +- .../LibreMetaverse/PrimMesher/SculptMesh.cs | 1 - Assets/Plugins/OpenJpegDotNet.dll | Bin 61952 -> 0 bytes Assets/Plugins/OpenJpegDotNet.dll.meta | 33 - Assets/Plugins/OpenJpegDotNet.xml | 1487 - Assets/Plugins/OpenJpegDotNet.xml.meta | 7 - Assets/Plugins/SixLabors.ImageSharp.dll | Bin 1211904 -> 0 bytes Assets/Plugins/SixLabors.ImageSharp.dll.meta | 33 - Assets/Plugins/SixLabors.ImageSharp.xml | 53972 ---------------- Assets/Raindrop/Core/IMTextManager.cs | 1 - Assets/Raindrop/Core/Settings.cs | 7 - Assets/Raindrop/Disk/ReadWrite.cs | 9 +- Assets/Raindrop/Imaging.cs | 11 - Assets/Raindrop/Render/TerrainSplat.cs | 2 +- Assets/Tests/ImagingTests/ImagingTests.cs | 8 +- 20 files changed, 500 insertions(+), 55575 deletions(-) create mode 100644 Assets/InitTestScene637782234512083174.unity rename Assets/{Plugins/SixLabors.ImageSharp.xml.meta => InitTestScene637782234512083174.unity.meta} (62%) create mode 100644 Assets/Plugins/LibreMetaverse/Imaging/T2D.cs create mode 100644 Assets/Plugins/LibreMetaverse/Imaging/T2D.cs.meta delete mode 100644 Assets/Plugins/OpenJpegDotNet.dll delete mode 100644 Assets/Plugins/OpenJpegDotNet.dll.meta delete mode 100644 Assets/Plugins/OpenJpegDotNet.xml delete mode 100644 Assets/Plugins/OpenJpegDotNet.xml.meta delete mode 100644 Assets/Plugins/SixLabors.ImageSharp.dll delete mode 100644 Assets/Plugins/SixLabors.ImageSharp.dll.meta delete mode 100644 Assets/Plugins/SixLabors.ImageSharp.xml diff --git a/Assets/InitTestScene637782234512083174.unity b/Assets/InitTestScene637782234512083174.unity new file mode 100644 index 0000000..c00a884 --- /dev/null +++ b/Assets/InitTestScene637782234512083174.unity @@ -0,0 +1,454 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.3731193, g: 0.38073996, b: 0.35872698, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!114 &13552111 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d44e6804bc58be84ea71a619b468f150, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &1748150895 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 68f09f0f82599b5448579854e622a4c1, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &1795491018 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f3e1b3cbf3fac6a459b1a602167ad311, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &2144958774 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2144958777} + - component: {fileID: 2144958776} + - component: {fileID: 2144958775} + m_Layer: 0 + m_Name: Code-based tests runner + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &2144958775 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2144958774} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3cf5cb9e1ef590c48b1f919f2a7bd895, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &2144958776 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2144958774} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 102e512f651ee834f951a2516c1ea3b8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_AssembliesWithTests: + - Tests + - UnityEngine.TestRunner + testStartedEvent: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 2144958775} + m_TargetAssemblyTypeName: UnityEngine.TestTools.TestRunner.Callbacks.PlayModeRunnerCallback, + UnityEngine.TestRunner + m_MethodName: TestStarted + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 13552111} + m_TargetAssemblyTypeName: UnityEditor.TestTools.TestRunner.TestRunnerCallback, + UnityEditor.TestRunner + m_MethodName: TestStarted + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 1795491018} + m_TargetAssemblyTypeName: UnityEditor.TestTools.TestRunner.Api.CallbacksDelegatorListener, + UnityEditor.TestRunner + m_MethodName: TestStarted + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 1748150895} + m_TargetAssemblyTypeName: UnityEngine.TestRunner.Utils.TestRunCallbackListener, + UnityEngine.TestRunner + m_MethodName: TestStarted + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + testFinishedEvent: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 2144958775} + m_TargetAssemblyTypeName: UnityEngine.TestTools.TestRunner.Callbacks.PlayModeRunnerCallback, + UnityEngine.TestRunner + m_MethodName: TestFinished + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 13552111} + m_TargetAssemblyTypeName: UnityEditor.TestTools.TestRunner.TestRunnerCallback, + UnityEditor.TestRunner + m_MethodName: TestFinished + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 1795491018} + m_TargetAssemblyTypeName: UnityEditor.TestTools.TestRunner.Api.CallbacksDelegatorListener, + UnityEditor.TestRunner + m_MethodName: TestFinished + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 1748150895} + m_TargetAssemblyTypeName: UnityEngine.TestRunner.Utils.TestRunCallbackListener, + UnityEngine.TestRunner + m_MethodName: TestFinished + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + runStartedEvent: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 2144958775} + m_TargetAssemblyTypeName: UnityEngine.TestTools.TestRunner.Callbacks.PlayModeRunnerCallback, + UnityEngine.TestRunner + m_MethodName: RunStarted + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 13552111} + m_TargetAssemblyTypeName: UnityEditor.TestTools.TestRunner.TestRunnerCallback, + UnityEditor.TestRunner + m_MethodName: RunStarted + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 1795491018} + m_TargetAssemblyTypeName: UnityEditor.TestTools.TestRunner.Api.CallbacksDelegatorListener, + UnityEditor.TestRunner + m_MethodName: RunStarted + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 1748150895} + m_TargetAssemblyTypeName: UnityEngine.TestRunner.Utils.TestRunCallbackListener, + UnityEngine.TestRunner + m_MethodName: RunStarted + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + runFinishedEvent: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 2144958775} + m_TargetAssemblyTypeName: UnityEngine.TestTools.TestRunner.Callbacks.PlayModeRunnerCallback, + UnityEngine.TestRunner + m_MethodName: RunFinished + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 13552111} + m_TargetAssemblyTypeName: UnityEditor.TestTools.TestRunner.TestRunnerCallback, + UnityEditor.TestRunner + m_MethodName: RunFinished + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 1795491018} + m_TargetAssemblyTypeName: UnityEditor.TestTools.TestRunner.Api.CallbacksDelegatorListener, + UnityEditor.TestRunner + m_MethodName: RunFinished + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 1748150895} + m_TargetAssemblyTypeName: UnityEngine.TestRunner.Utils.TestRunCallbackListener, + UnityEngine.TestRunner + m_MethodName: RunFinished + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + settings: + filters: + - assemblyNames: [] + groupNames: [] + categoryNames: + - Benchmark + - Network + - Uncategorized + testNames: + - Raindrop.Tests.RaindropIntegrationTests.AbleToAssertPass + synchronousOnly: 0 + sceneBased: 0 + originalScene: Assets/Scenes/MainScene.unity + bootstrapScene: Assets/InitTestScene637782234512083174.unity +--- !u!4 &2144958777 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2144958774} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/Plugins/SixLabors.ImageSharp.xml.meta b/Assets/InitTestScene637782234512083174.unity.meta similarity index 62% rename from Assets/Plugins/SixLabors.ImageSharp.xml.meta rename to Assets/InitTestScene637782234512083174.unity.meta index d61a6ca..87b4dd7 100644 --- a/Assets/Plugins/SixLabors.ImageSharp.xml.meta +++ b/Assets/InitTestScene637782234512083174.unity.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 -guid: 99f5cc8619b01a842843bb4267ceec9a -TextScriptImporter: +guid: 1bd9b9bf47585124193048462fae649f +DefaultImporter: externalObjects: {} userData: assetBundleName: diff --git a/Assets/Plugins/LibreMetaverse/Assets/AssetTypes/AssetTexture.cs b/Assets/Plugins/LibreMetaverse/Assets/AssetTypes/AssetTexture.cs index cc5cbd1..b26d8f0 100644 --- a/Assets/Plugins/LibreMetaverse/Assets/AssetTypes/AssetTexture.cs +++ b/Assets/Plugins/LibreMetaverse/Assets/AssetTypes/AssetTexture.cs @@ -97,14 +97,17 @@ namespace OpenMetaverse.Assets this.Components = 0; - using (var reader = new OpenJpegDotNet.IO.Reader(AssetData)) - { - // *hack: decode from ManagedImage directly or better yet, get rid of ManagedImage entirely! - if (!reader.ReadHeader()) { return false; } - - throw new NotImplementedException(); - // Image = new ManagedImage(reader.DecodeToBitmap()); - } + // using (var reader = new OpenJpegDotNet.IO.Reader(AssetData)) + var texture = Imaging.T2D.LoadT2DWithoutMipMaps(AssetData); + Image = new ManagedImage(texture); + // using (var reader = new OpenJpegDotNet.IO.Reader(AssetData)) + // { + // // *hack: decode from ManagedImage directly or better yet, get rid of ManagedImage entirely! + // if (!reader.ReadHeader()) { return false; } + // + // throw new NotImplementedException(); + // // Image = new ManagedImage(reader.DecodeToBitmap()); + // } if ((Image.Channels & ManagedImage.ImageChannels.Color) != 0) Components += 3; diff --git a/Assets/Plugins/LibreMetaverse/Imaging/T2D.cs b/Assets/Plugins/LibreMetaverse/Imaging/T2D.cs new file mode 100644 index 0000000..caee5fb --- /dev/null +++ b/Assets/Plugins/LibreMetaverse/Imaging/T2D.cs @@ -0,0 +1,20 @@ +using UnityEngine; + +namespace OpenMetaverse.Imaging +{ + public class T2D + { + public static Texture2D LoadT2DWithoutMipMaps(byte[] thebytes) + { + var texture = new Texture2D(1, 1, TextureFormat.ARGB32, false); // impt there is a jobs bug here + var loaderSettings = AsyncImageLoader.LoaderSettings.Default; + loaderSettings.generateMipmap = false; // impt there is a bug here + + // Use hacky LoaderSettings + var loadSuccess = AsyncImageLoader.LoadImage(texture, thebytes, loaderSettings); + + return texture; + } + + } +} \ No newline at end of file diff --git a/Assets/Plugins/LibreMetaverse/Imaging/T2D.cs.meta b/Assets/Plugins/LibreMetaverse/Imaging/T2D.cs.meta new file mode 100644 index 0000000..16a0c3d --- /dev/null +++ b/Assets/Plugins/LibreMetaverse/Imaging/T2D.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f9c2c34c726b49d19d8ebab6f2ef6778 +timeCreated: 1642600846 \ No newline at end of file diff --git a/Assets/Plugins/LibreMetaverse/LibreMetaverseAssembly.asmdef b/Assets/Plugins/LibreMetaverse/LibreMetaverseAssembly.asmdef index 016719b..8985267 100644 --- a/Assets/Plugins/LibreMetaverse/LibreMetaverseAssembly.asmdef +++ b/Assets/Plugins/LibreMetaverse/LibreMetaverseAssembly.asmdef @@ -1,7 +1,9 @@ { "name": "LibreMetaverseAssembly", "rootNamespace": "", - "references": [], + "references": [ + "GUID:a8cf6376c8aac1e43b688324ad3f22de" + ], "includePlatforms": [], "excludePlatforms": [], "allowUnsafeCode": true, diff --git a/Assets/Plugins/LibreMetaverse/PrimMesher/SculptMesh.cs b/Assets/Plugins/LibreMetaverse/PrimMesher/SculptMesh.cs index 0783bfb..103769c 100644 --- a/Assets/Plugins/LibreMetaverse/PrimMesher/SculptMesh.cs +++ b/Assets/Plugins/LibreMetaverse/PrimMesher/SculptMesh.cs @@ -28,7 +28,6 @@ using System; using System.Collections.Generic; //using System.Drawing; -using SixLabors; using System.IO; //using Catnip.Drawing; using UnityEngine; diff --git a/Assets/Plugins/OpenJpegDotNet.dll b/Assets/Plugins/OpenJpegDotNet.dll deleted file mode 100644 index ccbad8d04e12539b039bc2cd5fd97636c3178903..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61952 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 diff --git a/Assets/Plugins/OpenJpegDotNet.dll.meta b/Assets/Plugins/OpenJpegDotNet.dll.meta deleted file mode 100644 index 30fc99f..0000000 --- a/Assets/Plugins/OpenJpegDotNet.dll.meta +++ /dev/null @@ -1,33 +0,0 @@ -fileFormatVersion: 2 -guid: b40d6b883361a0d40921720d88966596 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - Any: - second: - enabled: 1 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - Windows Store Apps: WindowsStoreApps - second: - enabled: 0 - settings: - CPU: AnyCPU - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/OpenJpegDotNet.xml b/Assets/Plugins/OpenJpegDotNet.xml deleted file mode 100644 index 8078335..0000000 --- a/Assets/Plugins/OpenJpegDotNet.xml +++ /dev/null @@ -1,1487 +0,0 @@ - - - - OpenJpegDotNet - - - - - Specifies the Digital cinema operation mode. - - - - - Specifies that not Digital Cinema. - - - - - Specifies that the 2K Digital Cinema at 24 fps. - - - - - Specifies that the 2K Digital Cinema at 48 fps. - - - - - Specifies that the 4K Digital Cinema at 24 fps. - - - - - Defines the JPEG 2000 codec V2. This class cannot be inherited. - - - - - Releases all unmanaged resources. - - - - - Specifies the supported codec. - - - - - Specifies that the place-holder. - - - - - Specifies that the JPEG 2000 codestream. - - - - - Specifies that the JPT-stream (JPEG 2000, JPIP). - - - - - Specifies that the JP2 file format. - - - - - Specifies that the JPP-stream (JPEG 2000, JPIP). - - - - - Specifies that the JPX file format(JPEG 2000 Part-2). - - - - - Specifies the Supported image color spaces. - - - - - Specifies that not supported by the library. - - - - - Specifies that not specified in the codestream. - - - - - Specifies that the sRGB. - - - - - Specifies that the Grayscale. - - - - - Specifies that the sYCC. - - - - - Specifies that the e-YCC. - - - - - Specifies that the CMYK. - - - - - Defines the compression parameters. This class cannot be inherited. - - - - - Initializes a new instance of the class. - - - - - Sets or get the error protection methods for Tile Part Headers (0,1,16,32,37-128). - - This object is disposed. - is invalid length. - - - - Sets or get the tile number of header protection specification (>=0). - - This object is disposed. - is invalid length. - - - - Sets or get the error protection methods for packets (0,1,16,32,37-128). - - This object is disposed. - is invalid length. - - - - Sets or get the packet number of packet protection specification (>=0). - - This object is disposed. - is invalid length. - - - - Sets or get the tile number of packet protection specification (>=0). - - This object is disposed. - is invalid length. - - - - Sets or get the sensitivity methods for Tile Part Headers (-1=no,0-7). - - This object is disposed. - is invalid length. - - - - Sets or get the tile number of sensitivity specification (>=0). - - This object is disposed. - is invalid length. - - - - Sets or get the initial precinct height. - - This object is disposed. - is invalid length. - - - - Sets or get the initial precinct width. - - This object is disposed. - is invalid length. - - - - Sets or get the different PSNR (Peak signal-to-noise ratio) for successive layers. - - This object is disposed. - is invalid length. - - - - Sets or get the rates of layers - might be subsequently limited by the max_cs_size field. - - This object is disposed. - is invalid length. - - - - Sets or get the initial code block height. - - This object is disposed. - - - - Sets or get the initial code block width. - - This object is disposed. - - - - Sets or get the output file format. - - This object is disposed. - - - - Sets or get the Digital Cinema compliance. - - if 0 not compliant, 1 is compliant. - This object is disposed. - - - - Sets or get the RSIZ. - - This object is disposed. - - - - Sets or get the allocation by rate/distortion. - - This object is disposed. - - - - Sets or get the allocation by fixed layer. - - This object is disposed. - - - - Sets or get the add fixed quality. - - This object is disposed. - - - - Sets or get the regions size - - This object is disposed. - - - - Sets or get the XTsiz. - - This object is disposed. - - - - Sets or get the YTsiz. - - This object is disposed. - - - - Sets or get the XTOsiz. - - This object is disposed. - - - - Sets or get the YTOsiz. - - This object is disposed. - - - - Sets or get the coding style. - - This object is disposed. - - - - Sets or get the input file format. - - This object is disposed. - - - - Sets or get the subimage encoding: origin image offset in x direction. - - This object is disposed. - - - - Sets or get the subimage encoding: origin image offset in y direction. - - This object is disposed. - - - - Sets or get the index generation. - - This object is disposed. - - - - Sets or get the value to indicate whether irreversible or not for compression. - - true if use the irreversible DWT 9-7; otherwise, use lossless compression is false. - This object is disposed. - - - - Sets or get the error protection method for Main Header (0,1,16,32,37-128). - - This object is disposed. - - - - Sets or get the sensitivity addressing size (0=auto/2/4 bytes). - - This object is disposed. - - - - Sets or get the sensitivity method for Main Header (-1=no,0-7). - - This object is disposed. - - - - Sets or get the sensitivity range (0-3). - - This object is disposed. - - - - Sets or get the enables writing of ESD, (0=no/1/2 bytes). - - This object is disposed. - - - - Sets or get the maximum size (in bytes) for each component. - - Component size limitation is not considered if 0. - This object is disposed. - - - - Sets or get the maximum size (in bytes) for the whole codestream. - - If 0, codestream size limitation is not considered If it does not comply with , prevails and a warning is issued. - This object is disposed. - - - - Sets or get the mode switch (codeblock coding style). - - This object is disposed. - - - - Sets or get the number of progression order changes (POC). - - This object is disposed. - - - - Sets or get the number of resolutions. - - This object is disposed. - - - - Sets or get the progression order. - - This object is disposed. - - - - Sets or get the number of precinct size specifications. - - This object is disposed. - - - - Sets or get the region of interest: affected component in [0..3], -1 means no ROI. - - This object is disposed. - - - - Sets or get the region of interest: upshift value. - - This object is disposed. - - - - Sets or get the subsampling value for dx. - - This object is disposed. - - - - Sets or get the subsampling value for dy. - - This object is disposed. - - - - Sets or get the number of layers. - - This object is disposed. - - - - Sets or get whether enables JPIP indexing. - - This object is disposed. - - - - Sets or get whether enables writing of EPC in MH, thus activating JPWL. - - This object is disposed. - - - - Sets or get the MCT (multiple component transform). - - This object is disposed. - - - - Sets or get whether enables size of tile. - - This object is disposed. - - - - Sets or get the flag for Tile part generation. - - This object is disposed. - - - - Sets or get the Tile part generation. - - This object is disposed. - - - - Releases all unmanaged resources. - - - - - Defines the decompression parameters. This class cannot be inherited. - - - - - Initializes a new instance of the class. - - - - - Sets or get the output file format. - - This object is disposed. - - - - Sets or get the maximum number of quality layers to decode. - - This object is disposed. - - - - Sets or get the number of highest resolution levels to be discarded. - - This object is disposed. - - - - Sets or get the input file format. - - This object is disposed. - - - - Sets or get the decoding area left boundary. - - This object is disposed. - - - - Sets or get the decoding area right boundary. - - This object is disposed. - - - - Sets or get the decoding area up boundary. - - This object is disposed. - - - - Sets or get the decoding area bottom boundary. - - This object is disposed. - - - - Sets or get the flags. - - This object is disposed. - - - - Sets or get whether activates the JPWL correction capabilities for JPWL (wireless applications). - - This object is disposed. - - - - Sets or get the expected number of components for JPWL (wireless applications). - - This object is disposed. - - - - Sets or get the maximum number of tiles for JPWL (wireless applications). - - This object is disposed. - - - - Sets or get the number of blocks of tile to decode. - - This object is disposed. - - - - Sets or get the tile number of the decoded tile. - - This object is disposed. - - - - Sets or get whether enables verbose mode. - - This object is disposed. - - - - Releases all unmanaged resources. - - - - - Callback function prototype for read. - - The event message. - The client object where will be return the event message. - - - - Callback function prototype for read. - - The position to read. - The length of . - The data pointer to have beee passed to . - - - - Callback function prototype for write. - - The position to write. - The length of . - The data pointer to have beee passed to . - - - - Callback function prototype for skip. - - The position to skip. - The data pointer to have beee passed to . - - - - Callback function prototype for seek. - - The position to seek. - The data pointer to have beee passed to . - - - - Callback function to free user data. - - The data pointer to have beee passed to . - - - - Specifies the supported codec. - - - - - Specifies that the place-holder. - - - - - Specifies that the JPEG 2000 codestream. - - - - - Specifies that the JP2 file format. - - - - - Specifies that the JPT-stream (JPEG 2000, JPIP). - - - - - Specifies that the Pixelmator file format. - - - - - Specifies that the PGX (JPEG 2000) file format. - - - - - Specifies that the Bitmap file format. - - - - - Specifies that the YUV file format. - - - - - Specifies that the Tagged Image file format. - - - - - Specifies that the Raw (big endian) Image file format. - - - - - Specifies that the Truevision Graphics Adapter file format. - - - - - Specifies that the Portable Network Graphics file format. - - - - - Specifies that the Raw (little endian) Image file format. - - - - - Defines the image data and characteristics. This class cannot be inherited. - - - - - Gets or sets the horizontal offset from the origin of the reference grid to the left side of the image area. - - This object is disposed. - - - - Gets or sets the width of the reference grid. - - This object is disposed. - - - - Gets or sets the vertical offset from the origin of the reference grid to the top side of the image area. - - This object is disposed. - - - - Gets or sets the height of the reference grid. - - This object is disposed. - - - - Gets the number of components in the image. - - This object is disposed. - - - - Gets or sets the color space. - - This object is disposed. - - - - Gets the image components. - - This object is disposed. - - - - Gets the 'restricted' ICC profile. - - This object is disposed. - - - - Converts this to a GDI+ . - - Export alpha channel - A that represents the converted . - This object is disposed. - This object is not supported. - - - - Converts this to a Bitmap . - - Export alpha channel - A that represents the converted . - This object is not supported. - - - - Converts this to a TARGA . - - A that represents the converted . - This object is not supported. - - - - Releases all unmanaged resources. - - - - - Defines the image component. This class cannot be inherited. - - - - - Get the alpha channel. - - This object is disposed. - - - - Get the image depth in bits. - - This object is disposed. - - - - Get the image component data. - - This object is disposed. - - - - Get the horizontal separation of a sample of ith component with respect to the reference grid. - - This object is disposed. - - - - Get the vertical separation of a sample of ith component with respect to the reference grid. - - This object is disposed. - - - - Get the number of division by 2 of the out image compared to the original size of image. - - This object is disposed. - - - - Get the data height. - - This object is disposed. - - - - Get the precision. - - This object is disposed. - - - - Get the number of decoded resolution. - - This object is disposed. - - - - Get the value to indicate whether data with signed or unsigned. - - true if data with signed; otherwise, false. - This object is disposed. - - - - Get the data width. - - This object is disposed. - - - - Get the x component offset compared to the whole image. - - This object is disposed. - - - - Get the y component offset compared to the whole image. - - This object is disposed. - - - - Releases all unmanaged resources. - - - - - Defines the component parameters. This class cannot be inherited. - - - - - Initializes a new instance of the class. - - - - - Sets or get the image depth in bits. - - This object is disposed. - - - - Sets or get the horizontal separation of a sample of ith component with respect to the reference grid. - - This object is disposed. - - - - Sets or get the vertical separation of a sample of ith component with respect to the reference grid. - - This object is disposed. - - - - Sets or get the data height. - - This object is disposed. - - - - Sets or get the precision. - - This object is disposed. - - - - Sets or get the value to indicate whether data with signed or unsigned. - - true if data with signed; otherwise, false. - This object is disposed. - - - - Sets or get the data width. - - This object is disposed. - - - - Sets or get the x component offset compared to the whole image. - - This object is disposed. - - - - Sets or get the y component offset compared to the whole image. - - This object is disposed. - - - - Releases all unmanaged resources. - - - - - Gets a value indicating whether this instance has been disposed. - - true if this instance has been disposed; otherwise, false. - - - - Releases all resources used by this . - - - - - Releases all resources used by this . - - Indicate value whether method was called. - - - - Gets a value indicating whether this instance has been disposed. - - true if this instance has been disposed; otherwise, false. - - - - Releases all resources used by this . - - - - - Releases all resources used by this . - - Indicate value whether method was called. - - - - Provides the methods of OpenJpeg. - - - Provides the methods of OpenJpeg. - - - - - Creates a J2K/JP2 compression structure. - - The codec format to create. - The . - - - - Start to compress the current image. - - the Jpeg 2000 codec to compress. - The image that receives encoded datum. - The Jpeg 2000 stream. - true if the start to compress is correctly set; otherwise, false. - , or is null. - , or is disposed. - - - - End to compress the current image. - - the Jpeg 2000 codec to compress. - The Jpeg 2000 stream. - true if the end to compress is correctly set; otherwise, false. - or is null. - or is disposed. - - - - Encode an image into a JPEG-2000 codestream. - - the Jpeg 2000 codec to compress. - The Jpeg 2000 stream. - true if the end to compress is correctly set; otherwise, false. - or is null. - or is disposed. - - - - Set encoding parameters to default values. - - The to compress image. - is null. - is disposed. - - - - Setup the encoder with compression parameters provided by the user and with the message handler provided by the user. - - The to compress image. - The for image compression. - Input filled image. - true if the decoder is correctly set; otherwise, false. - , or is null. - , or is disposed. - - - - Creates a J2K/JP2 decompression structure. - - The codec format to create. - The . - - - - Decode an image from a JPEG 2000 codestream. - - the Jpeg 2000 codec to read. - The Jpeg 2000 stream. - The image that receives decoded datum. - true if success; otherwise, false. - , or is null. - , or is disposed. - - - - Read after the codestream if necessary. - - the Jpeg 2000 codec to read. - The Jpeg 2000 stream. - true if success; otherwise, false. - or is null. - or is disposed. - - - - Decodes an image header. - - The Jpeg 2000 stream. - the Jpeg 2000 codec to read. - When this method returns, contains the read from stream. This parameter is passed uninitialized. - true if the main header of the codestream and the JP2 header is correctly read; otherwise, false. - or is null. - or is disposed. - - - - Sets the given area to be decoded. - - The Jpeg 2000 codec. - The decoded previously set by . - The left position of the rectangle to decode in image. - The top position of the rectangle to decode in image. - The right position of the rectangle to decode in image. - The bottom position of the rectangle to decode in image. - true if the area is correctly set; otherwise, false. - or is null. - or is disposed. - - - - Set decoding parameters to default values. - - The to decompress image. - is null. - is disposed. - - - - Setup the decoder with decompression parameters provided by the user and with the message handler provided by the user. - - The to decompress image. - The to decompress image. - true if the decoder is correctly set; otherwise, false. - or is null. - or is disposed. - - - - Allocates worker threads for the compressor/decompressor. - - The to compress or decompress image. - The number of threads. - true if the function succeeds; otherwise, false. - or is null. - or is disposed. - This function must be called after and before for the decoding side, or after () and before for the encoding side. - - - - Writes a tile with the given data. - - The to write tile. - The index of the tile to write. - The buffer to the data to write. - The length of datum to write. This value os used to make sure the data being written is correct. - The stream to write data to. - true if the data could be written; otherwise, false. - or is null. - or is disposed. - - - - Get the string representation of the OpenJpeg version. - - The string representation of the OpenJpeg version. - - - - Get the string representation of the version of wrapper library of OpenJpeg. - - The string representation of the version of wrapper library of OpenJpeg. - - - - Set the info handler. - - The codec previously initialise. - The callback function which will be used. - The client object where will be returned the message. - or is null. - is disposed. - - - - Set the warning handler. - - The codec previously initialise. - The callback function which will be used. - The client object where will be returned the message. - or is null. - is disposed. - - - - Set the warning handler. - - The codec previously initialise. - The callback function which will be used. - The client object where will be returned the message. - or is null. - is disposed. - - - - Create an image. - - The number of components. - The components parameters. - The image color space. - A new . - - - - Creates an image without allocating memory for the image. - - The number of components. - The components parameters. - The image color space. - A new . - - - - Allocates new memory buffer for . - - The number of bytes to allocate. - The new pointer to indicate allocated memory buffer if success; otherwise, . - - - - Unallocates memory buffer for . - - The pointer to indicate allocated memory buffer by . - - - - Sets the MCT matrix to use. - - The to change. - The encoding matrix. - The dc shift coefficients to use. - The number of components of the image. - true if the parameters could be set; otherwise, false. - , or is null. - is disposed. - The length of must be x or less. Or The length of must be or less - - - - Creates an abstract stream. - - The value whether the stream is a read stream. - The . - - - - Creates an abstract stream with a specific buffer size. - - The size of the chunk used to stream. - The value whether the stream is a read stream. - The . - - - - Sets the given callback to be used as a read function. - - The stream to modify. - The callback to free user data when reads data stream. - or is null. - is disposed. - - - - Sets the given callback to be used as a write function. - - The stream to modify. - The callback to free user data when writes data stream. - or is null. - is disposed. - - - - Sets the given callback to be used as a skip function. - - The stream to modify. - The callback to free user data when skips data stream. - or is null. - is disposed. - - - - Sets the given callback to be used as a seek function, the stream is then seekable, - - The stream to modify. - The callback to free user data when seeks data stream. - or is null. - is disposed. - - - - Sets the given data to be used as a user data for the stream. - - The stream to modify. - The data to set. - The callback to free user data when is disposed. - or is null. - is disposed. - - - - Sets the length of the user data for the stream. - - The stream to modify. - The length of the user_data. - is null. - is disposed. - - - - Create a stream from a file identified with its filename with default parameters. - - The filename of the file to input to stream. - The value whether the stream is a read stream. - The . - is null. - The specified path does not exist. - - - - Create a stream from a file identified with its filename with a specific buffer size. - - The filename of the file to input to stream. - The size of the chunk used to stream. - The value whether the stream is a read stream. - The . - is null. - The specified path does not exist. - - - - Returns if the library is built with thread support. - - true if mutex, condition, thread, thread pool are available; otherwise, false. - - - - Return the number of virtual CPUs. - - The number of virtual CPUs. - - - - A class which has a pointer of native structure. - - - - - Initializes a new instance of the class with the specified value indicating whether this instance is disposable. - - true if this instance is disposable; otherwise, false. - - - - Gets a value indicating whether this instance has been disposed. - - true if this instance has been disposed; otherwise, false. - - - - Gets a value indicating whether this instance is disposable. - - true if this instance is disposable; otherwise, false. - - - - Gets a pointer of native structure. - > - - - - If this object is disposed, then is thrown. - - - - - Determines whether this instance and another specified object have the same value. - - The to compare to this instance. - true if the value of the parameter is the same as the value of this instance; otherwise, false. If is null, the method returns false. - - - - Determines whether this instance and a specified object, which must also be a object, have the same value. - - The to compare to this instance. - true if is a and its value is the same as this instance; otherwise, false. If is null, the method returns false. - - - - Returns the hash code for this string. - - A 32-bit signed integer hash code. - - - - Releases all managed resources. - - - - - Releases all unmanaged resources. - - - - - Releases all resources used by this . - - - - - Releases all resources used by this . - - Indicate value whether method was called. - - - - Specifies the progression order. - - - - - Specifies that place-holder. - - - - - Specifies that layer-resolution-component-precinct order. - - - - - Specifies that resolution-layer-component-precinct order. - - - - - Specifies that resolution-precinct-component-layer order. - - - - - Specifies that precinct-component-resolution-layer order. - - - - - Specifies that component-precinct-resolution-layer order. - - - - - Defines the raw bitmap image data. This class cannot be inherited. - - - - - Gets the number of channels, of this . - - The number of channels, of this . - - - - Gets the pixel data of this . - - The pixel data. - - - - Gets the height, in pixels, of this . - - The height, in pixels, of this . - - - - Gets the width, in pixels, of this . - - The width, in pixels, of this . - - - - Gets the specified for the object. - - The type of image storeed as - - - - Specifies the region size capabilities. - - - - - Specifies that Standard JPEG 2000 profile. - - - - - Specifies that Profile name for a 2K image. - - - - - Specifies that Profile name for a 4K image. - - - - - Specifies that multiple component transformation. - - - - - A stream that represents a JPEG 2000. This class cannot be inherited. - - - - - Releases all unmanaged resources. - - - - diff --git a/Assets/Plugins/OpenJpegDotNet.xml.meta b/Assets/Plugins/OpenJpegDotNet.xml.meta deleted file mode 100644 index c15d75c..0000000 --- a/Assets/Plugins/OpenJpegDotNet.xml.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: ef87fb698153618479434b8b658dc0a4 -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/SixLabors.ImageSharp.dll b/Assets/Plugins/SixLabors.ImageSharp.dll deleted file mode 100644 index 89ef368fecf70e05c90cd312f95b96ccb8a8cc7b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1211904 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%0Aik2p6f-#p(N`5m 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⋙CqHMVe#f9S$GW^{LIRDDdBl+AaozGsr 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

dNdt`OGc*&z*4`vCjF-Z83awUzhl})W>B$ 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 DDGK&Y diff --git a/Assets/Plugins/SixLabors.ImageSharp.dll.meta b/Assets/Plugins/SixLabors.ImageSharp.dll.meta deleted file mode 100644 index d2b7b69..0000000 --- a/Assets/Plugins/SixLabors.ImageSharp.dll.meta +++ /dev/null @@ -1,33 +0,0 @@ -fileFormatVersion: 2 -guid: 81d0e422082f1cd49b757b2ee2a69ad5 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 0 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - Any: - second: - enabled: 1 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - - first: - Windows Store Apps: WindowsStoreApps - second: - enabled: 0 - settings: - CPU: AnyCPU - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/SixLabors.ImageSharp.xml b/Assets/Plugins/SixLabors.ImageSharp.xml deleted file mode 100644 index 0f45695..0000000 --- a/Assets/Plugins/SixLabors.ImageSharp.xml +++ /dev/null @@ -1,53972 +0,0 @@ - - - - SixLabors.ImageSharp - - - -

- Extension methods over Image{TPixel} - - - - - For a given file path find the best encoder to use via its extension. - - The source image. - The target file path to save the image to. - The file path is null. - No encoder available for provided path. - The matching . - - - - Accepts a to implement a double-dispatch pattern in order to - apply pixel-specific operations on non-generic instances - - The source image. - The image visitor. - - - - Accepts a to implement a double-dispatch pattern in order to - apply pixel-specific operations on non-generic instances - - The source image. - The image visitor. - The token to monitor for cancellation requests. - A representing the asynchronous operation. - - - - Gets the configuration for the image. - - The source image. - Returns the configuration. - - - - Gets the configuration for the image frame. - - The source image. - Returns the configuration. - - - - Gets the configuration. - - The source image - Returns the bounds of the image - - - - Gets the representation of the pixels as a containing the backing pixel data of the image - stored in row major order, as a list of contiguous blocks in the source image's pixel format. - - The source image. - The type of the pixel. - The . - - Certain Image Processors may invalidate the returned and all it's buffers, - therefore it's not recommended to mutate the image while holding a reference to it's . - - - - - Gets the representation of the pixels as a containing the backing pixel data of the image - stored in row major order, as a list of contiguous blocks in the source image's pixel format. - - The source image. - The type of the pixel. - The . - - Certain Image Processors may invalidate the returned and all it's buffers, - therefore it's not recommended to mutate the image while holding a reference to it's . - - - - - Gets the representation of the pixels as a of contiguous memory - at row beginning from the the first pixel on that row. - - The type of the pixel. - The source. - The row. - The - - - - Gets the representation of the pixels as of of contiguous memory - at row beginning from the the first pixel on that row. - - The type of the pixel. - The source. - The row. - The - - - - Gets the assigned to 'source'. - - The source image. - Returns the configuration. - - - - Unlike traditional Mono/.NET, code on the iPhone is statically compiled ahead of time instead of being - compiled on demand by a JIT compiler. This means there are a few limitations with respect to generics, - these are caused because not every possible generic instantiation can be determined up front at compile time. - The Aot Compiler is designed to overcome the limitations of this compiler. - None of the methods in this class should ever be called, the code only has to exist at compile-time to be picked up by the AoT compiler. - (Very similar to the LinkerIncludes.cs technique used in Xamarin.Android projects.) - - - - - This is the method that seeds the AoT compiler. - None of these seed methods needs to actually be called to seed the compiler. - The calls just need to be present when the code is compiled, and each implementation will be built. - - - - - Seeds the compiler using the given pixel format. - - The pixel format. - - - - This method doesn't actually do anything but serves an important purpose... - If you are running ImageSharp on iOS and try to call SaveAsGif, it will throw an exception: - "Attempting to JIT compile method... OctreeFrameQuantizer.ConstructPalette... while running in aot-only mode." - The reason this happens is the SaveAsGif method makes heavy use of generics, which are too confusing for the AoT - compiler used on Xamarin.iOS. It spins up the JIT compiler to try and figure it out, but that is an illegal op on - iOS so it bombs out. - If you are getting the above error, you need to call this method, which will pre-seed the AoT compiler with the - necessary methods to complete the SaveAsGif call. That's it, otherwise you should NEVER need this method!!! - - The pixel format. - - - - This method pre-seeds the WuQuantizer in the AoT compiler for iOS. - - The pixel format. - - - - This method pre-seeds the PaletteQuantizer in the AoT compiler for iOS. - - The pixel format. - - - - This method pre-seeds the default dithering engine (FloydSteinbergDiffuser) in the AoT compiler for iOS. - - The pixel format. - - - - This method pre-seeds the decoder and encoder for a given pixel format in the AoT compiler for iOS. - - The image decoder to seed. - The image encoder to seed. - The pixel format. - - - - This method pre-seeds the PixelOperations engine for the AoT compiler on iOS. - - The pixel format. - - - - Defines the contract for objects that can provide access to configuration. - - - - - Gets the configuration which allows altering default behaviour or extending the library. - - - - - A visitor to implement a double-dispatch pattern in order to apply pixel-specific operations - on non-generic instances. - - - - - Provides a pixel-specific implementation for a given operation. - - The image. - The pixel type. - - - - A visitor to implement a double-dispatch pattern in order to apply pixel-specific operations - on non-generic instances. - - - - - Provides a pixel-specific implementation for a given operation. - - The image. - The token to monitor for cancellation requests. - The pixel type. - A representing the asynchronous operation. - - - - Encapsulates the basic properties and methods required to manipulate images. - - - - - Gets the pixel buffer. - - - - - Encapsulates the basic properties and methods required to manipulate images. - - The type of the pixel. - - - - Gets the pixel buffer. - - - - - Defines the contract for an action that operates on a row interval. - - - - - Invokes the method passing the row interval. - - The row interval. - - - - Defines the contract for an action that operates on a row interval with a temporary buffer. - - The type of buffer elements. - - - - Invokes the method passing the row interval and a buffer. - - The row interval. - The contiguous region of memory. - - - - Defines the contract for an action that operates on a row. - - - - - Invokes the method passing the row y coordinate. - - The row y coordinate. - - - - Defines the contract for an action that operates on a row with a temporary buffer. - - The type of buffer elements. - - - - Invokes the method passing the row and a buffer. - - The row y coordinate. - The contiguous region of memory. - - - - Defines execution settings for methods in . - - - - - Default value for . - - - - - Initializes a new instance of the struct. - - The value used for initializing when using TPL. - The value for . - The . - - - - Initializes a new instance of the struct. - - The value used for initializing when using TPL. - The . - - - - Gets the . - - - - - Gets the value used for initializing when using TPL. - - - - - Gets the minimum number of pixels being processed by a single task when parallelizing operations with TPL. - Launching tasks for pixel regions below this limit is not worth the overhead. - Initialized with by default, - the optimum value is operation specific. (The cheaper the operation, the larger the value is.) - - - - - Creates a new instance of - having multiplied by - - The value to multiply with. - The modified . - - - - Get the default for a - - The . - The . - - - - Utility methods for batched processing of pixel row intervals. - Parallel execution is optimized for image processing based on values defined - or . - Using this class is preferred over direct usage of utility methods. - - - Utility methods for batched processing of pixel row intervals. - Parallel execution is optimized for image processing based on values defined - or . - Using this class is preferred over direct usage of utility methods. - - - - - Iterate through the rows of a rectangle in optimized batches. - - The type of row operation to perform. - The to get the parallel settings from. - The . - The operation defining the iteration logic on a single row. - - - - Iterate through the rows of a rectangle in optimized batches. - - The type of row operation to perform. - The . - The . - The operation defining the iteration logic on a single row. - - - - Iterate through the rows of a rectangle in optimized batches. - instantiating a temporary buffer for each invocation. - - The type of row operation to perform. - The type of buffer elements. - The to get the parallel settings from. - The . - The operation defining the iteration logic on a single row. - - - - Iterate through the rows of a rectangle in optimized batches. - instantiating a temporary buffer for each invocation. - - The type of row operation to perform. - The type of buffer elements. - The . - The . - The operation defining the iteration logic on a single row. - - - - Iterate through the rows of a rectangle in optimized batches defined by -s. - - The type of row operation to perform. - The to get the parallel settings from. - The . - The operation defining the iteration logic on a single . - - - - Iterate through the rows of a rectangle in optimized batches defined by -s. - - The type of row operation to perform. - The . - The . - The operation defining the iteration logic on a single . - - - - Iterate through the rows of a rectangle in optimized batches defined by -s - instantiating a temporary buffer for each invocation. - - The type of row operation to perform. - The type of buffer elements. - The to get the parallel settings from. - The . - The operation defining the iteration logic on a single . - - - - Iterate through the rows of a rectangle in optimized batches defined by -s - instantiating a temporary buffer for each invocation. - - The type of row operation to perform. - The type of buffer elements. - The . - The . - The operation defining the iteration logic on a single . - - - - Represents a CIE L*a*b* 1976 color. - - - - - - D50 standard illuminant. - Used when reference white is not specified explicitly. - - - - - Gets the lightness dimension. - A value usually ranging between 0 (black), 100 (diffuse white) or higher (specular white). - - - - - Gets the a color component. - A value usually ranging from -100 to 100. Negative is green, positive magenta. - - - - - Gets the b color component. - A value usually ranging from -100 to 100. Negative is blue, positive is yellow - - - - - Gets the reference white point of this color - - - - - Initializes a new instance of the struct. - - The lightness dimension. - The a (green - magenta) component. - The b (blue - yellow) component. - Uses as white point. - - - - Initializes a new instance of the struct. - - The lightness dimension. - The a (green - magenta) component. - The b (blue - yellow) component. - The reference white point. - - - - Initializes a new instance of the struct. - - The vector representing the l, a, b components. - Uses as white point. - - - - Initializes a new instance of the struct. - - The vector representing the l, a, b components. - The reference white point. - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the current left is equal to the parameter; otherwise, false. - - - - - Compares two objects for inequality - - The on the left side of the operand. - The on the right side of the operand. - - True if the current left is unequal to the parameter; otherwise, false. - - - - - - - - - - - - - - - - - Represents the CIE L*C*h°, cylindrical form of the CIE L*a*b* 1976 color. - - - - - - D50 standard illuminant. - Used when reference white is not specified explicitly. - - - - - Gets the lightness dimension. - A value ranging between 0 (black), 100 (diffuse white) or higher (specular white). - - - - - Gets the a chroma component. - A value ranging from 0 to 200. - - - - - Gets the h° hue component in degrees. - A value ranging from 0 to 360. - - - - - Gets the reference white point of this color - - - - - Initializes a new instance of the struct. - - The lightness dimension. - The chroma, relative saturation. - The hue in degrees. - Uses as white point. - - - - Initializes a new instance of the struct. - - The lightness dimension. - The chroma, relative saturation. - The hue in degrees. - The reference white point. - - - - Initializes a new instance of the struct. - - The vector representing the l, c, h components. - Uses as white point. - - - - Initializes a new instance of the struct. - - The vector representing the l, c, h components. - The reference white point. - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the current left is equal to the parameter; otherwise, false. - - - - - Compares two objects for inequality - - The on the left side of the operand. - The on the right side of the operand. - - True if the current left is unequal to the parameter; otherwise, false. - - - - - - - - - - - - - - - - - Computes the saturation of the color (chroma normalized by lightness) - - - A value ranging from 0 to 100. - - The - - - - Represents the CIE L*C*h°, cylindrical form of the CIE L*u*v* 1976 color. - - - - - - D50 standard illuminant. - Used when reference white is not specified explicitly. - - - - - Gets the lightness dimension. - A value ranging between 0 (black), 100 (diffuse white) or higher (specular white). - - - - - Gets the a chroma component. - A value ranging from 0 to 200. - - - - - Gets the h° hue component in degrees. - A value ranging from 0 to 360. - - - - - Gets the reference white point of this color - - - - - Initializes a new instance of the struct. - - The lightness dimension. - The chroma, relative saturation. - The hue in degrees. - Uses as white point. - - - - Initializes a new instance of the struct. - - The lightness dimension. - The chroma, relative saturation. - The hue in degrees. - The reference white point. - - - - Initializes a new instance of the struct. - - The vector representing the l, c, h components. - Uses as white point. - - - - Initializes a new instance of the struct. - - The vector representing the l, c, h components. - The reference white point. - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the current left is equal to the parameter; otherwise, false. - - - - - Compares two objects for inequality - - The on the left side of the operand. - The on the right side of the operand. - - True if the current left is unequal to the parameter; otherwise, false. - - - - - - - - - - - - - - - - - Computes the saturation of the color (chroma normalized by lightness) - - - A value ranging from 0 to 100. - - The - - - - The CIE 1976 (L*, u*, v*) color space, commonly known by its abbreviation CIELUV, is a color space adopted by the International - Commission on Illumination (CIE) in 1976, as a simple-to-compute transformation of the 1931 CIE XYZ color space, but which - attempted perceptual uniformity - - - - - - D65 standard illuminant. - Used when reference white is not specified explicitly. - - - - - Gets the lightness dimension - A value usually ranging between 0 and 100. - - - - - Gets the blue-yellow chromaticity coordinate of the given whitepoint. - A value usually ranging between -100 and 100. - - - - - Gets the red-green chromaticity coordinate of the given whitepoint. - A value usually ranging between -100 and 100. - - - - - Gets the reference white point of this color - - - - - Initializes a new instance of the struct. - - The lightness dimension. - The blue-yellow chromaticity coordinate of the given whitepoint. - The red-green chromaticity coordinate of the given whitepoint. - Uses as white point. - - - - Initializes a new instance of the struct. - - The lightness dimension. - The blue-yellow chromaticity coordinate of the given whitepoint. - The red-green chromaticity coordinate of the given whitepoint. - The reference white point. - - - - Initializes a new instance of the struct. - - The vector representing the l, u, v components. - Uses as white point. - - - - Initializes a new instance of the struct. - - The vector representing the l, u, v components. - The reference white point. - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the current left is equal to the parameter; otherwise, false. - - - - - Compares two objects for inequality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the current left is unequal to the parameter; otherwise, false. - - - - - - - - - - - - - - - - - Represents an CIE xyY 1931 color - - - - - - Gets the X chrominance component. - A value usually ranging between 0 and 1. - - - - - Gets the Y chrominance component. - A value usually ranging between 0 and 1. - - - - - Gets the Y luminance component. - A value usually ranging between 0 and 1. - - - - - Initializes a new instance of the struct. - - The x chroma component. - The y chroma component. - The y luminance component. - - - - Initializes a new instance of the struct. - - The vector representing the x, y, Y components. - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the current left is equal to the parameter; otherwise, false. - - - - - Compares two objects for inequality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the current left is unequal to the parameter; otherwise, false. - - - - - - - - - - - - - - - - - Represents an CIE XYZ 1931 color - - - - - - Gets the X component. A mix (a linear combination) of cone response curves chosen to be nonnegative. - A value usually ranging between 0 and 1. - - - - - Gets the Y luminance component. - A value usually ranging between 0 and 1. - - - - - Gets the Z component. Quasi-equal to blue stimulation, or the S cone response. - A value usually ranging between 0 and 1. - - - - - Initializes a new instance of the struct. - - X is a mix (a linear combination) of cone response curves chosen to be nonnegative - The y luminance component. - Z is quasi-equal to blue stimulation, or the S cone of the human eye. - - - - Initializes a new instance of the struct. - - The vector representing the x, y, z components. - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the current left is equal to the parameter; otherwise, false. - - - - - Compares two objects for inequality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the current left is unequal to the parameter; otherwise, false. - - - - - Returns a new representing this instance. - - The . - - - - - - - - - - - - - - - - Represents an CMYK (cyan, magenta, yellow, keyline) color. - - - - - Gets the cyan color component. - A value ranging between 0 and 1. - - - - - Gets the magenta color component. - A value ranging between 0 and 1. - - - - - Gets the yellow color component. - A value ranging between 0 and 1. - - - - - Gets the keyline black color component. - A value ranging between 0 and 1. - - - - - Initializes a new instance of the struct. - - The cyan component. - The magenta component. - The yellow component. - The keyline black component. - - - - Initializes a new instance of the struct. - - The vector representing the c, m, y, k components. - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the current left is equal to the parameter; otherwise, false. - - - - - Compares two objects for inequality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the current left is unequal to the parameter; otherwise, false. - - - - - - - - - - - - - - - - - Implements gamma companding. - - - - - - - - - Expands a companded channel to its linear equivalent with respect to the energy. - - The channel value. - The gamma value. - The representing the linear channel value. - - - - Compresses an uncompanded channel (linear) to its nonlinear equivalent. - - The channel value. - The gamma value. - The representing the nonlinear channel value. - - - - Implements L* companding. - - - For more info see: - - - - - - - Expands a companded channel to its linear equivalent with respect to the energy. - - The channel value. - The representing the linear channel value. - - - - Compresses an uncompanded channel (linear) to its nonlinear equivalent. - - The channel value - The representing the nonlinear channel value. - - - - Implements Rec. 2020 companding function. - - - - - - - - Expands a companded channel to its linear equivalent with respect to the energy. - - The channel value. - The representing the linear channel value. - - - - Compresses an uncompanded channel (linear) to its nonlinear equivalent. - - The channel value. - The representing the nonlinear channel value. - - - - Implements the Rec. 709 companding function. - - - http://en.wikipedia.org/wiki/Rec._709 - - - - - Expands a companded channel to its linear equivalent with respect to the energy. - - The channel value. - The representing the linear channel value. - - - - Compresses an uncompanded channel (linear) to its nonlinear equivalent. - - The channel value. - The representing the nonlinear channel value. - - - - Implements sRGB companding. - - - For more info see: - - - - - - - Expands the companded vectors to their linear equivalents with respect to the energy. - - The span of vectors. - - - - Compresses the uncompanded vectors to their nonlinear equivalents with respect to the energy. - - The span of vectors. - - - - Expands a companded vector to its linear equivalent with respect to the energy. - - The vector. - - - - Compresses an uncompanded vector (linear) to its nonlinear equivalent. - - The vector. - - - - Expands a companded channel to its linear equivalent with respect to the energy. - - The channel value. - The representing the linear channel value. - - - - Compresses an uncompanded channel (linear) to its nonlinear equivalent. - - The channel value. - The representing the nonlinear channel value. - - - - Constants use for Cie conversion calculations - - - - - - 216F / 24389F - - - - - 24389F / 27F - - - - - Performs chromatic adaptation on the various color spaces. - - - Allows conversion to . - - - Allows conversion to . - - - Allows conversion to . - - - Allows conversion to . - - - Allows conversion to . - - - Allows conversion to . - - - Allows conversion to . - - - Provides methods to allow the conversion of color values between different color spaces. - - - Allows conversion to . - - - Allows conversion to . - - - Allows conversion to . - - - Allows conversion to . - - - Allows conversion to . - - - Allows conversion to . - - - Allows conversion to . - - - - - Performs chromatic adaptation of given color. - Target white point is . - - The color to adapt - The source white point. - The adapted color - - - - Performs chromatic adaptation of given color. - Target white point is . - - The color to adapt - The source white point. - The target white point. - The adapted color - - - - Adapts color from the source white point to white point set in . - - The color to adapt - The adapted color - - - - Adapts color from the source white point to white point set in . - - The color to adapt - The adapted color - - - - Adapts color from the source white point to white point set in . - - The color to adapt - The adapted color - - - - Adapts color from the source white point to white point set in . - - The color to adapt - The adapted color - - - - Adapts color from the source white point to white point set in . - - The color to adapt - The adapted color - - - - Adapts a color from the source working space to working space set in . - - The color to adapt - The adapted color - - - - Adapts an color from the source working space to working space set in . - - The color to adapt - The adapted color - - - - The converter for converting between CieLch to CieLab. - - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a - - The color to convert. - The - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Converts a into a - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - The converter for converting between CieLab to CieLch. - - - - - Converts a into a - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - The converter for converting between CieLab to CieLchuv. - - - - - Converts a into a - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors. - The span to the destination colors. - - - - Converts a into a - - The color to convert. - The - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Converts a into a - - The color to convert. - The - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Converts a into a - - The color to convert. - The - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Converts a into a - - The color to convert. - The - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Converts a into a - - The color to convert. - The - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Converts a into a - - The color to convert. - The - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Converts a into a - - The color to convert. - The - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Converts a into a - - The color to convert. - The - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Converts a into a - - The color to convert. - The - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Converts a into a - - The color to convert. - The - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Converts a into a - - The color to convert. - The - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Converts a into a - - The color to convert. - The - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Converts a into a - - The color to convert. - The - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors. - The span to the destination colors. - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors. - The span to the destination colors. - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a - - The color to convert. - The - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Converts a into a - - The color to convert. - The - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Gets the correct converter for the given rgb working space. - - The source working space - The - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a - - The color to convert. - The - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Converts a into a - - The color to convert. - The - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors, - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The configuration options. - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Converts a into a - - The color to convert. - The - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Converts a into a - - The color to convert. - The - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Converts a into a - - The color to convert. - The - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a - - The color to convert. - The - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Converts a into a - - The color to convert. - The - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Converts a into a - - The color to convert. - The - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Converts a into a - - The color to convert. - The - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Converts a into a - - The color to convert. - The - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Converts a into a - - The color to convert. - The - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Converts a into a - - The color to convert. - The - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Converts a into a - - The color to convert. - The - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors. - - - - Converts a into a - - The color to convert. - The - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Converts a into a - - The color to convert. - The - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Converts a into a - - The color to convert. - The - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Converts a into a - - The color to convert. - The - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Converts a into a - - The color to convert. - The - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Performs the bulk conversion from into . - - The span to the source colors. - The span to the destination colors. - - - - Performs the bulk conversion from into . - - The span to the source colors. - The span to the destination colors. - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Performs the bulk conversion from into . - - The span to the source colors. - The span to the destination colors. - - - - Performs the bulk conversion from into . - - The span to the source colors. - The span to the destination colors. - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors. - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Converts a into a . - - The color to convert. - The - - - - Converts a into a . - - The color to convert. - The - - - - Converts a into a . - - The color to convert. - The - - - - Converts a into a . - - The color to convert. - The - - - - Converts a into a . - - The color to convert. - The - - - - Converts a into a . - - The color to convert. - The - - - - Converts a into a . - - The color to convert. - The - - - - Converts a into a . - - The color to convert. - The - - - - Converts a into a . - - The color to convert. - The - - - - Converts a into a . - - The color to convert. - The - - - - Converts a into a - - The color to convert. - The - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors. - The span to the destination colors. - - - - Performs the bulk conversion from into . - - The span to the source colors. - The span to the destination colors. - - - - Performs the bulk conversion from into . - - The span to the source colors. - The span to the destination colors. - - - - Performs the bulk conversion from into . - - The span to the source colors. - The span to the destination colors. - - - - Performs the bulk conversion from into . - - The span to the source colors. - The span to the destination colors. - - - - Performs the bulk conversion from into . - - The span to the source colors. - The span to the destination colors. - - - - Performs the bulk conversion from into . - - The span to the source colors. - The span to the destination colors. - - - - Performs the bulk conversion from into . - - The span to the source colors. - The span to the destination colors. - - - - Performs the bulk conversion from into . - - The span to the source colors. - The span to the destination colors. - - - - Performs the bulk conversion from into . - - The span to the source colors. - The span to the destination colors. - - - - Performs the bulk conversion from into . - - The span to the source colors. - The span to the destination colors. - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Converts a into a . - - The color to convert. - The - - - - Converts a into a . - - The color to convert. - The - - - - Converts a into a . - - The color to convert. - The - - - - Converts a into a - - The color to convert. - The - - - - Converts a into a . - - The color to convert. - The - - - - Converts a into a . - - The color to convert. - The - - - - Converts a into a . - - The color to convert. - The - - - - Converts a into a . - - The color to convert. - The - - - - Converts a into a . - - The color to convert. - The - - - - Converts a into a . - - The color to convert. - The - - - - Converts a into a - - The color to convert. - The - - - - Converts a into a . - - The color to convert. - The - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Converts a into a - - The color to convert. - The - - - - Converts a into a - - The color to convert. - The - - - - Converts a into a - - The color to convert. - The - - - - Converts a into a - - The color to convert. - The - - - - Converts a into a - - The color to convert. - The - - - - Converts a into a - - The color to convert. - The - - - - Converts a into a - - The color to convert. - The - - - - Converts a into a - - The color to convert. - The - - - - Converts a into a - - The color to convert. - The - - - - Converts a into a - - The color to convert. - The - - - - Converts a into a - - The color to convert. - The - - - - Converts a into a - - The color to convert. - The - - - - Converts a into a - - The color to convert. - The - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Converts a into a - - The color to convert. - The - - - - Converts a into a - - The color to convert. - The - - - - Converts a into a - - The color to convert. - The - - - - Converts a into a - - The color to convert. - The - - - - Converts a into a - - The color to convert. - The - - - - Converts a into a - - The color to convert. - The - - - - Converts a into a - - The color to convert. - The - - - - Converts a into a - - The color to convert. - The - - - - Converts a into a - - The color to convert. - The - - - - Converts a into a - - The color to convert. - The - - - - Converts a into a - - The color to convert. - The - - - - Converts a into a - - The color to convert. - The - - - - Converts a into a - - The color to convert. - The - - - - Performs the bulk conversion from into . - - The span to the source colors. - The span to the destination colors. - - - - Performs the bulk conversion from into . - - The span to the source colors. - The span to the destination colors. - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Performs the bulk conversion from into - - The span to the source colors - The span to the destination colors - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Performs the bulk conversion from into . - - The span to the source colors - The span to the destination colors - - - - Converts a into a . - - The color to convert. - The - - - - Converts a into a . - - The color to convert. - The - - - - Converts a into a . - - The color to convert. - The - - - - Converts a into a . - - The color to convert. - The - - - - Converts a into a . - - The color to convert. - The - - - - Converts a into a . - - The color to convert. - The - - - - Converts a into a . - - The color to convert. - The - - - - Converts a into a . - - The color to convert. - The - - - - Converts a into a . - - The color to convert. - The - - - - Converts a into a . - - The color to convert. - The - - - - Converts a into a . - - The color to convert. - The - - - - Converts a into a . - - The color to convert. - The - - - - Configuration options for the class. - - - - - Gets or sets the white point used for chromatic adaptation in conversions from/to XYZ color space. - When default, no adaptation will be performed. - Defaults to: . - - - - - Gets or sets the white point used *when creating* Luv/LChuv colors. (Luv/LChuv colors on the input already contain the white point information) - Defaults to: . - - - - - Gets or sets the white point used *when creating* Lab/LChab colors. (Lab/LChab colors on the input already contain the white point information) - Defaults to: . - - - - - Gets or sets the white point used *when creating* HunterLab colors. (HunterLab colors on the input already contain the white point information) - Defaults to: . - - - - - Gets or sets the target working space used *when creating* RGB colors. (RGB colors on the input already contain the working space information) - Defaults to: . - - - - - Gets or sets the chromatic adaptation method used. When null, no adaptation will be performed. - - - - - Gets or sets transformation matrix used in conversion to and from . - - - - - Represents the coordinates of CIEXY chromaticity space. - - - - - Gets the chromaticity X-coordinate. - - - Ranges usually from 0 to 1. - - - - - Gets the chromaticity Y-coordinate - - - Ranges usually from 0 to 1. - - - - - Initializes a new instance of the struct. - - Chromaticity coordinate x (usually from 0 to 1) - Chromaticity coordinate y (usually from 0 to 1) - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the current left is equal to the parameter; otherwise, false. - - - - - Compares two objects for inequality - - The on the left side of the operand. - The on the right side of the operand. - - True if the current left is unequal to the parameter; otherwise, false. - - - - - - - - - - - - - - - - - Converts from to . - - - - - Performs the conversion from the input to an instance of type. - - The input color instance. - The converted result - - - - Converts from to . - - - - - Performs the conversion from the input to an instance of type. - - The input color instance. - The converted result - - - - Converts from to . - - - - - Performs the conversion from the input to an instance of type. - - The input color instance. - The converted result - - - - Converts from to . - - - - - Performs the conversion from the input to an instance of type. - - The input color instance. - The converted result - - - - Converts from to . - - - - - Performs the conversion from the input to an instance of type. - - The input color instance. - The converted result - - - - Converts from to . - - - - - Performs the conversion from the input to an instance of type. - - The input color instance. - The converted result - - - - Calculates the blue-yellow chromacity based on the given whitepoint. - - The whitepoint - The - - - - Calculates the red-green chromacity based on the given whitepoint. - - The whitepoint - The - - - - Color converter between CIE XYZ and CIE xyY. - for formulas. - - - - - Performs the conversion from the input to an instance of type. - - The input color instance. - The converted result - - - - Performs the conversion from the input to an instance of type. - - The input color instance. - The converted result - - - - The base class for converting between and color spaces. - - - - - Returns the Ka coefficient that depends upon the whitepoint illuminant. - - The whitepoint - The - - - - Returns the Kb coefficient that depends upon the whitepoint illuminant. - - The whitepoint - The - - - - Color converter between and - - - - - Default transformation matrix used, when no other is set. (Bradford) - - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - - Definition of the cone response domain (see ), - if not set will be used. - - - - - Performs the conversion from the input to an instance of type. - - The input color instance. - The converted result - - - - Performs the conversion from the input to an instance of type. - - The input color instance. - The converted result - - - - Converts from to . - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The target reference lab white point - - - - Gets the target reference whitepoint. When not set, is used. - - - - - Performs the conversion from the input to an instance of type. - - The input color instance. - The converted result - - - - Converts from to . - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The target reference luv white point - - - - Gets the target reference whitepoint. When not set, is used. - - - - - Performs the conversion from the input to an instance of type. - - The input color instance. - The converted result - - - - Calculates the blue-yellow chromacity based on the given whitepoint. - - The whitepoint - The - - - - Calculates the red-green chromacity based on the given whitepoint. - - The whitepoint - The - - - - Color converter between and - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The hunter Lab white point. - - - - Gets the target reference white. When not set, is used. - - - - - Performs the conversion from the input to an instance of type. - - The input color instance. - The converted result - - - - Color converter between and - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The target working space. - - - - Gets the target working space. - - - - - Performs the conversion from the input to an instance of type. - - The input color instance. - The converted result. - - - - Color converter between and . - - - - - Performs the conversion from the input to an instance of type. - - The input color instance. - The converted result - - - - Performs the conversion from the input to an instance of type. - - The input color instance. - The converted result. - - - - Color converter between HSL and Rgb - See for formulas. - - - - - Performs the conversion from the input to an instance of type. - - The input color instance. - The converted result - - - - Performs the conversion from the input to an instance of type. - - The input color instance. - The converted result - - - - Gets the color component from the given values. - - The first value. - The second value. - The third value. - - The . - - - - - Moves the specific value within the acceptable range for - conversion. - Used for converting colors to this type. - - The value to shift. - - The . - - - - - Color converter between HSV and Rgb - See for formulas. - - - - - Performs the conversion from the input to an instance of type. - - The input color instance. - The converted result - - - - Performs the conversion from the input to an instance of type. - - The input color instance. - The converted result - - - - Color converter between and - - - - - Performs the conversion from the input to an instance of type. - - The input color instance. - The converted result - - - - Provides base methods for converting between and color spaces. - - - - - Returns the correct matrix to convert between the Rgb and CieXyz color space. - - The Rgb working space. - The based on the chromaticity and working space. - - - - Color converter between and - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The target working space. - - - - Gets the source working space - - - - - Performs the conversion from the input to an instance of type. - - The input color instance. - The converted result - - - - Color converter between and . - - - - - Performs the conversion from the input to an instance of type. - - The input color instance. - The converted result. - - - - Color converter between Rgb and LinearRgb. - - - - - Performs the conversion from the input to an instance of type. - - The input color instance. - The converted result. - - - - Color converter between and - See for formulas. - - - - - Performs the conversion from the input to an instance of type. - - The input color instance. - The converted result. - - - - Performs the conversion from the input to an instance of type. - - The input color instance. - The converted result. - - - - Chromatic adaptation. - A linear transformation of a source color (XS, YS, ZS) into a destination color (XD, YD, ZD) by a linear transformation [M] - which is dependent on the source reference white (XWS, YWS, ZWS) and the destination reference white (XWD, YWD, ZWD). - - - - - Performs a linear transformation of a source color in to the destination color. - - Doesn't crop the resulting color space coordinates (e. g. allows negative values for XYZ coordinates). - The source color. - The source white point. - The destination white point. - The - - - - Performs a bulk linear transformation of a source color in to the destination color. - - Doesn't crop the resulting color space coordinates (e. g. allows negative values for XYZ coordinates). - The span to the source colors. - The span to the destination colors. - The source white point. - The destination white point. - - - - Matrices used for transformation from to , defining the cone response domain. - Used in - - - Matrix data obtained from: - Two New von Kries Based Chromatic Adaptation Transforms Found by Numerical Optimization - S. Bianco, R. Schettini - DISCo, Department of Informatics, Systems and Communication, University of Milan-Bicocca, viale Sarca 336, 20126 Milan, Italy - https://web.stanford.edu/~sujason/ColorBalancing/Papers/Two%20New%20von%20Kries%20Based%20Chromatic%20Adaptation.pdf - - - - - Von Kries chromatic adaptation transform matrix (Hunt-Pointer-Estevez adjusted for D65) - - - - - Von Kries chromatic adaptation transform matrix (Hunt-Pointer-Estevez for equal energy) - - - - - XYZ scaling chromatic adaptation transform matrix - - - - - Bradford chromatic adaptation transform matrix (used in CMCCAT97) - - - - - Spectral sharpening and the Bradford transform - - - - - CMCCAT2000 (fitted from all available color data sets) - - - - - CAT02 (optimized for minimizing CIELAB differences) - - - - - Represents the chromaticity coordinates of RGB primaries. - One of the specifiers of . - - - - - Initializes a new instance of the struct. - - The chromaticity coordinates of the red channel. - The chromaticity coordinates of the green channel. - The chromaticity coordinates of the blue channel. - - - - Gets the chromaticity coordinates of the red channel. - - - - - Gets the chromaticity coordinates of the green channel. - - - - - Gets the chromaticity coordinates of the blue channel. - - - - - Compares two objects for equality. - - - The on the left side of the operand. - - - The on the right side of the operand. - - - True if the current left is equal to the parameter; otherwise, false. - - - - - Compares two objects for inequality - - - The on the left side of the operand. - - - The on the right side of the operand. - - - True if the current left is unequal to the parameter; otherwise, false. - - - - - - - - - - - - - - Implementation of the von Kries chromatic adaptation model. - - - Transformation described here: - http://www.brucelindbloom.com/index.html?Eqn_ChromAdapt.html - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - - The transformation matrix used for the conversion (definition of the cone response domain). - - - - - - Initializes a new instance of the class. - - The color converter - - - - - - - - - - The gamma working space. - - - - - Initializes a new instance of the class. - - The gamma value. - The reference white point. - The chromaticity of the rgb primaries. - - - - Gets the gamma value. - - - - - - - - - - - - - - - - - L* working space. - - - - - Initializes a new instance of the class. - - The reference white point. - The chromaticity of the rgb primaries. - - - - - - - - - - Rec. 2020 (ITU-R Recommendation BT.2020F) working space. - - - - - Initializes a new instance of the class. - - The reference white point. - The chromaticity of the rgb primaries. - - - - - - - - - - Rec. 709 (ITU-R Recommendation BT.709) working space. - - - - - Initializes a new instance of the class. - - The reference white point. - The chromaticity of the rgb primaries. - - - - - - - - - - Base class for all implementations of . - - - - - Initializes a new instance of the class. - - The reference white point. - The chromaticity of the rgb primaries. - - - - Gets the reference white point - - - - - Gets the chromaticity of the rgb primaries. - - - - - Expands a companded channel to its linear equivalent with respect to the energy. - - - For more info see: - - - The channel value. - The representing the linear channel value. - - - - Compresses an uncompanded channel (linear) to its nonlinear equivalent (depends on the RGB color system). - - - For more info see: - - - The channel value. - The representing the nonlinear channel value. - - - - - - - - - - The sRgb working space. - - - - - Initializes a new instance of the class. - - The reference white point. - The chromaticity of the rgb primaries. - - - - - - - - - - Represents a Hsl (hue, saturation, lightness) color. - - - - - Gets the hue component. - A value ranging between 0 and 360. - - - - - Gets the saturation component. - A value ranging between 0 and 1. - - - - - Gets the lightness component. - A value ranging between 0 and 1. - - - - - Initializes a new instance of the struct. - - The h hue component. - The s saturation component. - The l value (lightness) component. - - - - Initializes a new instance of the struct. - - The vector representing the h, s, l components. - - - - Compares two objects for equality. - - - The on the left side of the operand. - - The on the right side of the operand. - - True if the current left is equal to the parameter; otherwise, false. - - - - - Compares two objects for inequality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the current left is unequal to the parameter; otherwise, false. - - - - - - - - - - - - - - - - - Represents a HSV (hue, saturation, value) color. Also known as HSB (hue, saturation, brightness). - - - - - Gets the hue component. - A value ranging between 0 and 360. - - - - - Gets the saturation component. - A value ranging between 0 and 1. - - - - - Gets the value (brightness) component. - A value ranging between 0 and 1. - - - - - Initializes a new instance of the struct. - - The h hue component. - The s saturation component. - The v value (brightness) component. - - - - Initializes a new instance of the struct. - - The vector representing the h, s, v components. - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the current left is equal to the parameter; otherwise, false. - - - - - Compares two objects for inequality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the current left is unequal to the parameter; otherwise, false. - - - - - - - - - - - - - - - - - Represents an Hunter LAB color. - . - - - - - D50 standard illuminant. - Used when reference white is not specified explicitly. - - - - - Gets the lightness dimension. - A value usually ranging between 0 (black), 100 (diffuse white) or higher (specular white). - - - - - Gets the a color component. - A value usually ranging from -100 to 100. Negative is green, positive magenta. - - - - - Gets the b color component. - A value usually ranging from -100 to 100. Negative is blue, positive is yellow - - - - - Gets the reference white point of this color. - - - - - Initializes a new instance of the struct. - - The lightness dimension. - The a (green - magenta) component. - The b (blue - yellow) component. - Uses as white point. - - - - Initializes a new instance of the struct. - - The lightness dimension. - The a (green - magenta) component. - The b (blue - yellow) component. - The reference white point. - - - - Initializes a new instance of the struct. - - The vector representing the l, a, b components. - Uses as white point. - - - - Initializes a new instance of the struct. - - The vector representing the l a b components. - The reference white point. - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the current left is equal to the parameter; otherwise, false. - - - - - Compares two objects for inequality - - The on the left side of the operand. - The on the right side of the operand. - - True if the current left is unequal to the parameter; otherwise, false. - - - - - - - - - - - - - - - - - The well known standard illuminants. - Standard illuminants provide a basis for comparing images or colors recorded under different lighting - - - Coefficients taken from: http://www.brucelindbloom.com/index.html?Eqn_ChromAdapt.html -
- Descriptions taken from: http://en.wikipedia.org/wiki/Standard_illuminant -
-
- - - Incandescent / Tungsten - - - - - Direct sunlight at noon (obsoleteF) - - - - - Average / North sky Daylight (obsoleteF) - - - - - Horizon Light. ICC profile PCS - - - - - Mid-morning / Mid-afternoon Daylight - - - - - Noon Daylight: TelevisionF, sRGB color space - - - - - North sky Daylight - - - - - Equal energy - - - - - Cool White Fluorescent - - - - - D65 simulatorF, Daylight simulator - - - - - Philips TL84F, Ultralume 40 - - - - - Represents an linear Rgb color with specified working space - - - - - The default LinearRgb working space. - - - - - Gets the red component. - A value usually ranging between 0 and 1. - - - - - Gets the green component. - A value usually ranging between 0 and 1. - - - - - Gets the blue component. - A value usually ranging between 0 and 1. - - - - - Gets the LinearRgb color space - - - - - Initializes a new instance of the struct. - - The red component ranging between 0 and 1. - The green component ranging between 0 and 1. - The blue component ranging between 0 and 1. - - - - Initializes a new instance of the struct. - - The red component ranging between 0 and 1. - The green component ranging between 0 and 1. - The blue component ranging between 0 and 1. - The rgb working space. - - - - Initializes a new instance of the struct. - - The vector representing the r, g, b components. - - - - Initializes a new instance of the struct. - - The vector representing the r, g, b components. - The LinearRgb working space. - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the current left is equal to the parameter; otherwise, false. - - - - - Compares two objects for inequality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the current left is unequal to the parameter; otherwise, false. - - - - - Returns a new representing this instance. - - The . - - - - - - - - - - - - - - - - LMS is a color space represented by the response of the three types of cones of the human eye, - named after their responsivity (sensitivity) at long, medium and short wavelengths. - - - - - - Gets the L long component. - A value usually ranging between -1 and 1. - - - - - Gets the M medium component. - A value usually ranging between -1 and 1. - - - - - Gets the S short component. - A value usually ranging between -1 and 1. - - - - - Initializes a new instance of the struct. - - L represents the responsivity at long wavelengths. - M represents the responsivity at medium wavelengths. - S represents the responsivity at short wavelengths. - - - - Initializes a new instance of the struct. - - The vector representing the l, m, s components. - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the current left is equal to the parameter; otherwise, false. - - - - - Compares two objects for inequality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the current left is unequal to the parameter; otherwise, false. - - - - - Returns a new representing this instance. - - The . - - - - - - - - - - - - - - - - Represents an RGB color with specified working space. - - - - - The default rgb working space. - - - - - Gets the red component. - A value usually ranging between 0 and 1. - - - - - Gets the green component. - A value usually ranging between 0 and 1. - - - - - Gets the blue component. - A value usually ranging between 0 and 1. - - - - - Gets the Rgb color space - - - - - Initializes a new instance of the struct. - - The red component ranging between 0 and 1. - The green component ranging between 0 and 1. - The blue component ranging between 0 and 1. - - - - Initializes a new instance of the struct. - - The red component ranging between 0 and 1. - The green component ranging between 0 and 1. - The blue component ranging between 0 and 1. - The rgb working space. - - - - Initializes a new instance of the struct. - - The vector representing the r, g, b components. - - - - Initializes a new instance of the struct. - - The vector representing the r, g, b components. - The rgb working space. - - - - Allows the implicit conversion of an instance of to a - . - - The instance of to convert. - An instance of . - - - - Allows the implicit conversion of an instance of to a - . - - The instance of to convert. - An instance of . - - - - Compares two objects for equality. - - - The on the left side of the operand. - - - The on the right side of the operand. - - - True if the current left is equal to the parameter; otherwise, false. - - - - - Compares two objects for inequality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the current left is unequal to the parameter; otherwise, false. - - - - - Returns a new representing this instance. - - The . - - - - - - - - - - - - - - - - Chromaticity coordinates based on: - - - - - sRgb working space. - - - Uses proper companding function, according to: - - - - - - Simplified sRgb working space (uses gamma companding instead of ). - See also . - - - - - Rec. 709 (ITU-R Recommendation BT.709) working space. - - - - - Rec. 2020 (ITU-R Recommendation BT.2020F) working space. - - - - - ECI Rgb v2 working space. - - - - - Adobe Rgb (1998) working space. - - - - - Apple sRgb working space. - - - - - Best Rgb working space. - - - - - Beta Rgb working space. - - - - - Bruce Rgb working space. - - - - - CIE Rgb working space. - - - - - ColorMatch Rgb working space. - - - - - Don Rgb 4 working space. - - - - - Ekta Space PS5 working space. - - - - - NTSC Rgb working space. - - - - - PAL/SECAM Rgb working space. - - - - - ProPhoto Rgb working space. - - - - - SMPTE-C Rgb working space. - - - - - Wide Gamut Rgb working space. - - - - - Represents an YCbCr (luminance, blue chroma, red chroma) color as defined in the ITU-T T.871 specification for the JFIF use with Jpeg. - - - - - - - Gets the Y luminance component. - A value ranging between 0 and 255. - - - - - Gets the Cb chroma component. - A value ranging between 0 and 255. - - - - - Gets the Cr chroma component. - A value ranging between 0 and 255. - - - - - Initializes a new instance of the struct. - - The y luminance component. - The cb chroma component. - The cr chroma component. - - - - Initializes a new instance of the struct. - - The vector representing the y, cb, cr components. - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the current left is equal to the parameter; otherwise, false. - - - - - Compares two objects for inequality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the current left is unequal to the parameter; otherwise, false. - - - - - - - - - - - - - - - - - Contains constructors and implicit conversion methods. - - - Represents a color value that is convertible to any type. - - - The internal representation and layout of this structure is hidden by intention. - It's not serializable, and it should not be considered as part of a contract. - Unlike System.Drawing.Color, has to be converted to a specific pixel value - to query the color components. - - - Contains static named color values. - - - - Contains the definition of . - - - Contains the definition of . - - - - - Initializes a new instance of the struct. - - The containing the color information. - - - - Initializes a new instance of the struct. - - The containing the color information. - - - - Initializes a new instance of the struct. - - The containing the color information. - - - - Initializes a new instance of the struct. - - The containing the color information. - - - - Initializes a new instance of the struct. - - The containing the color information. - - - - Initializes a new instance of the struct. - - The containing the color information. - - - - Initializes a new instance of the struct. - - The containing the color information. - - - - Converts a to . - - The . - The . - - - - Converts an to . - - The . - The . - - - - Checks whether two structures are equal. - - The left hand operand. - The right hand operand. - - True if the parameter is equal to the parameter; - otherwise, false. - - - - - Checks whether two structures are equal. - - The left hand operand. - The right hand operand. - - True if the parameter is not equal to the parameter; - otherwise, false. - - - - - Creates a from RGBA bytes. - - The red component (0-255). - The green component (0-255). - The blue component (0-255). - The alpha component (0-255). - The . - - - - Creates a from RGB bytes. - - The red component (0-255). - The green component (0-255). - The blue component (0-255). - The . - - - - Creates a new instance of the struct - from the given hexadecimal string. - - - The hexadecimal representation of the combined color components arranged - in rgb, rgba, rrggbb, or rrggbbaa format to match web syntax. - - - The . - - - - - Attempts to creates a new instance of the struct - from the given hexadecimal string. - - - The hexadecimal representation of the combined color components arranged - in rgb, rgba, rrggbb, or rrggbbaa format to match web syntax. - - When this method returns, contains the equivalent of the hexadecimal input. - - The . - - - - - Creates a new instance of the struct - from the given input string. - - - The name of the color or the hexadecimal representation of the combined color components arranged - in rgb, rgba, rrggbb, or rrggbbaa format to match web syntax. - - - The . - - - - - Attempts to creates a new instance of the struct - from the given input string. - - - The name of the color or the hexadecimal representation of the combined color components arranged - in rgb, rgba, rrggbb, or rrggbbaa format to match web syntax. - - When this method returns, contains the equivalent of the hexadecimal input. - - The . - - - - - Alters the alpha channel of the color, returning a new instance. - - The new value of alpha [0..1]. - The color having it's alpha channel altered. - - - - Gets the hexadecimal representation of the color instance in rrggbbaa form. - - A hexadecimal string representation of the value. - - - - - - - Converts the color instance to a specified type. - - The pixel type to convert to. - The pixel value. - - - - Bulk converts a span of to a span of a specified type. - - The pixel type to convert to. - The configuration. - The source color span. - The destination pixel span. - - - - - - - - - - - - - Represents a matching the W3C definition that has an hex value of #F0F8FF. - - - - - Represents a matching the W3C definition that has an hex value of #FAEBD7. - - - - - Represents a matching the W3C definition that has an hex value of #00FFFF. - - - - - Represents a matching the W3C definition that has an hex value of #7FFFD4. - - - - - Represents a matching the W3C definition that has an hex value of #F0FFFF. - - - - - Represents a matching the W3C definition that has an hex value of #F5F5DC. - - - - - Represents a matching the W3C definition that has an hex value of #FFE4C4. - - - - - Represents a matching the W3C definition that has an hex value of #000000. - - - - - Represents a matching the W3C definition that has an hex value of #FFEBCD. - - - - - Represents a matching the W3C definition that has an hex value of #0000FF. - - - - - Represents a matching the W3C definition that has an hex value of #8A2BE2. - - - - - Represents a matching the W3C definition that has an hex value of #A52A2A. - - - - - Represents a matching the W3C definition that has an hex value of #DEB887. - - - - - Represents a matching the W3C definition that has an hex value of #5F9EA0. - - - - - Represents a matching the W3C definition that has an hex value of #7FFF00. - - - - - Represents a matching the W3C definition that has an hex value of #D2691E. - - - - - Represents a matching the W3C definition that has an hex value of #FF7F50. - - - - - Represents a matching the W3C definition that has an hex value of #6495ED. - - - - - Represents a matching the W3C definition that has an hex value of #FFF8DC. - - - - - Represents a matching the W3C definition that has an hex value of #DC143C. - - - - - Represents a matching the W3C definition that has an hex value of #00FFFF. - - - - - Represents a matching the W3C definition that has an hex value of #00008B. - - - - - Represents a matching the W3C definition that has an hex value of #008B8B. - - - - - Represents a matching the W3C definition that has an hex value of #B8860B. - - - - - Represents a matching the W3C definition that has an hex value of #A9A9A9. - - - - - Represents a matching the W3C definition that has an hex value of #006400. - - - - - Represents a matching the W3C definition that has an hex value of #A9A9A9. - - - - - Represents a matching the W3C definition that has an hex value of #BDB76B. - - - - - Represents a matching the W3C definition that has an hex value of #8B008B. - - - - - Represents a matching the W3C definition that has an hex value of #556B2F. - - - - - Represents a matching the W3C definition that has an hex value of #FF8C00. - - - - - Represents a matching the W3C definition that has an hex value of #9932CC. - - - - - Represents a matching the W3C definition that has an hex value of #8B0000. - - - - - Represents a matching the W3C definition that has an hex value of #E9967A. - - - - - Represents a matching the W3C definition that has an hex value of #8FBC8F. - - - - - Represents a matching the W3C definition that has an hex value of #483D8B. - - - - - Represents a matching the W3C definition that has an hex value of #2F4F4F. - - - - - Represents a matching the W3C definition that has an hex value of #2F4F4F. - - - - - Represents a matching the W3C definition that has an hex value of #00CED1. - - - - - Represents a matching the W3C definition that has an hex value of #9400D3. - - - - - Represents a matching the W3C definition that has an hex value of #FF1493. - - - - - Represents a matching the W3C definition that has an hex value of #00BFFF. - - - - - Represents a matching the W3C definition that has an hex value of #696969. - - - - - Represents a matching the W3C definition that has an hex value of #696969. - - - - - Represents a matching the W3C definition that has an hex value of #1E90FF. - - - - - Represents a matching the W3C definition that has an hex value of #B22222. - - - - - Represents a matching the W3C definition that has an hex value of #FFFAF0. - - - - - Represents a matching the W3C definition that has an hex value of #228B22. - - - - - Represents a matching the W3C definition that has an hex value of #FF00FF. - - - - - Represents a matching the W3C definition that has an hex value of #DCDCDC. - - - - - Represents a matching the W3C definition that has an hex value of #F8F8FF. - - - - - Represents a matching the W3C definition that has an hex value of #FFD700. - - - - - Represents a matching the W3C definition that has an hex value of #DAA520. - - - - - Represents a matching the W3C definition that has an hex value of #808080. - - - - - Represents a matching the W3C definition that has an hex value of #008000. - - - - - Represents a matching the W3C definition that has an hex value of #ADFF2F. - - - - - Represents a matching the W3C definition that has an hex value of #808080. - - - - - Represents a matching the W3C definition that has an hex value of #F0FFF0. - - - - - Represents a matching the W3C definition that has an hex value of #FF69B4. - - - - - Represents a matching the W3C definition that has an hex value of #CD5C5C. - - - - - Represents a matching the W3C definition that has an hex value of #4B0082. - - - - - Represents a matching the W3C definition that has an hex value of #FFFFF0. - - - - - Represents a matching the W3C definition that has an hex value of #F0E68C. - - - - - Represents a matching the W3C definition that has an hex value of #E6E6FA. - - - - - Represents a matching the W3C definition that has an hex value of #FFF0F5. - - - - - Represents a matching the W3C definition that has an hex value of #7CFC00. - - - - - Represents a matching the W3C definition that has an hex value of #FFFACD. - - - - - Represents a matching the W3C definition that has an hex value of #ADD8E6. - - - - - Represents a matching the W3C definition that has an hex value of #F08080. - - - - - Represents a matching the W3C definition that has an hex value of #E0FFFF. - - - - - Represents a matching the W3C definition that has an hex value of #FAFAD2. - - - - - Represents a matching the W3C definition that has an hex value of #D3D3D3. - - - - - Represents a matching the W3C definition that has an hex value of #90EE90. - - - - - Represents a matching the W3C definition that has an hex value of #D3D3D3. - - - - - Represents a matching the W3C definition that has an hex value of #FFB6C1. - - - - - Represents a matching the W3C definition that has an hex value of #FFA07A. - - - - - Represents a matching the W3C definition that has an hex value of #20B2AA. - - - - - Represents a matching the W3C definition that has an hex value of #87CEFA. - - - - - Represents a matching the W3C definition that has an hex value of #778899. - - - - - Represents a matching the W3C definition that has an hex value of #778899. - - - - - Represents a matching the W3C definition that has an hex value of #B0C4DE. - - - - - Represents a matching the W3C definition that has an hex value of #FFFFE0. - - - - - Represents a matching the W3C definition that has an hex value of #00FF00. - - - - - Represents a matching the W3C definition that has an hex value of #32CD32. - - - - - Represents a matching the W3C definition that has an hex value of #FAF0E6. - - - - - Represents a matching the W3C definition that has an hex value of #FF00FF. - - - - - Represents a matching the W3C definition that has an hex value of #800000. - - - - - Represents a matching the W3C definition that has an hex value of #66CDAA. - - - - - Represents a matching the W3C definition that has an hex value of #0000CD. - - - - - Represents a matching the W3C definition that has an hex value of #BA55D3. - - - - - Represents a matching the W3C definition that has an hex value of #9370DB. - - - - - Represents a matching the W3C definition that has an hex value of #3CB371. - - - - - Represents a matching the W3C definition that has an hex value of #7B68EE. - - - - - Represents a matching the W3C definition that has an hex value of #00FA9A. - - - - - Represents a matching the W3C definition that has an hex value of #48D1CC. - - - - - Represents a matching the W3C definition that has an hex value of #C71585. - - - - - Represents a matching the W3C definition that has an hex value of #191970. - - - - - Represents a matching the W3C definition that has an hex value of #F5FFFA. - - - - - Represents a matching the W3C definition that has an hex value of #FFE4E1. - - - - - Represents a matching the W3C definition that has an hex value of #FFE4B5. - - - - - Represents a matching the W3C definition that has an hex value of #FFDEAD. - - - - - Represents a matching the W3C definition that has an hex value of #000080. - - - - - Represents a matching the W3C definition that has an hex value of #FDF5E6. - - - - - Represents a matching the W3C definition that has an hex value of #808000. - - - - - Represents a matching the W3C definition that has an hex value of #6B8E23. - - - - - Represents a matching the W3C definition that has an hex value of #FFA500. - - - - - Represents a matching the W3C definition that has an hex value of #FF4500. - - - - - Represents a matching the W3C definition that has an hex value of #DA70D6. - - - - - Represents a matching the W3C definition that has an hex value of #EEE8AA. - - - - - Represents a matching the W3C definition that has an hex value of #98FB98. - - - - - Represents a matching the W3C definition that has an hex value of #AFEEEE. - - - - - Represents a matching the W3C definition that has an hex value of #DB7093. - - - - - Represents a matching the W3C definition that has an hex value of #FFEFD5. - - - - - Represents a matching the W3C definition that has an hex value of #FFDAB9. - - - - - Represents a matching the W3C definition that has an hex value of #CD853F. - - - - - Represents a matching the W3C definition that has an hex value of #FFC0CB. - - - - - Represents a matching the W3C definition that has an hex value of #DDA0DD. - - - - - Represents a matching the W3C definition that has an hex value of #B0E0E6. - - - - - Represents a matching the W3C definition that has an hex value of #800080. - - - - - Represents a matching the W3C definition that has an hex value of #663399. - - - - - Represents a matching the W3C definition that has an hex value of #FF0000. - - - - - Represents a matching the W3C definition that has an hex value of #BC8F8F. - - - - - Represents a matching the W3C definition that has an hex value of #4169E1. - - - - - Represents a matching the W3C definition that has an hex value of #8B4513. - - - - - Represents a matching the W3C definition that has an hex value of #FA8072. - - - - - Represents a matching the W3C definition that has an hex value of #F4A460. - - - - - Represents a matching the W3C definition that has an hex value of #2E8B57. - - - - - Represents a matching the W3C definition that has an hex value of #FFF5EE. - - - - - Represents a matching the W3C definition that has an hex value of #A0522D. - - - - - Represents a matching the W3C definition that has an hex value of #C0C0C0. - - - - - Represents a matching the W3C definition that has an hex value of #87CEEB. - - - - - Represents a matching the W3C definition that has an hex value of #6A5ACD. - - - - - Represents a matching the W3C definition that has an hex value of #708090. - - - - - Represents a matching the W3C definition that has an hex value of #708090. - - - - - Represents a matching the W3C definition that has an hex value of #FFFAFA. - - - - - Represents a matching the W3C definition that has an hex value of #00FF7F. - - - - - Represents a matching the W3C definition that has an hex value of #4682B4. - - - - - Represents a matching the W3C definition that has an hex value of #D2B48C. - - - - - Represents a matching the W3C definition that has an hex value of #008080. - - - - - Represents a matching the W3C definition that has an hex value of #D8BFD8. - - - - - Represents a matching the W3C definition that has an hex value of #FF6347. - - - - - Represents a matching the W3C definition that has an hex value of #00000000. - - - - - Represents a matching the W3C definition that has an hex value of #40E0D0. - - - - - Represents a matching the W3C definition that has an hex value of #EE82EE. - - - - - Represents a matching the W3C definition that has an hex value of #F5DEB3. - - - - - Represents a matching the W3C definition that has an hex value of #FFFFFF. - - - - - Represents a matching the W3C definition that has an hex value of #F5F5F5. - - - - - Represents a matching the W3C definition that has an hex value of #FFFF00. - - - - - Represents a matching the W3C definition that has an hex value of #9ACD32. - - - - - Gets a collection of named, web safe colors as defined in the CSS Color Module Level 4. - - - - - Gets a collection of colors as defined in the original second edition of Werner’s Nomenclature of Colours 1821. - The hex codes were collected and defined by Nicholas Rougeux . - - - - - Common constants used throughout the project - - - - - The epsilon value for comparing floating point numbers. - - - - - The epsilon squared value for comparing floating point numbers. - - - - - The exception that is thrown when the library tries to load - an image, which has format or content that is invalid or unsupported by ImageSharp. - - - - - Initializes a new instance of the class with the name of the - parameter that causes this exception. - - The error message that explains the reason for this exception. - - - - Initializes a new instance of the class with a specified - error message and the exception that is the cause of this exception. - - The error message that explains the reason for this exception. - The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) - if no inner exception is specified. - - - - The exception that is thrown when an error occurs when applying a process to an image. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the name of the - parameter that causes this exception. - - The error message that explains the reason for this exception. - - - - Initializes a new instance of the class with a specified - error message and the exception that is the cause of this exception. - - The error message that explains the reason for this exception. - The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) - if no inner exception is specified. - - - - The exception that is thrown when the library tries to load - an image which contains invalid content. - - - - - Initializes a new instance of the class with the name of the - parameter that causes this exception. - - The error message that explains the reason for this exception. - - - - Initializes a new instance of the class with the name of the - parameter that causes this exception. - - The error message that explains the reason for this exception. - The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) - if no inner exception is specified. - - - - The exception that is thrown when the library tries to load - an image which has an unknown format. - - - - - Initializes a new instance of the class with the name of the - parameter that causes this exception. - - The error message that explains the reason for this exception. - - - - Contains extension methods for - - - - - Creates a object based on , - having set to - - - - - Extension methods for the type. - - - - - Gets a string from the provided buffer data. - - The encoding. - The buffer. - The string. - - - - Encapsulates a series of time saving extension methods to the interface. - - - - - Generates a sequence of integral numbers within a specified range. - - - The start index, inclusive. - - - A method that has one parameter and returns a calculating the end index. - - - The incremental step. - - - The that contains a range of sequential integral numbers. - - - - - Generates a sequence of integral numbers within a specified range. - - The start index, inclusive. - - A method that has one parameter and returns a calculating the end index. - - The incremental step. - - The that contains a range of sequential integral numbers. - - - - - Extension methods for the type. - - - - - Writes data from a stream into the provided buffer. - - The stream. - The buffer. - The offset within the buffer to begin writing. - The number of bytes to write to the stream. - - - - Reads data from a stream into the provided buffer. - - The stream. - The buffer. - The offset within the buffer where the bytes are read into. - The number of bytes, if available, to read. - The actual number of bytes read. - - - - Skips the number of bytes in the given stream. - - The stream. - A byte offset relative to the origin parameter. - - - - Provides optimized static methods for common mathematical functions specific - to color processing. - - - - - Vector for converting pixel to gray value as specified by - ITU-R Recommendation BT.709. - - - - - Convert a pixel value to grayscale using ITU-R Recommendation BT.709. - - The vector to get the luminance from. - - The number of luminance levels (256 for 8 bit, 65536 for 16 bit grayscale images). - - - - - Gets the luminance from the rgb components using the formula - as specified by ITU-R Recommendation BT.709. - - The red component. - The green component. - The blue component. - The . - - - - Gets the luminance from the rgb components using the formula as - specified by ITU-R Recommendation BT.709. - - The red component. - The green component. - The blue component. - The . - - - - Gets the luminance from the rgb components using the formula as specified - by ITU-R Recommendation BT.709. - - The red component. - The green component. - The blue component. - The . - - - - Scales a value from a 16 bit to an - 8 bit equivalent. - - The 8 bit component value. - The - - - - Scales a value from an 8 bit to - an 16 bit equivalent. - - The 8 bit component value. - The - - - - Returns how many bits are required to store the specified number of colors. - Performs a Log2() on the value. - - The number of colors. - - The - - - - - Returns how many colors will be created by the specified number of bits. - - The bit depth. - The - - - - Transforms a vector by the given color matrix. - - The source vector. - The transformation color matrix. - - - - Bulk variant of . - - The span of vectors - The transformation color matrix. - - - - Common utility methods for working with enums. - - - - - Converts the numeric representation of the enumerated constants to an equivalent enumerated object. - - The type of enum - The value to parse - The default value to return. - The . - - - - Returns a value indicating whether the given enum has a flag of the given value. - - The type of enum. - The value. - The flag. - The . - - - - Global inlining options. Helps temporarily disable inlining for better profiler output. - - - - - Provides optimized static methods for trigonometric, logarithmic, - and other common mathematical functions. - - - - - Determine the Greatest CommonDivisor (GCD) of two numbers. - - - - - Determine the Least Common Multiple (LCM) of two numbers. - See https://en.wikipedia.org/wiki/Least_common_multiple#Reduction_by_the_greatest_common_divisor. - - - - - Calculates % 2 - - - - - Calculates % 4 - - - - - Calculates % 8 - - - - - Fast (x mod m) calculator, with the restriction that - should be power of 2. - - - - - Returns the absolute value of a 32-bit signed integer. - Uses bit shifting to speed up the operation compared to . - - - A number that is greater than , but less than - or equal to - - The - - - - Returns a specified number raised to the power of 2 - - A single-precision floating-point number - The number raised to the power of 2. - - - - Returns a specified number raised to the power of 3 - - A single-precision floating-point number - The number raised to the power of 3. - - - - Implementation of 1D Gaussian G(x) function - - The x provided to G(x). - The spread of the blur. - The Gaussian G(x) - - - - Returns the result of a normalized sine cardinal function for the given value. - SinC(x) = sin(pi*x)/(pi*x). - - A single-precision floating-point number to calculate the result for. - - The sine cardinal of . - - - - - Returns the value clamped to the inclusive range of min and max. - - The value to clamp. - The minimum inclusive value. - The maximum inclusive value. - The clamped . - - - - Returns the value clamped to the inclusive range of min and max. - - The value to clamp. - The minimum inclusive value. - The maximum inclusive value. - The clamped . - - - - Returns the value clamped to the inclusive range of min and max. - - The value to clamp. - The minimum inclusive value. - The maximum inclusive value. - The clamped . - - - - Returns the value clamped to the inclusive range of min and max. - - The value to clamp. - The minimum inclusive value. - The maximum inclusive value. - The clamped . - - - - Returns the value clamped to the inclusive range of min and max. - - The value to clamp. - The minimum inclusive value. - The maximum inclusive value. - The clamped . - - - - Returns the value clamped to the inclusive range of min and max. - 5x Faster than - on platforms < NET 5. - - The value to clamp. - The minimum inclusive value. - The maximum inclusive value. - The clamped . - - - - Clamps the span values to the inclusive range of min and max. - - The span containing the values to clamp. - The minimum inclusive value. - The maximum inclusive value. - - - - Clamps the span values to the inclusive range of min and max. - - The span containing the values to clamp. - The minimum inclusive value. - The maximum inclusive value. - - - - Clamps the span values to the inclusive range of min and max. - - The span containing the values to clamp. - The minimum inclusive value. - The maximum inclusive value. - - - - Clamps the span values to the inclusive range of min and max. - - The span containing the values to clamp. - The minimum inclusive value. - The maximum inclusive value. - - - - Clamps the span values to the inclusive range of min and max. - - The span containing the values to clamp. - The minimum inclusive value. - The maximum inclusive value. - - - - Pre-multiplies the "x", "y", "z" components of a vector by its "w" component leaving the "w" component intact. - - The to premultiply - - - - Reverses the result of premultiplying a vector via . - - The to premultiply - - - - Bulk variant of - - The span of vectors - - - - Bulk variant of - - The span of vectors - - - - Calculates the cube pow of all the XYZ channels of the input vectors. - - The span of vectors - - - - Calculates the cube root of all the XYZ channels of the input vectors. - - The span of vectors - - - - Performs a linear interpolation between two values based on the given weighting. - - The first value. - The second value. - A value between 0 and 1 that indicates the weight of . - The . - - - - Defines the contract for methods that allow the shuffling of pixel components. - Used for shuffling on platforms that do not support Hardware Intrinsics. - - - - - Gets the shuffle control. - - - - - Shuffle 8-bit integers within 128-bit lanes in - using the control and store the results in . - - The source span of bytes. - The destination span of bytes. - - - - - - - - - - - - - - - - Various extension and utility methods for and utilizing SIMD capabilities - - - - - Implementation with 256bit / AVX2 intrinsics NOT depending on newer API-s (Vector.Widen etc.) - - - - - SIMD optimized implementation for . - Works only with span Length divisible by 8. - Implementation adapted from: - http://lolengine.net/blog/2011/3/20/understanding-fast-float-integer-conversions - http://stackoverflow.com/a/536278 - - - - - Implementation of which is faster on older runtimes. - - - - - Convert all values normalized into [0..1] from 'source' - into 'dest' buffer of . The values are scaled up into [0-255] and rounded. - This implementation is SIMD optimized and works only when span Length is divisible by 8. - Based on: - - http://lolengine.net/blog/2011/3/20/understanding-fast-float-integer-conversions - - - - - - Gets a value indicating whether code is being JIT-ed to AVX2 instructions - where both float and integer registers are of size 256 byte. - - - - - Gets a value indicating whether code is being JIT-ed to SSE instructions - where float and integer registers are of size 128 byte. - - - - - Transform all scalars in 'v' in a way that converting them to would have rounding semantics. - - The vector - - - - Rounds all values in 'v' to the nearest integer following semantics. - Source: - - https://github.com/g-truc/glm/blob/master/glm/simd/common.h#L110 - - - The vector - - - - Converts all input -s to -s normalized into [0..1]. - should be the of the same size as , - but there are no restrictions on the span's length. - - The source span of bytes - The destination span of floats - - - - Convert all values normalized into [0..1] from 'source' into 'dest' buffer of . - The values are scaled up into [0-255] and rounded, overflows are clamped. - should be the of the same size as , - but there are no restrictions on the span's length. - - The source span of floats - The destination span of bytes - - - - Implementation methods based on newer API-s (Vector.Widen, Vector.Narrow, Vector.ConvertTo*). - Only accelerated only on RyuJIT having dotnet/coreclr#10662 merged (.NET Core 2.1+ .NET 4.7.2+) - See: - https://github.com/dotnet/coreclr/pull/10662 - API Proposal: - https://github.com/dotnet/corefx/issues/15957 - - - - - Widen and convert a vector of values into 2 vectors of -s. - - - - - as many elements as possible, slicing them down (keeping the remainder). - - - - - as many elements as possible, slicing them down (keeping the remainder). - - - - - Implementation , which is faster on new RyuJIT runtime. - - - - - Implementation of , which is faster on new .NET runtime. - - - - - Fallback implementation based on (128bit). - For , efficient software fallback implementations are present, - and we hope that even mono's JIT is able to emit SIMD instructions for that type :P - - - - - as many elements as possible, slicing them down (keeping the remainder). - - - - - as many elements as possible, slicing them down (keeping the remainder). - - - - - Implementation of using . - - - - - Implementation of using . - - - - - Shuffle single-precision (32-bit) floating-point elements in - using the control and store the results in . - - The source span of floats. - The destination span of floats. - The byte control. - - - - Shuffle 8-bit integers within 128-bit lanes in - using the control and store the results in . - - The source span of bytes. - The destination span of bytes. - The type of shuffle to perform. - - - - Shuffle 8-bit integer triplets within 128-bit lanes in - using the control and store the results in . - - The source span of bytes. - The destination span of bytes. - The type of shuffle to perform. - - - - Pads then shuffles 8-bit integers within 128-bit lanes in - using the control and store the results in . - - The source span of bytes. - The destination span of bytes. - The type of shuffle to perform. - - - - Shuffles then slices 8-bit integers within 128-bit lanes in - using the control and store the results in . - - The source span of bytes. - The destination span of bytes. - The type of shuffle to perform. - - - - Internal utilities intended to be only used in tests. - - - - - This constant is useful to verify the target framework ImageSharp has been built against. - Only intended to be used in tests! - - - - - Contains methods for converting values between unit scales. - - - - - The number of centimeters in a meter. - 1 cm is equal to exactly 0.01 meters. - - - - - The number of centimeters in an inch. - 1 inch is equal to exactly 2.54 centimeters. - - - - - The number of inches in a meter. - 1 inch is equal to exactly 0.0254 meters. - - - - - Scales the value from centimeters to meters. - - The value to scale. - The . - - - - Scales the value from meters to centimeters. - - The value to scale. - The . - - - - Scales the value from meters to inches. - - The value to scale. - The . - - - - Scales the value from inches to meters. - - The value to scale. - The . - - - - Scales the value from centimeters to inches. - - The value to scale. - The . - - - - Scales the value from inches to centimeters. - - The value to scale. - The . - - - - Converts an to a . - - The EXIF profile containing the value. - The - - - - Implements basic math operations using tolerant comparison - whenever an equality check is needed. - - - - - A read-only default instance for using 1e-8 as epsilon. - It is a field so it can be passed as an 'in' parameter. - Does not necessarily fit all use cases! - - - - - == 0 - - - - - > 0 - - - - - < 0 - - - - - == - - - - - > - - - - - < - - - - - >= - - - - - <= - - - - - Contains 8 element value tuples of various types. - - - - - - - - Extension methods for the type. - - - - - Loads the fields in a target of from one of type. - - The target of instance. - The source of instance. - - - - Loads the fields in a target of from one of type. - - The target of instance. - The source of instance. - - - - Its faster to process multiple Vector4-s together, so let's pair them! - On AVX2 this pair should be convertible to of ! - TODO: Investigate defining this as union with an Octet.OfSingle type. - - - - . - Downscale method, specific to Jpeg color conversion. Works only if Vector{float}.Count == 4! /// TODO: Move it somewhere else. - - - - - AVX2-only Downscale method, specific to Jpeg color conversion. - TODO: Move it somewhere else. - - - - - Provides configuration which allows altering default behaviour or extending the library. - - - - - A lazily initialized configuration default instance. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - A collection of configuration modules to register - - - - Gets the default instance. - - - - - Gets or sets the maximum number of concurrent tasks enabled in ImageSharp algorithms - configured with this instance. - Initialized with by default. - - - - - Gets or sets the size of the buffer to use when working with streams. - Intitialized with by default. - - - - - Gets a set of properties for the Congiguration. - - This can be used for storing global settings and defaults to be accessable to processors. - - - - Gets the currently registered s. - - - - - Gets or sets the position in a stream to use for reading when using a seekable stream as an image data source. - - - - - Gets or sets the that is currently in use. - - - - - Gets or sets the that is currently in use. - - - - - Gets the maximum header size of all the formats. - - - - - Gets or sets the filesystem helper for accessing the local file system. - - - - - Gets or sets the working buffer size hint for image processors. - The default value is 1MB. - - - Currently only used by Resize. If the working buffer is expected to be discontiguous, - min(WorkingBufferSizeHintInBytes, BufferCapacityInBytes) should be used. - - - - - Gets or sets the image operations provider factory. - - - - - Registers a new format provider. - - The configuration provider to call configure on. - - - - Creates a shallow copy of the . - - A new configuration instance. - - - - Creates the default instance with the following s preregistered: - - - - . - . - - The default configuration of . - - - - Gets the Bitmap identifier. - The field used to identify the bitmap file: 0x42 0x41 (Hex code points for B and A). - - - - - Gets the size of this header. - - - - - Gets the offset to next OS2BMPARRAYFILEHEADER. - This offset is calculated from the starting byte of the file. A value of zero indicates that this header is for the last image in the array list. - - - - - Gets the width of the image display in pixels. - - - - - Gets the height of the image display in pixels. - - - - - Enumerates the available bits per pixel the bitmap encoder supports. - - - - - 8 bits per pixel. Each pixel consists of 1 byte. - - - - - 16 bits per pixel. Each pixel consists of 2 bytes. - - - - - 24 bits per pixel. Each pixel consists of 3 bytes. - - - - - 32 bits per pixel. Each pixel consists of 4 bytes. - - - - - Defines the compression type of the image data - in the bitmap file. - - - - - Each image row has a multiple of four elements. If the - row has less elements, zeros will be added at the right side. - The format depends on the number of bits, stored in the info header. - If the number of bits are one, four or eight each pixel data is - a index to the palette. If the number of bits are sixteen, - twenty-four or thirty-two each pixel contains a color. - - - - - Two bytes are one data record. If the first byte is not zero, the - next byte will be repeated as much as the value of the first byte. - If the first byte is zero, the record has different meanings, depending - on the second byte. If the second byte is zero, it is the end of the row, - if it is one, it is the end of the image. - - - - - Two bytes are one data record. If the first byte is not zero, the - next two half bytes will be repeated as much as the value of the first byte. - If the first byte is zero, the record has different meanings, depending - on the second byte. If the second byte is zero, it is the end of the row, - if it is one, it is the end of the image. - - - - - Each image row has a multiple of four elements. If the - row has less elements, zeros will be added at the right side. - - - - - The bitmap contains a JPG image. - Not supported at the moment. - - - - - The bitmap contains a PNG image. - Not supported at the moment. - - - - - Introduced with Windows CE. - Specifies that the bitmap is not compressed and that the color table consists of four DWORD color - masks that specify the red, green, blue, and alpha components of each pixel. - - - - - OS/2 specific compression type. - Similar to run length encoding of 4 and 8 bit. - The only difference is that run values encoded are three bytes in size (one byte per RGB color component), - rather than four or eight bits in size. - - Note: Because compression value of 4 is ambiguous for BI_RGB for windows and RLE24 for OS/2, the enum value is remapped - to a different value, to be clearly separate from valid windows values. - - - - - Registers the image encoders, decoders and mime type detectors for the bmp format. - - - - - - - - Defines constants relating to BMPs - - - - - The list of mimetypes that equate to a bmp. - - - - - The list of file extensions that equate to a bmp. - - - - - Valid magic bytes markers identifying a Bitmap file. - - - - - Single-image BMP file that may have been created under Windows or OS/2. - - - - - OS/2 Bitmap Array. - - - - - OS/2 Color Icon. - - - - - OS/2 Color Pointer. - - - - - OS/2 Icon. - - - - - OS/2 Pointer. - - - - - Image decoder for generating an image out of a Windows bitmap stream. - - - Does not support the following formats at the moment: - - JPG - PNG - Some OS/2 specific subtypes like: Bitmap Array, Color Icon, Color Pointer, Icon, Pointer. - - Formats will be supported in a later releases. We advise always - to use only 24 Bit Windows bitmaps. - - - - - Gets or sets a value indicating how to deal with skipped pixels, which can occur during decoding run length encoded bitmaps. - - - - - - - - - - - - - - - - - - - - - - - Performs the bitmap decoding operation. - - - A useful decoding source example can be found at - - - - - The default mask for the red part of the color for 16 bit rgb bitmaps. - - - - - The default mask for the green part of the color for 16 bit rgb bitmaps. - - - - - The default mask for the blue part of the color for 16 bit rgb bitmaps. - - - - - RLE flag value that indicates following byte has special meaning. - - - - - RLE flag value marking end of a scan line. - - - - - RLE flag value marking end of bitmap data. - - - - - RLE flag value marking the start of [x,y] offset instruction. - - - - - The stream to decode from. - - - - - The metadata. - - - - - The bitmap specific metadata. - - - - - The file header containing general information. - - - - - Indicates which bitmap file marker was read. - - - - - The info header containing detailed information about the bitmap. - - - - - Used for allocating memory during processing operations. - - - - - The bitmap decoder options. - - - - - Initializes a new instance of the class. - - The configuration. - The options. - - - - - - - Gets the dimensions of the image. - - - - - - - - - - - Returns the y- value based on the given height. - - The y- value representing the current row. - The height of the bitmap. - Whether the bitmap is inverted. - The representing the inverted value. - - - - Calculates the amount of bytes to pad a row. - - The image width. - The pixel component count. - - The padding. - - - - - Decodes a bitmap containing the BITFIELDS Compression type. For each color channel, there will be a bitmask - which will be used to determine which bits belong to that channel. - - The pixel format. - The output pixel buffer containing the decoded image. - Whether the bitmap is inverted. - - - - Looks up color values and builds the image from de-compressed RLE8 or RLE4 data. - Compressed RLE8 stream is uncompressed by - Compressed RLE4 stream is uncompressed by - - The pixel format. - The compression type. Either RLE4 or RLE8. - The to assign the palette to. - The containing the colors. - The width of the bitmap. - The height of the bitmap. - Whether the bitmap is inverted. - - - - Looks up color values and builds the image from de-compressed RLE24. - - The pixel format. - The to assign the palette to. - The width of the bitmap. - The height of the bitmap. - Whether the bitmap is inverted. - - - - Produce uncompressed bitmap data from a RLE4 stream. - - - RLE4 is a 2-byte run-length encoding. -
If first byte is 0, the second byte may have special meaning. -
Otherwise, the first byte is the length of the run and second byte contains two color indexes. -
- The width of the bitmap. - Buffer for uncompressed data. - Keeps track over skipped and therefore undefined pixels. - Keeps track of rows, which have undefined pixels. -
- - - Produce uncompressed bitmap data from a RLE8 stream. - - - RLE8 is a 2-byte run-length encoding. -
If first byte is 0, the second byte may have special meaning. -
Otherwise, the first byte is the length of the run and second byte is the color for the run. -
- The width of the bitmap. - Buffer for uncompressed data. - Keeps track of skipped and therefore undefined pixels. - Keeps track of rows, which have undefined pixels. -
- - - Produce uncompressed bitmap data from a RLE24 stream. - - -
If first byte is 0, the second byte may have special meaning. -
Otherwise, the first byte is the length of the run and following three bytes are the color for the run. -
- The width of the bitmap. - Buffer for uncompressed data. - Keeps track of skipped and therefore undefined pixels. - Keeps track of rows, which have undefined pixels. -
- - - Keeps track of skipped / undefined pixels, when the EndOfBitmap command occurs. - - The already processed pixel count. - The width of the image. - The skipped pixel count. - The undefined pixels. - Rows with undefined pixels. - - - - Keeps track of undefined / skipped pixels, when the EndOfLine command occurs. - - The already uncompressed pixel count. - The width of image. - The undefined pixels. - The rows with undefined pixels. - The number of skipped pixels. - - - - Keeps track of undefined / skipped pixels, when the delta command occurs. - - The count. - The width of the image. - Delta skip in x direction. - Delta skip in y direction. - The undefined pixels. - The rows with undefined pixels. - The number of skipped pixels. - - - - Reads the color palette from the stream. - - The pixel format. - The to assign the palette to. - The containing the colors. - The width of the bitmap. - The height of the bitmap. - The number of bits per pixel. - Usually 4 bytes, but in case of Windows 2.x bitmaps or OS/2 1.x bitmaps - the bytes per color palette entry's can be 3 bytes instead of 4. - Whether the bitmap is inverted. - - - - Reads the 16 bit color palette from the stream. - - The pixel format. - The to assign the palette to. - The width of the bitmap. - The height of the bitmap. - Whether the bitmap is inverted. - The bitmask for the red channel. - The bitmask for the green channel. - The bitmask for the blue channel. - - - - Performs final shifting from a 5bit value to an 8bit one. - - The masked and shifted value. - The - - - - Performs final shifting from a 6bit value to an 8bit one. - - The masked and shifted value. - The - - - - Reads the 24 bit color palette from the stream. - - The pixel format. - The to assign the palette to. - The width of the bitmap. - The height of the bitmap. - Whether the bitmap is inverted. - - - - Reads the 32 bit color palette from the stream. - - The pixel format. - The to assign the palette to. - The width of the bitmap. - The height of the bitmap. - Whether the bitmap is inverted. - - - - Reads the 32 bit color palette from the stream, checking the alpha component of each pixel. - This is a special case only used for 32bpp WinBMPv3 files, which could be in either BGR0 or BGRA format. - - The pixel format. - The to assign the palette to. - The width of the bitmap. - The height of the bitmap. - Whether the bitmap is inverted. - - - - Decode an 32 Bit Bitmap containing a bitmask for each color channel. - - The pixel format. - The output pixel buffer containing the decoded image. - The width of the image. - The height of the image. - Whether the bitmap is inverted. - The bitmask for the red channel. - The bitmask for the green channel. - The bitmask for the blue channel. - The bitmask for the alpha channel. - - - - Calculates the necessary right shifts for a given color bitmask (the 0 bits to the right). - - The color bit mask. - Number of bits to shift right. - - - - Counts none zero bits. - - A color mask. - The none zero bits. - - - - Reads the from the stream. - - - - - Reads the from the stream. - - - - - Reads the and from the stream and sets the corresponding fields. - - Bytes per color palette entry. Usually 4 bytes, but in case of Windows 2.x bitmaps or OS/2 1.x bitmaps - the bytes per color palette entry's can be 3 bytes instead of 4. - - - - Image encoder for writing an image to a stream as a Windows bitmap. - - - - - Gets or sets the number of bits per pixel. - - - - - Gets or sets a value indicating whether the encoder should support transparency. - Note: Transparency support only works together with 32 bits per pixel. This option will - change the default behavior of the encoder of writing a bitmap version 3 info header with no compression. - Instead a bitmap version 4 info header will be written with the BITFIELDS compression. - - - - - Gets or sets the quantizer for reducing the color count for 8-Bit images. - Defaults to OctreeQuantizer. - - - - - - - - - - - Image encoder for writing an image to a stream as a Windows bitmap. - - - - - The amount to pad each row by. - - - - - The mask for the alpha channel of the color for 32 bit rgba bitmaps. - - - - - The mask for the red part of the color for 32 bit rgba bitmaps. - - - - - The mask for the green part of the color for 32 bit rgba bitmaps. - - - - - The mask for the blue part of the color for 32 bit rgba bitmaps. - - - - - The color palette for an 8 bit image will have 256 entry's with 4 bytes for each entry. - - - - - Used for allocating memory during processing operations. - - - - - The global configuration. - - - - - The color depth, in number of bits per pixel. - - - - - A bitmap v4 header will only be written, if the user explicitly wants support for transparency. - In this case the compression type BITFIELDS will be used. - Otherwise a bitmap v3 header will be written, which is supported by almost all decoders. - - - - - The quantizer for reducing the color count for 8-Bit images. - - - - - Initializes a new instance of the class. - - The encoder options. - The memory manager. - - - - Encodes the image to the specified stream from the . - - The pixel format. - The to encode from. - The to encode the image data to. - The token to request cancellation. - - - - Writes the pixel data to the binary stream. - - The pixel format. - The to write to. - - The containing pixel data. - - - - - Writes the 32bit color palette to the stream. - - The pixel format. - The to write to. - The containing pixel data. - - - - Writes the 24bit color palette to the stream. - - The pixel format. - The to write to. - The containing pixel data. - - - - Writes the 16bit color palette to the stream. - - The type of the pixel. - The to write to. - The containing pixel data. - - - - Writes an 8 Bit image with a color palette. The color palette has 256 entry's with 4 bytes for each entry. - - The type of the pixel. - The to write to. - The containing pixel data. - - - - Writes an 8 Bit color image with a color palette. The color palette has 256 entry's with 4 bytes for each entry. - - The type of the pixel. - The to write to. - The containing pixel data. - A byte span of size 1024 for the color palette. - - - - Writes an 8 Bit gray image with a color palette. The color palette has 256 entry's with 4 bytes for each entry. - - The type of the pixel. - The to write to. - The containing pixel data. - A byte span of size 1024 for the color palette. - - - - Stores general information about the Bitmap file. - - - - The first two bytes of the Bitmap file format - (thus the Bitmap header) are stored in big-endian order. - All of the other integer values are stored in little-endian format - (i.e. least-significant byte first). - - - - - Defines the size of the data structure in the bitmap file. - - - - - Gets the Bitmap identifier. - The field used to identify the bitmap file: 0x42 0x4D - (Hex code points for B and M) - - - - - Gets the size of the bitmap file in bytes. - - - - - Gets any reserved data; actual value depends on the application - that creates the image. - - - - - Gets the offset, i.e. starting address, of the byte where - the bitmap data can be found. - - - - - Indicates which bitmap file marker was read. - - - - - Single-image BMP file that may have been created under Windows or OS/2. - - - - - OS/2 Bitmap Array. - - - - - OS/2 Color Icon. - - - - - OS/2 Color Pointer. - - - - - OS/2 Icon. - - - - - OS/2 Pointer. - - - - - Registers the image encoders, decoders and mime type detectors for the bmp format. - - - - - Gets the current instance. - - - - - - - - - - - - - - - - - - - - Detects bmp file headers. - - - - - - - - - - - This block of bytes tells the application detailed information - about the image, which will be used to display the image on - the screen. - - - - - - Defines the size of the BITMAPCOREHEADER data structure in the bitmap file. - - - - - Defines the size of the short variant of the OS22XBITMAPHEADER data structure in the bitmap file. - - - - - Defines the size of the BITMAPINFOHEADER (BMP Version 3) data structure in the bitmap file. - - - - - Special case of the BITMAPINFOHEADER V3 used by adobe where the color bitmasks are part of the info header instead of following it. - - - - - Special case of the BITMAPINFOHEADER V3 used by adobe where the color bitmasks (including the alpha channel) are part of the info header instead of following it. - - - - - Size of a IBM OS/2 2.x bitmap header. - - - - - Defines the size of the BITMAPINFOHEADER (BMP Version 4) data structure in the bitmap file. - - - - - Defines the size of the BITMAPINFOHEADER (BMP Version 5) data structure in the bitmap file. - - - - - Defines the size of the biggest supported header data structure in the bitmap file. - - - - - Defines the size of the field. - - - - - Gets or sets the size of this header. - - - - - Gets or sets the bitmap width in pixels (signed integer). - - - - - Gets or sets the bitmap height in pixels (signed integer). - - - - - Gets or sets the number of color planes being used. Must be set to 1. - - - - - Gets or sets the number of bits per pixel, which is the color depth of the image. - Typical values are 1, 4, 8, 16, 24 and 32. - - - - - Gets or sets the compression method being used. - See the next table for a list of possible values. - - - - - Gets or sets the image size. This is the size of the raw bitmap data (see below), - and should not be confused with the file size. - - - - - Gets or sets the horizontal resolution of the image. - (pixel per meter, signed integer) - - - - - Gets or sets the vertical resolution of the image. - (pixel per meter, signed integer) - - - - - Gets or sets the number of colors in the color palette, - or 0 to default to 2^n. - - - - - Gets or sets the number of important colors used, - or 0 when every color is important{ get; set; } generally ignored. - - - - - Gets or sets red color mask. This is used with the BITFIELDS decoding. - - - - - Gets or sets green color mask. This is used with the BITFIELDS decoding. - - - - - Gets or sets blue color mask. This is used with the BITFIELDS decoding. - - - - - Gets or sets alpha color mask. This is not used yet. - - - - - Gets or sets the Color space type. Not used yet. - - - - - Gets or sets the X coordinate of red endpoint. Not used yet. - - - - - Gets or sets the Y coordinate of red endpoint. Not used yet. - - - - - Gets or sets the Z coordinate of red endpoint. Not used yet. - - - - - Gets or sets the X coordinate of green endpoint. Not used yet. - - - - - Gets or sets the Y coordinate of green endpoint. Not used yet. - - - - - Gets or sets the Z coordinate of green endpoint. Not used yet. - - - - - Gets or sets the X coordinate of blue endpoint. Not used yet. - - - - - Gets or sets the Y coordinate of blue endpoint. Not used yet. - - - - - Gets or sets the Z coordinate of blue endpoint. Not used yet. - - - - - Gets or sets the Gamma red coordinate scale value. Not used yet. - - - - - Gets or sets the Gamma green coordinate scale value. Not used yet. - - - - - Gets or sets the Gamma blue coordinate scale value. Not used yet. - - - - - Parses the BITMAPCOREHEADER (BMP Version 2) consisting of the headerSize, width, height, planes, and bitsPerPixel fields (12 bytes). - - The data to parse. - The parsed header. - - - - - Parses a short variant of the OS22XBITMAPHEADER. It is identical to the BITMAPCOREHEADER, except that the width and height - are 4 bytes instead of 2, resulting in 16 bytes total. - - The data to parse. - The parsed header. - - - - - Parses the full BMP Version 3 BITMAPINFOHEADER header (40 bytes). - - The data to parse. - The parsed header. - - - - - Special case of the BITMAPINFOHEADER V3 used by adobe where the color bitmasks are part of the info header instead of following it. - 52 bytes without the alpha mask, 56 bytes with the alpha mask. - - The data to parse. - Indicates, if the alpha bitmask is present. - The parsed header. - - - - - Parses a OS/2 version 2 bitmap header (64 bytes). Only the first 40 bytes are parsed which are - very similar to the Bitmap v3 header. The other 24 bytes are ignored, but they do not hold any - useful information for decoding the image. - - The data to parse. - The parsed header. - - - - - Parses the full BMP Version 4 BITMAPINFOHEADER header (108 bytes). - - The data to parse. - The parsed header. - - - - - Writes a bitmap version 3 (Microsoft Windows NT) header to a buffer (40 bytes). - - The buffer to write to. - - - - Writes a complete Bitmap V4 header to a buffer. - - The buffer to write to. - - - - Enum value for the different bitmap info header types. The enum value is the number of bytes for the specific bitmap header. - - - - - Bitmap Core or BMP Version 2 header (Microsoft Windows 2.x). - - - - - Short variant of the OS/2 Version 2 bitmap header. - - - - - BMP Version 3 header (Microsoft Windows 3.x or Microsoft Windows NT). - - - - - Adobe variant of the BMP Version 3 header. - - - - - Adobe variant of the BMP Version 3 header with an alpha mask. - - - - - BMP Version 2.x header (IBM OS/2 2.x). - - - - - BMP Version 4 header (Microsoft Windows 95). - - - - - BMP Version 5 header (Windows NT 5.0, 98 or later). - - - - - Provides Bmp specific metadata information for the image. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The metadata to create an instance from. - - - - Gets or sets the bitmap info header type. - - - - - Gets or sets the number of bits per pixel. - - - - - - - - Cold path optimization for throwing 's - - The error message for the exception. - - - - Cold path optimization for throwing 's - - The error message for the exception. - - - - Image decoder options for decoding Windows bitmap streams. - - - - - Gets the value indicating how to deal with skipped pixels, which can occur during decoding run length encoded bitmaps. - - - - - Configuration options for use during bmp encoding. - - - - - Gets the number of bits per pixel. - - - - - Gets a value indicating whether the encoder should support transparency. - Note: Transparency support only works together with 32 bits per pixel. This option will - change the default behavior of the encoder of writing a bitmap version 3 info header with no compression. - Instead a bitmap version 4 info header will be written with the BITFIELDS compression. - - - - - Gets the quantizer for reducing the color count for 8-Bit images. - - - - - Defines possible options, how skipped pixels during decoding of run length encoded bitmaps should be treated. - - - - - Undefined pixels should be black. This is the default behavior and equal to how System.Drawing handles undefined pixels. - - - - - Undefined pixels should be transparent. - - - - - Undefined pixels should have the first color of the palette. - - - - - Provides enumeration for the available color table modes. - - - - - A single color table is calculated from the first frame and reused for subsequent frames. - - - - - A unique color table is calculated for each frame. - - - - - Registers the image encoders, decoders and mime type detectors for the gif format. - - - - - - - - Constants that define specific points within a Gif. - - - - - The file type. - - - - - The file version. - - - - - The extension block introducer !. - - - - - The graphic control label. - - - - - The application extension label. - - - - - The application block size. - - - - - The application identification. - - - - - The Netscape looping application sub block size. - - - - - The comment label. - - - - - The maximum length of a comment data sub-block is 255. - - - - - The image descriptor label ,. - - - - - The plain text label. - - - - - The image label introducer ,. - - - - - The terminator. - - - - - The end introducer trailer ;. - - - - - The character encoding to use when reading and writing comments - (ASCII 7bit). - - - - - The collection of mimetypes that equate to a Gif. - - - - - The collection of file extensions that equate to a Gif. - - - - - Gets the ASCII encoded bytes used to identify the GIF file (combining and ). - - - - - Gets the ASCII encoded application identification bytes (representing ). - - - - - Decoder for generating an image out of a gif encoded stream. - - - - - Gets or sets a value indicating whether the metadata should be ignored when the image is being decoded. - - - - - Gets or sets the decoding mode for multi-frame images - - - - - - - - - - - - - - - - - - - - - - - Performs the gif decoding operation. - - - - - The temp buffer used to reduce allocations. - - - - - The currently loaded stream. - - - - - The global color table. - - - - - The area to restore. - - - - - The logical screen descriptor. - - - - - The graphics control extension. - - - - - The image descriptor. - - - - - The abstract metadata. - - - - - The gif specific metadata. - - - - - Initializes a new instance of the class. - - The configuration. - The decoder options. - - - - - - - Gets or sets a value indicating whether the metadata should be ignored when the image is being decoded. - - - - - Gets the decoding mode for multi-frame images. - - - - - Gets the dimensions of the image. - - - - - - - - - - - Reads the graphic control extension. - - - - - Reads the image descriptor. - - - - - Reads the logical screen descriptor. - - - - - Reads the application extension block parsing any animation information - if present. - - - - - Skips over a block or reads its terminator. - The length of the block to skip. - - - - - Reads the gif comments. - - - - - Reads an individual gif frame. - - The pixel format. - The image to decode the information to. - The previous frame. - - - - Reads the frame indices marking the color to use for each pixel. - - The 2D pixel buffer to write to. - - - - Reads the frames colors, mapping indices to colors. - - The pixel format. - The image to decode the information to. - The previous frame. - The indexed pixels. - The color table containing the available colors. - The - - - - Restores the current frame area to the background. - - The pixel format. - The frame. - - - - Sets the frames metadata. - - The metadata. - - - - Reads the logical screen descriptor and global color table blocks - - The stream containing image data. - - - - Provides enumeration for instructing the decoder what to do with the last image - in an animation sequence. - section 23 - - - - - No disposal specified. - The decoder is not required to take any action. - - - - - Do not dispose. - The graphic is to be left in place. - - - - - Restore to background color. - The area used by the graphic must be restored to the background color. - - - - - Restore to previous. - The decoder is required to restore the area overwritten by the - graphic with what was there prior to rendering the graphic. - - - - - Image encoder for writing image data to a stream in gif format. - - - - - Gets or sets the quantizer for reducing the color count. - Defaults to the - - - - - Gets or sets the color table mode: Global or local. - - - - - Gets or sets the used for quantization - when building a global color table in case of . - - - - - - - - - - - Implements the GIF encoding protocol. - - - - - Used for allocating memory during processing operations. - - - - - Configuration bound to the encoding operation. - - - - - A reusable buffer used to reduce allocations. - - - - - The quantizer used to generate the color palette. - - - - - The color table mode: Global or local. - - - - - The number of bits requires to store the color palette. - - - - - The pixel sampling strategy for global quantization. - - - - - Initializes a new instance of the class. - - The configuration which allows altering default behaviour or extending the library. - The options for the encoder. - - - - Encodes the image to the specified stream from the . - - The pixel format. - The to encode from. - The to encode the image data to. - The token to request cancellation. - - - - Returns the index of the most transparent color in the palette. - - The quantized frame. - The pixel format. - - The . - - - - - Writes the file header signature and version to the stream. - - The stream to write to. - - - - Writes the logical screen descriptor to the stream. - - The image metadata. - The image width. - The image height. - The transparency index to set the default background index to. - Whether to use a global or local color table. - The stream to write to. - - - - Writes the application extension to the stream. - - The stream to write to. - The animated image repeat count. - - - - Writes the image comments to the stream. - - The metadata to be extract the comment data. - The stream to write to. - - - - Writes a comment sub-block to the stream. - - The stream to write to. - Comment as a Span. - Current start index. - The length of the string to write. Should not exceed 255 bytes. - - - - Writes the graphics control extension to the stream. - - The metadata of the image or frame. - The index of the color in the color palette to make transparent. - The stream to write to. - - - - Writes the provided extension to the stream. - - The extension to write to the stream. - The stream to write to. - - - - Writes the image descriptor to the stream. - - The pixel format. - The to be encoded. - Whether to use the global color table. - The stream to write to. - - - - Writes the color table to the stream. - - The pixel format. - The to encode. - The stream to write to. - - - - Writes the image pixel data to the stream. - - The pixel format. - The containing indexed pixels. - The stream to write to. - - - - Registers the image encoders, decoders and mime type detectors for the gif format. - - - - - Gets the current instance. - - - - - - - - - - - - - - - - - - - - - - - Provides Gif specific metadata information for the image frame. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The metadata to create an instance from. - - - - Gets or sets the length of the color table for paletted images. - If not 0, then this field indicates the maximum number of colors to use when quantizing the - image frame. - - - - - Gets or sets the frame delay for animated images. - If not 0, when utilized in Gif animation, this field specifies the number of hundredths (1/100) of a second to - wait before continuing with the processing of the Data Stream. - The clock starts ticking immediately after the graphic is rendered. - - - - - Gets or sets the disposal method for animated images. - Primarily used in Gif animation, this field indicates the way in which the graphic is to - be treated after being displayed. - - - - - - - - Detects gif file headers - - - - - - - - - - - Provides Gif specific metadata information for the image. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The metadata to create an instance from. - - - - Gets or sets the number of times any animation is repeated. - - 0 means to repeat indefinitely, count is set as repeat n-1 times. Defaults to 1. - - - - - - Gets or sets the color table mode. - - - - - Gets or sets the length of the global color table if present. - - - - - Gets or sets the the collection of comments about the graphics, credits, descriptions or any - other type of non-control and non-graphic data. - - - - - - - - Cold path optimization for throwing 's - - The error message for the exception. - - - - Cold path optimization for throwing 's. - - The error message for the exception. - The exception that is the cause of the current exception, or a null reference - if no inner exception is specified. - - - - Decoder for generating an image out of a gif encoded stream. - - - - - Gets a value indicating whether the metadata should be ignored when the image is being decoded. - - - - - Gets the decoding mode for multi-frame images. - - - - - The configuration options used for encoding gifs. - - - - - Gets the quantizer used to generate the color palette. - - - - - Gets the color table mode: Global or local. - - - - - Gets the used for quantization when building a global color table. - - - - - Decompresses and decodes data using the dynamic LZW algorithms. - - - - - The max decoder pixel stack size. - - - - - The null code. - - - - - The stream to decode. - - - - - The prefix buffer. - - - - - The suffix buffer. - - - - - The pixel stack buffer. - - - - - Initializes a new instance of the class - and sets the stream, where the compressed data should be read from. - - The to use for buffer allocations. - The stream to read from. - is null. - - - - Decodes and decompresses all pixel indices from the stream. - - Size of the data. - The pixel array to decode to. - - - - Reads the next data block from the stream. A data block begins with a byte, - which defines the size of the block, followed by the block itself. - - The buffer to store the block in. - - The . - - - - - - - - Encodes and compresses the image data using dynamic Lempel-Ziv compression. - - - Adapted from Jef Poskanzer's Java port by way of J. M. G. Elliott. K Weiner 12/00 - - GIFCOMPR.C - GIF Image compression routines - - - Lempel-Ziv compression based on 'compress'. GIF modifications by - David Rowley (mgardi@watdcsu.waterloo.edu) - - GIF Image compression - modified 'compress' - - Based on: compress.c - File compression ala IEEE Computer, June 1984. - By Authors: Spencer W. Thomas (decvax!harpo!utah-cs!utah-gr!thomas) - Jim McKie (decvax!mcvax!jim) - Steve Davies (decvax!vax135!petsd!peora!srd) - Ken Turkowski (decvax!decwrl!turtlevax!ken) - James A. Woods (decvax!ihnp4!ames!jaw) - Joe Orost (decvax!vax135!petsd!joe) - - - - - - 80% occupancy - - - - - The amount to shift each code. - - - - - Mask used when shifting pixel values - - - - - The maximum number of bits/code. - - - - - Should NEVER generate this code. - - - - - The initial code size. - - - - - The hash table. - - - - - The code table. - - - - - Define the storage for the packet accumulator. - - - - - Number of bits/code - - - - - maximum code, given bitCount - - - - - First unused entry - - - - - Block compression parameters -- after all codes are used up, - and compression rate changes, start over. - - - - - Algorithm: use open addressing double hashing (no chaining) on the - prefix code / next character combination. We do a variant of Knuth's - algorithm D (vol. 3, sec. 6.4) along with G. Knott's relatively-prime - secondary probe. Here, the modular division first probe is gives way - to a faster exclusive-or manipulation. Also do block compression with - an adaptive reset, whereby the code table is cleared when the compression - ratio decreases, but after the table fills. The variable-length output - codes are re-sized at this point, and a special CLEAR code is generated - for the decompressor. Late addition: construct the table according to - file size for noticeable speed improvement on small files. Please direct - questions about this implementation to ames!jaw. - - - - - The clear code. - - - - - The end-of-file code. - - - - - Output the given code. - Inputs: - code: A bitCount-bit integer. If == -1, then EOF. This assumes - that bitCount =< wordsize - 1. - Outputs: - Outputs code to the file. - Assumptions: - Chars are 8 bits long. - Algorithm: - Maintain a BITS character long buffer (so that 8 codes will - fit in it exactly). Use the VAX insv instruction to insert each - code in turn. When the buffer fills up empty it and start over. - - - - - The current bits. - - - - - Number of characters so far in this 'packet' - - - - - Initializes a new instance of the class. - - The to use for buffer allocations. - The color depth in bits. - - - - Encodes and compresses the indexed pixels to the stream. - - The 2D buffer of indexed pixels. - The stream to write to. - - - - Gets the maximum code value. - - The number of bits - See - - - - Add a character to the end of the current packet, and if it is 254 characters, - flush the packet to disk. - - The character to add. - The reference to the storage for packet accumulators - The stream to write to. - - - - Table clear for block compress. - - The output stream. - - - - Reset the code table. - - - - - Compress the packets to the stream. - - The 2D buffer of indexed pixels. - The initial bits. - The stream to write to. - - - - Flush the packet to disk and reset the accumulator. - - The output stream. - - - - Output the current code to the stream. - - The code. - The stream to write to. - - - - - - - The Graphic Control Extension contains parameters used when - processing a graphic rendering block. - - - - - Gets the size of the block. - - - - - Gets the packed disposalMethod and transparencyFlag value. - - - - - Gets the delay time in of hundredths (1/100) of a second - to wait before continuing with the processing of the Data Stream. - The clock starts ticking immediately after the graphic is rendered. - - - - - Gets the transparency index. - The Transparency Index is such that when encountered, the corresponding pixel - of the display device is not modified and processing goes on to the next pixel. - - - - - Gets the disposal method which indicates the way in which the - graphic is to be treated after being displayed. - - - - - Gets a value indicating whether transparency flag is to be set. - This indicates whether a transparency index is given in the Transparent Index field. - - - - - Each image in the Data Stream is composed of an Image Descriptor, - an optional Local Color Table, and the image data. - Each image must fit within the boundaries of the - Logical Screen, as defined in the Logical Screen Descriptor. - - - - - Gets the column number, in pixels, of the left edge of the image, - with respect to the left edge of the Logical Screen. - Leftmost column of the Logical Screen is 0. - - - - - Gets the row number, in pixels, of the top edge of the image with - respect to the top edge of the Logical Screen. - Top row of the Logical Screen is 0. - - - - - Gets the width of the image in pixels. - - - - - Gets the height of the image in pixels. - - - - - Gets the packed value of localColorTableFlag, interlaceFlag, sortFlag, and localColorTableSize. - - - - - The Logical Screen Descriptor contains the parameters - necessary to define the area of the display device - within which the images will be rendered - - - - - Gets the width, in pixels, of the Logical Screen where the images will - be rendered in the displaying device. - - - - - Gets the height, in pixels, of the Logical Screen where the images will be - rendered in the displaying device. - - - - - Gets the packed value consisting of: - globalColorTableFlag, colorResolution, sortFlag, and sizeOfGlobalColorTable. - - - - - Gets the index at the Global Color Table for the Background Color. - The Background Color is the color used for those - pixels on the screen that are not covered by an image. - - - - - Gets the pixel aspect ratio. - - - - - Gets a value indicating whether a flag denoting the presence of a Global Color Table - should be set. - If the flag is set, the Global Color Table will included after - the Logical Screen Descriptor. - - - - - Gets the global color table size. - If the Global Color Table Flag is set, - the value in this field is used to calculate the number of - bytes contained in the Global Color Table. - - - - - Gets the color depth, in number of bits per pixel. - The lowest 3 packed bits represent the bit depth minus 1. - - - - - Gets the repeat count. - 0 means loop indefinitely. Count is set as play n + 1 times. - - - - - A base interface for GIF extensions. - - - - - Gets the label identifying the extensions. - - - - - Writes the extension data to the buffer. - - The buffer to write the extension to. - The number of bytes written to the buffer. - - - - Encapsulates properties and methods required for decoding an image from a stream. - - - - - Decodes the image from the specified stream to an of a specific pixel type. - - The pixel format. - The configuration for the image. - The containing image data. - The . - - - - Decodes the image from the specified stream to an . - - The configuration for the image. - The containing image data. - The . - - - - Decodes the image from the specified stream to an of a specific pixel type. - - The pixel format. - The configuration for the image. - The containing image data. - The token to monitor for cancellation requests. - The . - - - - Decodes the image from the specified stream to an . - - The configuration for the image. - The containing image data. - The token to monitor for cancellation requests. - The . - - - - Abstraction for shared internals for ***DecoderCore implementations to be used with . - - - - - Gets the associated configuration. - - - - - Gets the dimensions of the image being decoded. - - - - - Decodes the image from the specified stream. - - The pixel format. - The stream, where the image should be decoded from. Cannot be null. - The token to monitor for cancellation requests. - is null. - The decoded image. - - Cancellable synchronous method. In case of cancellation, - an shall be thrown which will be handled on the call site. - - - - - Reads the raw image information from the specified stream. - - The containing image data. - The token to monitor for cancellation requests. - The . - - Cancellable synchronous method. In case of cancellation, - an shall be thrown which will be handled on the call site. - - - - - Encapsulates properties and methods required for encoding an image to a stream. - - - - - Encodes the image to the specified stream from the . - - The pixel format. - The to encode from. - The to encode the image data to. - - - - Encodes the image to the specified stream from the . - - The pixel format. - The to encode from. - The to encode the image data to. - The token to monitor for cancellation requests. - A representing the asynchronous operation. - - - - Abstraction for shared internals for ***DecoderCore implementations to be used with . - - - - - Encodes the image. - - The image. - The stream. - The token to monitor for cancellation requests. - The pixel type. - - - - Defines the contract for an image format. - - - - - Gets the name that describes this image format. - - - - - Gets the default mimetype that the image format uses - - - - - Gets all the mimetypes that have been used by this image format. - - - - - Gets the file extensions this image format commonly uses. - - - - - Defines the contract for an image format containing metadata. - - The type of format metadata. - - - - Creates a default instance of the format metadata. - - The . - - - - Defines the contract for an image format containing metadata with multiple frames. - - The type of format metadata. - The type of format frame metadata. - - - - Creates a default instance of the format frame metadata. - - The . - - - - Used for detecting mime types from a file header - - - - - Gets the size of the header for this image type. - - The size of the header. - - - - Detect mimetype - - The containing the file header. - returns the mime type of detected otherwise returns null - - - - Encapsulates methods used for detecting the raw image information without fully decoding it. - - - - - Reads the raw image information from the specified stream. - - The configuration for the image. - The containing image data. - The object - - - - Reads the raw image information from the specified stream. - - The configuration for the image. - The containing image data. - The token to monitor for cancellation requests. - The object - - - - Reads the raw image information from the specified stream. - - The decoder. - /// The configuration for the image. - The containing image data. - The token to monitor for cancellation requests. - is null. - A representing the asynchronous operation. - - - - Reads the raw image information from the specified stream. - - The decoder. - The configuration for the image. - The containing image data. - Factory method to handle as . - The token to monitor for cancellation requests. - is null. - A representing the asynchronous operation. - - - - Decodes the image from the specified stream. - - The pixel format. - The decoder. - The configuration for the image. - The containing image data. - The token to monitor for cancellation requests. - A representing the asynchronous operation. - - - - Decodes the image from the specified stream. - - The pixel format. - The decoder. - The configuration for the image. - The containing image data. - Factory method to handle as . - The token to monitor for cancellation requests. - A representing the asynchronous operation. - - - - Collection of Image Formats to be used in class. - - - - - Used for locking against as there is no ConcurrentSet type. - - - - - - The list of supported keyed to mime types. - - - - - The list of supported keyed to mime types. - - - - - The list of supported s. - - - - - The list of supported s. - - - - - Initializes a new instance of the class. - - - - - Gets the maximum header size of all the formats. - - - - - Gets the currently registered s. - - - - - Gets the currently registered s. - - - - - Gets the currently registered s. - - - - - Gets the currently registered s. - - - - - Registers a new format provider. - - The format to register as a known format. - - - - For the specified file extensions type find the e . - - The extension to discover - The if found otherwise null - - - - For the specified mime type find the . - - The mime-type to discover - The if found; otherwise null - - - - Sets a specific image encoder as the encoder for a specific image format. - - The image format to register the encoder for. - The encoder to use, - - - - Sets a specific image decoder as the decoder for a specific image format. - - The image format to register the encoder for. - The decoder to use, - - - - Removes all the registered image format detectors. - - - - - Adds a new detector for detecting mime types. - - The detector to add - - - - For the specified mime type find the decoder. - - The format to discover - The if found otherwise null - - - - For the specified mime type find the encoder. - - The format to discover - The if found otherwise null - - - - Sets the max header size. - - - - - Represents a Jpeg block with coefficients. - - - - - A number of scalar coefficients in a - - - - - A fixed size buffer holding the values. - See: - https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/unsafe-code-pointers/fixed-size-buffers - - - - - - Initializes a new instance of the struct. - - A of coefficients - - - - Gets or sets a value at the given index - - The index - The value - - - - Gets or sets a value in a row+column of the 8x8 block - - The x position index in the row - The column index - The value - - - - Multiply all elements by a given - - - - - Divide all elements by a given - - - - - Add an to all elements - - - - - Subtract an from all elements - - - - - Pointer-based "Indexer" (getter part) - - Block pointer - Index - The scaleVec value at the specified index - - - - Pointer-based "Indexer" (setter part) - - Block pointer - Index - Value - - - - Convert to - - - - - Copy all elements to an array of . - - - - - Copy elements into 'destination' Span of values - - - - - Copy elements into 'destination' Span of values - - - - - Cast and copy -s from the beginning of 'source' span. - - - - - - - - - - - - - - - - - Calculate the total sum of absolute differences of elements in 'a' and 'b'. - - - - - Represents a Jpeg block with coefficients. - - - - - A number of scalar coefficients in a - - - - - Get/Set scalar elements at a given index - - The index - The float value at the specified index - - - - Fill the block with defaults (zeroes). - - - - - Load raw 32bit floating point data from source. - - Source - - - - Load raw 32bit floating point data from source. - - Block pointer - Source - - - - Load raw 32bit floating point data from source - - Source - - - - Copy raw 32bit floating point data to dest, - - Destination - - - - Convert scalars to byte-s and copy to dest, - - Pointer to block - Destination - - - - Copy raw 32bit floating point data to dest. - - The block pointer. - The destination. - - - - Copy raw 32bit floating point data to dest - - Destination - - - - Copy raw 32bit floating point data to dest - - Destination - - - - Multiply all elements of the block. - - The value to multiply by. - - - - Multiply all elements of the block by the corresponding elements of 'other'. - - - - - Adds a vector to all elements of the block. - - The added vector. - - - - Quantize the block. - - The block pointer. - The qt pointer. - Unzig pointer - - - - Quantize 'block' into 'dest' using the 'qt' quantization table: - Unzig the elements of block into dest, while dividing them by elements of qt and "pre-rounding" the values. - To finish the rounding it's enough to (int)-cast these values. - - Source block - Destination block - The quantization table - The 8x8 Unzig block. - - - - Scales the 16x16 region represented by the 4 source blocks to the 8x8 DST block. - - The destination block. - The source block. - - - - Level shift by +maximum/2, clip to [0..maximum], and round all the values in the block. - - - - - Rounds all values in the block. - - - - - Loads values from using extended AVX2 intrinsics. - - The source - - - - - - - - - - Transpose the block into the destination block. - - The destination block - - - - Level shift by +maximum/2, clip to [0, maximum] - - - - - AVX2-only variant for executing and in one step. - - - - - Fill the block from 'source' doing short -> float conversion. - - - - - Copy block data into the destination color buffer pixel area with the provided horizontal and vertical scale factors. - - - - - Provides information about the Adobe marker segment. - - See the included 5116.DCT.pdf file in the source for more information. - - - - Gets the length of an adobe marker segment. - - - - - Initializes a new instance of the struct. - - The DCT encode version - The horizontal downsampling hint used for DCT encoding - The vertical downsampling hint used for DCT encoding - The color transform model used - - - - Gets the DCT Encode Version - - - - - Gets the horizontal downsampling hint used for DCT encoding - 0x0 : (none - Chop) - Bit 15 : Encoded with Blend=1 downsampling. - - - - - Gets the vertical downsampling hint used for DCT encoding - 0x0 : (none - Chop) - Bit 15 : Encoded with Blend=1 downsampling - - - - - Gets the colorspace transform model used - 00 : Unknown (RGB or CMYK) - 01 : YCbCr - 02 : YCCK - - - - - Converts the specified byte array representation of an Adobe marker to its equivalent and - returns a value that indicates whether the conversion succeeded. - - The byte array containing metadata to parse. - The marker to return. - - - - - - - - - - - - - Encapsulates the conversion of Jpeg channels to RGBA values packed in buffer. - - - - - The available converters - - - - - Initializes a new instance of the class. - - - - - Gets a value indicating whether this is available - on the current runtime and CPU architecture. - - - - - Gets the of this converter. - - - - - Gets the Precision of this converter in bits. - - - - - Gets the maximum value of a sample - - - - - Gets the half of the maximum value of a sample - - - - - Returns the corresponding to the given - - - - - He implementation of the conversion. - - The input as a stack-only struct - The destination buffer of values - - - - Returns the s for all supported colorspaces and precisions. - - - - - Returns the s for the YCbCr colorspace. - - - - - Returns the s for the YccK colorspace. - - - - - Returns the s for the CMYK colorspace. - - - - - Returns the s for the gray scale colorspace. - - - - - Returns the s for the RGB colorspace. - - - - - A stack-only struct to reference the input buffers using -s. - - - - - The component count - - - - - The component 0 (eg. Y) - - - - - The component 1 (eg. Cb) - - - - - The component 2 (eg. Cr) - - - - - The component 4 - - - - - Initializes a new instance of the struct. - - The 1-4 sized list of component buffers. - The row to convert - - - - Pack (r0,r1...r7) (g0,g1...g7) (b0,b1...b7) vector values as (r0,g0,b0,1), (r1,g1,b1,1) ... - - - - - Pack (g0,g1...g7) vector values as (g0,g0,g0,1), (g1,g1,g1,1) ... - - - - - Used to buffer and track the bits read from the Huffman entropy encoded data. - - - - - Gets the current, if any, marker in the input stream. - - - - - Gets the opening position of an identified marker. - - - - - Gets a value indicating whether to continue reading the input stream. - - - - - Whether a RST marker has been detected, I.E. One that is between RST0 and RST7 - - - - - Whether a bad marker has been detected, I.E. One that is not between RST0 and RST7 - - - - - Decodes the Huffman encoded spectral scan. - Originally ported from - with additional fixes for both performance and common encoding errors. - - - - - Initializes a new instance of the class. - - The input stream. - The image frame. - The DC Huffman tables. - The AC Huffman tables. - The length of the components. Different to the array length. - The reset interval. - The spectral selection start. - The spectral selection end. - The successive approximation bit high end. - The successive approximation bit low end. - The token to monitor cancellation. - - - - Decodes the entropy coded data. - - - - - Represents a Huffman coding table containing basic coding data plus tables for accelerated computation. - - - - - Derived from the DHT marker. Sizes[k] = # of symbols with codes of length k bits; Sizes[0] is unused. - - - - - Derived from the DHT marker. Contains the symbols, in order of incremental code length. - - - - - Contains the largest code of length k (0 if none). MaxCode[17] is a sentinel to - ensure terminates. - - - - - Values[] offset for codes of length k ValOffset[k] = Values[] index of 1st symbol of code length - k, less the smallest code of length k; so given a code of length k, the corresponding symbol is - Values[code + ValOffset[k]]. - - - - - Contains the length of bits for the given k value. - - - - - Lookahead table: indexed by the next bits of - the input data stream. If the next Huffman code is no more - than bits long, we can obtain its length and - the corresponding symbol directly from this tables. - - The lower 8 bits of each table entry contain the number of - bits in the corresponding Huffman code, or + 1 - if too long. The next 8 bits of each entry contain the symbol. - - - - - Initializes a new instance of the struct. - - The code lengths - The huffman values - - - - Expands the HuffmanTable into its readable form. - - - - - Common interface to represent raw Jpeg components. - - - - - Gets the component's position in the components array. - - - - - Gets the number of blocks in this component as - - - - - Gets the horizontal and the vertical sampling factor as - - - - - Gets the divisors needed to apply when calculating colors. - - https://en.wikipedia.org/wiki/Chroma_subsampling - - In case of 4:2:0 subsampling the values are: Luma.SubSamplingDivisors = (1,1) Chroma.SubSamplingDivisors = (2,2) - - - - - Gets the index of the quantization table for this block. - - - - - Gets the storing the "raw" frequency-domain decoded + unzigged blocks. - We need to apply IDCT and dequantization to transform them into color-space blocks. - - - - - - Represents decompressed, unprocessed jpeg data with spectral space -s. - - - - - Gets the image size in pixels. - - - - - Gets the number of components. - - - - - Gets the color space - - - - - Gets the number of bits used for precision. - - - - - Gets the components. - - - - - Gets the quantization tables, in zigzag order. - - - - - Provides information about the JFIF marker segment. - TODO: Thumbnail? - - - - - Gets the length of an JFIF marker segment. - - - - - Initializes a new instance of the struct. - - The major version. - The minor version. - The units for the density values. - The horizontal pixel density. - The vertical pixel density. - - - - Gets the major version. - - - - - Gets the minor version. - - - - - Gets the units for the following pixel density fields - 00 : No units; width:height pixel aspect ratio = Ydensity:Xdensity - 01 : Pixels per inch (2.54 cm) - 02 : Pixels per centimeter - - - - - Gets the horizontal pixel density. Must not be zero. - - - - - Gets the vertical pixel density. Must not be zero. - - - - - Converts the specified byte array representation of an JFIF marker to its equivalent and - returns a value that indicates whether the conversion succeeded. - - The byte array containing metadata to parse. - The marker to return. - - - - - - - - - - - - - Encapsulates the implementation of processing "raw" jpeg buffers into Jpeg image channels. - - - - - Source block - - - - - Temporal block 1 to store intermediate and/or final computation results. - - - - - Temporal block 2 to store intermediate and/or final computation results. - - - - - The quantization table as . - - - - - Defines the horizontal and vertical scale we need to apply to the 8x8 sized block. - - - - - Defines the maximum value derived from the bitdepth. - - - - - Initializes a new instance of the struct. - - The raw jpeg data. - The raw component. - - - - Processes 'sourceBlock' producing Jpeg color channel values from spectral values: - - Dequantize - - Applying IDCT - - Level shift by +maximumValue/2, clip to [0, maximumValue] - - Copy the resulting color values into 'destArea' scaling up the block by amount defined in . - - The source block. - Reference to the origin of the destination pixel area. - The width of the destination pixel buffer. - The maximum value derived from the bitdepth. - - - - Identifies the colorspace of a Jpeg image. - - - - - Represents a single frame component. - - - - - Gets the component id. - - - - - Gets or sets DC coefficient predictor. - - - - - Gets the horizontal sampling factor. - - - - - Gets the vertical sampling factor. - - - - - - - - - - - - - - - - - - - - - - - Gets the number of blocks per line. - - - - - Gets the number of blocks per column. - - - - - Gets or sets the index for the DC Huffman table. - - - - - Gets or sets the index for the AC Huffman table. - - - - - - - - Encapsulates postprocessing data for one component for . - - - - - Points to the current row in . - - - - - The size of the area in corresponding to one 8x8 Jpeg block - - - - - Initializes a new instance of the class. - - - - - Gets the - - - - - Gets the - - - - - Gets the temporary working buffer of color values. - - - - - Gets - - - - - Gets the maximal number of block rows being processed in one step. - - - - - - - - Invoke for block rows, copy the result into . - - - - - Represents a jpeg file marker. - - - - - Initializes a new instance of the struct. - - The marker - The position within the stream - - - - Initializes a new instance of the struct. - - The marker - The position within the stream - Whether the current marker is invalid - - - - Gets a value indicating whether the current marker is invalid - - - - - Gets the position of the marker within a stream - - - - - Gets the position of the marker within a stream - - - - - - - - Represent a single jpeg frame - - - - - Gets or sets a value indicating whether the frame uses the extended specification. - - - - - Gets or sets a value indicating whether the frame uses the progressive specification. - - - - - Gets or sets the precision. - - - - - Gets or sets the number of scanlines within the frame. - - - - - Gets or sets the number of samples per scanline. - - - - - Gets or sets the number of components within a frame. In progressive frames this value can range from only 1 to 4. - - - - - Gets or sets the component id collection. - - - - - Gets or sets the order in which to process the components. - in interleaved mode. - - - - - Gets or sets the frame component collection. - - - - - Gets or sets the maximum horizontal sampling factor. - - - - - Gets or sets the maximum vertical sampling factor. - - - - - Gets or sets the number of MCU's per line. - - - - - Gets or sets the number of MCU's per column. - - - - - - - - Allocates the frame component blocks. - - - - - Encapsulates the execution od post-processing algorithms to be applied on a to produce a valid :
- (1) Dequantization
- (2) IDCT
- (3) Color conversion form one of the -s into a buffer of RGBA values
- (4) Packing pixels from the buffer.
- These operations are executed in steps. - image rows are converted in one step, - which means that size of the allocated memory is limited (does not depend on ). -
-
- - - The number of block rows to be processed in one Step. - - - - - The number of image pixel rows to be processed in one step. - - - - - Temporal buffer to store a row of colors. - - - - - The corresponding to the current determined by . - - - - - Initializes a new instance of the class. - - The to configure internal operations. - The representing the uncompressed spectral Jpeg data - - - - Gets the instances. - - - - - Gets the to be processed. - - - - - Gets the total number of post processor steps deduced from the height of the image and . - - - - - Gets the size of the temporary buffers we need to allocate into . - - - - - Gets the value of the counter that grows by each step by . - - - - - - - - Process all pixels into 'destination'. The image dimensions should match . - - The pixel type - The destination image - The token to request cancellation. - - - - Execute one step processing pixel rows into 'destination'. - - The pixel type - The destination image. - - - - Convert and copy row of colors into 'destination' starting at row . - - The pixel type - The destination image - - - - Provides methods for identifying metadata and color profiles within jpeg images. - - - - - Gets the JFIF specific markers. - - - - - Gets the ICC specific markers. - - - - - Gets the adobe photoshop APP13 marker which can contain IPTC meta data. - - - - - Gets the 8BIM marker, which signals the start of a adobe specific image resource block. - - - - - Gets a IPTC Image resource ID. - - - - - Gets the EXIF specific markers. - - - - - Gets the Adobe specific markers . - - - - - Returns a value indicating whether the passed bytes are a match to the profile identifier. - - The bytes to check. - The profile identifier. - The . - - - - Provides methods to evaluate the quality of an image. - Ported from - - - - - Returns an estimated quality of the image based on the quantization tables. - - The quantization tables. - The . - - - - Enumerates the Huffman tables - - - - - The DC luminance huffman table index - - - - - The AC luminance huffman table index - - - - - The DC chrominance huffman table index - - - - - The AC chrominance huffman table index - - - - - A compiled look-up table representation of a huffmanSpec. - Each value maps to a uint32 of which the 8 most significant bits hold the - codeword size in bits and the 24 least significant bits hold the codeword. - The maximum codeword size is 16 bits. - - - - - The compiled representations of theHuffmanSpec. - - - - - Initializes static members of the struct. - - - - - Initializes a new instance of the struct. - - dasd - - - - Gets the collection of huffman values. - - - - - The Huffman encoding specifications. - - - - - The Huffman encoding specifications. - This encoder uses the same Huffman encoding for all images. - - - - - Gets count[i] - The number of codes of length i bits. - - - - - Gets value[i] - The decoded value of the codeword at the given index. - - - - - Initializes a new instance of the struct. - - - The number of codes. - - - The decoded values. - - - - - Enumerates the quantization tables - - - - - The luminance quantization table index - - - - - The chrominance quantization table index - - - - - Provides 8-bit lookup tables for converting from Rgb to YCbCr colorspace. - Methods to build the tables are based on libjpeg implementation. - - - - - The red luminance table - - - - - The green luminance table - - - - - The blue luminance table - - - - - The red blue-chrominance table - - - - - The green blue-chrominance table - - - - - The blue blue-chrominance table - B=>Cb and R=>Cr are the same - - - - - The green red-chrominance table - - - - - The blue red-chrominance table - - - - - Initializes the YCbCr tables - - The initialized - - - - Optimized method to allocates the correct y, cb, and cr values to the DCT blocks from the given r, g, b values. - - - - - On-stack worker struct to efficiently encapsulate the TPixel -> Rgb24 -> YCbCr conversion chain of 8x8 pixel blocks. - - The pixel type to work on - - - - The Y component - - - - - The Cb component - - - - - The Cr component - - - - - The color conversion tables - - - - - Temporal 8x8 block to hold TPixel data - - - - - Temporal RGB block - - - - - Converts a 8x8 image area inside 'pixels' at position (x,y) placing the result members of the structure (, , ) - - - - - Contains inaccurate, but fast forward and inverse DCT implementations. - - - - - Apply floating point IDCT transformation into dest, using a temporary block 'temp' provided by the caller (optimization). - Ported from https://github.com/norishigefukushima/dct_simd/blob/master/dct/dct8x8_simd.cpp#L239 - - Source - Destination - Temporary block provided by the caller - - - - Do IDCT internal operations on the left part of the block. Original src: - https://github.com/norishigefukushima/dct_simd/blob/master/dct/dct8x8_simd.cpp#L261 - - The source block - Destination block - - - - Do IDCT internal operations on the right part of the block. - Original src: - https://github.com/norishigefukushima/dct_simd/blob/master/dct/dct8x8_simd.cpp#L261 - - The source block - The destination block - - - - Original: - - https://github.com/norishigefukushima/dct_simd/blob/master/dct/dct8x8_simd.cpp#L15 - - - Source - Destination - - - - Original: - - https://github.com/norishigefukushima/dct_simd/blob/master/dct/dct8x8_simd.cpp#L15 - - - Source - Destination - - - - Apply floating point IDCT transformation into dest, using a temporary block 'temp' provided by the caller (optimization) - - Source - Destination - Temporary block provided by the caller - If true, a constant -128.0 offset is applied for all values before FDCT - - - - A generic 8x8 block implementation, useful for manipulating custom 8x8 pixel data. - - - - - FOR TESTING ONLY! - Gets or sets a value at the given index - - The index - The value - - - - FOR TESTING ONLY! - Gets or sets a value in a row+column of the 8x8 block - - The x position index in the row - The column index - The value - - - - Load a 8x8 region of an image into the block. - The "outlying" area of the block will be stretched out with pixels on the right and bottom edge of the image. - - - - - Only for on-stack instances! - - - - - Cache 8 pixel rows on the stack, which may originate from different buffers of a . - - - - - Extension methods for - - - - - Multiplies 'a.Width' with 'b.Width' and 'a.Height' with 'b.Height'. - TODO: Shouldn't we expose this as operator in SixLabors.Core? - - - - - Divides 'a.Width' with 'b.Width' and 'a.Height' with 'b.Height'. - TODO: Shouldn't we expose this as operator in SixLabors.Core? - - - - - Divide Width and Height as real numbers and return the Ceiling. - - - - - Divide Width and Height as real numbers and return the Ceiling. - - - - - Divide Width and Height as real numbers and return the Ceiling. - - - - - Holds the Jpeg UnZig array in a value/stack type. - Unzig maps from the zigzag ordering to the natural ordering. For example, - unzig[3] is the column and row of the fourth element in zigzag order. The - value is 16, which means first column (16%8 == 0) and third row (16/8 == 2). - - - - - When reading corrupted data, the Huffman decoders could attempt - to reference an entry beyond the end of this array (if the decoded - zero run length reaches past the end of the block). To prevent - wild stores without adding an inner-loop test, we put some extra - "63"s after the real entries. This will cause the extra coefficient - to be stored in location 63 of the block, not somewhere random. - The worst case would be a run-length of 15, which means we need 16 - fake entries. - - - - - Copy of in a value type - - - - - Gets the unzigs map, which maps from the zigzag ordering to the natural ordering. - For example, unzig[3] is the column and row of the fourth element in zigzag order. - The value is 16, which means first column (16%8 == 0) and third row (16/8 == 2). - - - - - Returns the value at the given index - - The index - The - - - - Creates and fills an instance of with Jpeg unzig indices - - The new instance - - - - Apply Zigging to the given quantization table, so it will be sufficient to multiply blocks for dequantizing them. - - - - - Image decoder for generating an image out of a jpg stream. - - - - - Gets a value indicating whether the metadata should be ignored when the image is being decoded. - - - - - Encoder for writing the data image to a stream in jpeg format. - - - - - Gets the quality, that will be used to encode the image. Quality - index must be between 0 and 100 (compression from max to min). - - The quality of the jpg image from 0 to 100. - - - - Gets the subsample ration, that will be used to encode the image. - - The subsample ratio of the jpg image. - - - - Registers the image encoders, decoders and mime type detectors for the jpeg format. - - - - - - - - Contains jpeg constant values defined in the specification. - - - - - The maximum allowable length in each dimension of a jpeg image. - - - - - The list of mimetypes that equate to a jpeg. - - - - - The list of file extensions that equate to a jpeg. - - - - - Contains marker specific constants. - - - - - The prefix used for all markers. - - - - - Same as but of type - - - - - The Start of Image marker - - - - - The End of Image marker - - - - - Application specific marker for marking the jpeg format. - - - - - - Application specific marker for marking where to store metadata. - - - - - Application specific marker for marking where to store ICC profile information. - - - - - Application specific marker. - - - - - Application specific marker. - - - - - Application specific marker. - - - - - Application specific marker. - - - - - Application specific marker. - - - - - Application specific marker. - - - - - Application specific marker. - - - - - Application specific marker. - - - - - Application specific marker. - - - - - Application specific marker. - - - - - Application specific marker. - - - - - Application specific marker used by Adobe for storing encoding information for DCT filters. - - - - - Application specific marker used by GraphicConverter to store JPEG quality. - - - - - The text comment marker - - - - - Define Quantization Table(s) marker - - Specifies one or more quantization tables. - - - - - - Start of Frame (baseline DCT) - - Indicates that this is a baseline DCT-based JPEG, and specifies the width, height, number of components, - and component subsampling (e.g., 4:2:0). - - - - - - Start Of Frame (Extended Sequential DCT) - - Indicates that this is a progressive DCT-based JPEG, and specifies the width, height, number of components, - and component subsampling (e.g., 4:2:0). - - - - - - Start Of Frame (progressive DCT) - - Indicates that this is a progressive DCT-based JPEG, and specifies the width, height, number of components, - and component subsampling (e.g., 4:2:0). - - - - - - Define Huffman Table(s) - - Specifies one or more Huffman tables. - - - - - - Define Restart Interval - - Specifies the interval between RSTn markers, in macroblocks.This marker is followed by two bytes indicating the fixed size so - it can be treated like any other variable size segment. - - - - - - Start of Scan - - Begins a top-to-bottom scan of the image. In baseline DCT JPEG images, there is generally a single scan. - Progressive DCT JPEG images usually contain multiple scans. This marker specifies which slice of data it - will contain, and is immediately followed by entropy-coded data. - - - - - - Define First Restart - - Inserted every r macroblocks, where r is the restart interval set by a DRI marker. - Not used if there was no DRI marker. The low three bits of the marker code cycle in value from 0 to 7. - - - - - - Define Eigth Restart - - Inserted every r macroblocks, where r is the restart interval set by a DRI marker. - Not used if there was no DRI marker. The low three bits of the marker code cycle in value from 0 to 7. - - - - - - Contains Adobe specific constants. - - - - - The color transform is unknown.(RGB or CMYK) - - - - - The color transform is YCbCr (luminance, red chroma, blue chroma) - - - - - The color transform is YCCK (luminance, red chroma, blue chroma, keyline) - - - - - Contains Huffman specific constants. - - - - - The size of the huffman decoder register. - - - - - The number of bits to fetch when filling the buffer. - - - - - The number of times to read the input stream when filling the buffer. - - - - - The minimum number of bits allowed before by the before fetching. - - - - - If the next Huffman code is no more than this number of bits, we can obtain its length - and the corresponding symbol directly from this tables. - - - - - If a Huffman code is this number of bits we cannot use the lookup table to determine its value. - - - - - The size of the lookup table. - - - - - Image decoder for generating an image out of a jpg stream. - - - - - - - - - - - - - - - - - - - - - - - - - - Performs the jpeg decoding operation. - Originally ported from - with additional fixes for both performance and common encoding errors. - - - - - The only supported precision - - - - - The buffer used to temporarily store bytes read from the stream. - - - - - The buffer used to read markers from the stream. - - - - - The DC Huffman tables. - - - - - The AC Huffman tables - - - - - The reset interval determined by RST markers. - - - - - Whether the image has an EXIF marker. - - - - - Contains exif data. - - - - - Whether the image has an ICC marker. - - - - - Contains ICC data. - - - - - Whether the image has a IPTC data. - - - - - Contains IPTC data. - - - - - Contains information about the JFIF marker. - - - - - Contains information about the Adobe marker. - - - - - Initializes a new instance of the class. - - The configuration. - The options. - - - - - - - Gets the frame - - - - - - - - - - - Gets the number of MCU blocks in the image as . - - - - - Gets the image width - - - - - Gets the image height - - - - - Gets the color depth, in number of bits per pixel. - - - - - Gets a value indicating whether the metadata should be ignored when the image is being decoded. - - - - - Gets the decoded by this decoder instance. - - - - - - - - - - - - - - Gets the components. - - - - - - - - - - - Finds the next file marker within the byte stream. - - The buffer to read file markers to - The input stream - The - - - - - - - - - - Parses the input stream for file markers - - The input stream - Whether to decode metadata only. - The token to monitor cancellation. - - - - - - - Returns the correct colorspace based on the image component count - - The - - - - Initializes the EXIF profile. - - - - - Initializes the ICC profile. - - - - - Initializes the IPTC profile. - - - - - Assigns derived metadata properties to , eg. horizontal and vertical resolution if it has a JFIF header. - - - - - Extends the profile with additional data. - - The profile data array. - The array containing addition profile data. - - - - Processes the application header containing the JFIF identifier plus extra data. - - The input stream. - The remaining bytes in the segment block. - - - - Processes the App1 marker retrieving any stored metadata - - The input stream. - The remaining bytes in the segment block. - - - - Processes the App2 marker retrieving any stored ICC profile information - - The input stream. - The remaining bytes in the segment block. - - - - Processes a App13 marker, which contains IPTC data stored with Adobe Photoshop. - The content of an APP13 segment is formed by an identifier string followed by a sequence of resource data blocks. - - The input stream. - The remaining bytes in the segment block. - - - - Reads the adobe image resource block name: a Pascal string (padded to make size even). - - The span holding the block resource data. - The length of the name. - - - - Reads the length of a adobe image resource data block. - - The span holding the block resource data. - The length of the block name. - The block length. - - - - Processes the application header containing the Adobe identifier - which stores image encoding information for DCT filters. - - The input stream. - The remaining bytes in the segment block. - - - - Processes the Define Quantization Marker and tables. Specified in section B.2.4.1. - - The input stream. - The remaining bytes in the segment block. - - Thrown if the tables do not match the header - - - - - Processes the Start of Frame marker. Specified in section B.2.2. - - The input stream. - The remaining bytes in the segment block. - The current frame marker. - Whether to parse metadata only - - - - Processes a Define Huffman Table marker, and initializes a huffman - struct from its contents. Specified in section B.2.4.2. - - The input stream. - The remaining bytes in the segment block. - - - - Processes the DRI (Define Restart Interval Marker) Which specifies the interval between RSTn markers, in - macroblocks - - The input stream. - The remaining bytes in the segment block. - - - - Processes the SOS (Start of scan marker). - - - - - Builds the huffman tables - - The tables - The table index - The codelengths - The values - - - - Reads a from the stream advancing it by two bytes - - The input stream. - The - - - - Post processes the pixels into the destination image. - - The pixel format. - The . - - - - Encoder for writing the data image to a stream in jpeg format. - - - - - Gets or sets the quality, that will be used to encode the image. Quality - index must be between 0 and 100 (compression from max to min). - Defaults to 75. - - - - - Gets or sets the subsample ration, that will be used to encode the image. - - - - - Encodes the image to the specified stream from the . - - The pixel format. - The to encode from. - The to encode the image data to. - - - - Encodes the image to the specified stream from the . - - The pixel format. - The to encode from. - The to encode the image data to. - The token to monitor for cancellation requests. - A representing the asynchronous operation. - - - - Image encoder for writing an image to a stream as a jpeg. - - - - - The number of quantization tables. - - - - - A scratch buffer to reduce allocations. - - - - - A buffer for reducing the number of stream writes when emitting Huffman tables. 64 seems to be enough. - - - - - A buffer for reducing the number of stream writes when emitting Huffman tables. Max combined table lengths + - identifier. - - - - - Gets or sets the subsampling method to use. - - - - - The quality, that will be used to encode the image. - - - - - The accumulated bits to write to the stream. - - - - - The accumulated bit count. - - - - - The scaled chrominance table, in zig-zag order. - - - - - The scaled luminance table, in zig-zag order. - - - - - The output stream. All attempted writes after the first error become no-ops. - - - - - Initializes a new instance of the class. - - The options - - - - Gets the counts the number of bits needed to hold an integer. - - - - - Gets the SOS (Start Of Scan) marker "\xff\xda" followed by 12 bytes: - - the marker length "\x00\x0c", - - the number of components "\x03", - - component 1 uses DC table 0 and AC table 0 "\x01\x00", - - component 2 uses DC table 1 and AC table 1 "\x02\x11", - - component 3 uses DC table 1 and AC table 1 "\x03\x11", - - the bytes "\x00\x3f\x00". Section B.2.3 of the spec says that for - sequential DCTs, those bytes (8-bit Ss, 8-bit Se, 4-bit Ah, 4-bit Al) - should be 0x00, 0x3f, 0x00<<4 | 0x00. - - - - - Gets the unscaled quantization tables in zig-zag order. Each - encoder copies and scales the tables according to its quality parameter. - The values are derived from section K.1 after converting from natural to - zig-zag order. - - - - - Gets the unscaled quantization tables in zig-zag order. Each - encoder copies and scales the tables according to its quality parameter. - The values are derived from section K.1 after converting from natural to - zig-zag order. - - - - - Encode writes the image to the jpeg baseline format with the given options. - - The pixel format. - The image to write from. - The stream to write to. - The token to request cancellation. - - - - Writes data to "Define Quantization Tables" block for QuantIndex - - The "Define Quantization Tables" block - Offset in "Define Quantization Tables" block - The quantization index - The quantization table to copy data from - - - - Initializes quantization table. - - The quantization index. - The scaling factor. - The quantization table. - - - - Emits the least significant count of bits of bits to the bit-stream. - The precondition is bits - - < 1<<nBits && nBits <= 16 - - . - - The packed bits. - The number of bits - The reference to the emitBuffer. - - - - Emits the given value with the given Huffman encoder. - - The index of the Huffman encoder - The value to encode. - The reference to the emit buffer. - - - - Emits a run of runLength copies of value encoded with the given Huffman encoder. - - The index of the Huffman encoder - The number of copies to encode. - The value to encode. - The reference to the emit buffer. - - - - Encodes the image with no subsampling. - - The pixel format. - The pixel accessor providing access to the image pixels. - The token to monitor for cancellation. - The reference to the emit buffer. - - - - Writes the application header containing the JFIF identifier plus extra data. - - The image metadata. - - - - Writes a block of pixel data using the given quantization table, - returning the post-quantized DC value of the DCT-transformed block. - The block is in natural (not zig-zag) order. - - The quantization table index. - The previous DC value. - Source block - Temporal block to be used as FDCT Destination - Temporal block 2 - Quantization table - The 8x8 Unzig block. - The reference to the emit buffer. - The . - - - - Writes the Define Huffman Table marker and tables. - - The number of components to write. - - - - Writes the Define Quantization Marker and tables. - - - - - Writes the EXIF profile. - - The exif profile. - - - - Writes the IPTC metadata. - - The iptc metadata to write. - - Thrown if the IPTC profile size exceeds the limit of 65533 bytes. - - - - - Writes the App1 header. - - The length of the data the app1 marker contains. - - - - Writes a AppX header. - - The length of the data the app marker contains. - The app marker to write. - - - - Writes the ICC profile. - - The ICC profile to write. - - Thrown if any of the ICC profiles size exceeds the limit - - - - - Writes the metadata profiles to the image. - - The image metadata. - - - - Writes the Start Of Frame (Baseline) marker - - The width of the image - The height of the image - The number of components in a pixel - - - - Writes the StartOfScan marker. - - The pixel format. - The pixel accessor providing access to the image pixels. - The token to monitor for cancellation. - - - - Encodes the image with subsampling. The Cb and Cr components are each subsampled - at a factor of 2 both horizontally and vertically. - - The pixel format. - The pixel accessor providing access to the image pixels. - The token to monitor for cancellation. - The reference to the emit buffer. - - - - Writes the header for a marker with the given length. - - The marker to write. - The marker length. - - - - Registers the image encoders, decoders and mime type detectors for the jpeg format. - - - - - Gets the current instance. - - - - - - - - - - - - - - - - - - - - Detects Jpeg file headers - - - - - - - - - - - Returns a value indicating whether the given bytes identify Jfif data. - - The bytes representing the file header. - The - - - - Returns a value indicating whether the given bytes identify EXIF data. - - The bytes representing the file header. - The - - - - Returns a value indicating whether the given bytes identify Jpeg data. - This is a last chance resort for jpegs that contain ICC information. - - The bytes representing the file header. - The - - - - Provides Jpeg specific metadata information for the image. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The metadata to create an instance from. - - - - Gets or sets the encoded quality. - - - - - - - - Enumerates the chroma subsampling method applied to the image. - - - - - High Quality - Each of the three Y'CbCr components have the same sample rate, - thus there is no chroma subsampling. - - - - - Medium Quality - The horizontal sampling is halved and the Cb and Cr channels are only - sampled on each alternate line. - - - - - Cold path optimization for throwing 's. - - The error message for the exception. - - - - Cold path optimization for throwing 's. - - The error message for the exception. - The exception that is the cause of the current exception, or a null reference - if no inner exception is specified. - - - - Cold path optimization for throwing 's - - The error message for the exception. - - - - Contains information about the pixels that make up an images visual data. - - - - - Initializes a new instance of the class. - - Color depth, in number of bits per pixel. - Tthe pixel alpha transparency behavior. - - - - Gets color depth, in number of bits per pixel. - - - - - Gets the pixel alpha transparency behavior. - means unknown, unspecified. - - - - - Constants and helper methods for the Adam7 interlacing algorithm. - - - - - The amount to increment when processing each column per scanline for each interlaced pass. - - - - - The index to start at when processing each column per scanline for each interlaced pass. - - - - - The index to start at when processing each row per scanline for each interlaced pass. - - - - - The amount to increment when processing each row per scanline for each interlaced pass. - - - - - Gets the width of the block. - - The width. - The pass. - - The - - - - - Gets the height of the block. - - The height. - The pass. - - The - - - - - Returns the correct number of columns for each interlaced pass. - - The line width. - The current pass index. - The - - - - The pHYs chunk specifies the intended pixel size or aspect ratio for display of the image. - - - - - Gets the number of pixels per unit on the X axis. - - - - - Gets the number of pixels per unit on the Y axis. - - - - - Gets the unit specifier. - 0: unit is unknown - 1: unit is the meter - When the unit specifier is 0, the pHYs chunk defines pixel aspect ratio only; the actual size of the pixels remains unspecified. - - - - - Parses the PhysicalChunkData from the given buffer. - - The data buffer. - The parsed PhysicalChunkData. - - - - Constructs the PngPhysicalChunkData from the provided metadata. - If the resolution units are not in meters, they are automatically converted. - - The metadata. - The constructed PngPhysicalChunkData instance. - - - - Writes the data to the given buffer. - - The buffer. - - - - The Average filter uses the average of the two neighboring pixels (left and above) to predict - the value of a pixel. - - - - - - Decodes the scanline - - The scanline to decode - The previous scanline. - The bytes per pixel. - - - - Encodes the scanline - - The scanline to encode - The previous scanline. - The filtered scanline result. - The bytes per pixel. - The sum of the total variance of the filtered row - - - - Calculates the average value of two bytes - - The left byte - The above byte - The - - - - Provides enumeration of the various PNG filter types. - - - - - - With the None filter, the scanline is transmitted unmodified; it is only necessary to - insert a filter type byte before the data. - - - - - The Sub filter transmits the difference between each byte and the value of the corresponding - byte of the prior pixel. - - - - - The Up filter is just like the Sub filter except that the pixel immediately above the current - pixel, rather than just to its left, is used as the predictor. - - - - - The Average filter uses the average of the two neighboring pixels (left and above) to - predict the value of a pixel. - - - - - The Paeth filter computes a simple linear function of the three neighboring pixels (left, above, upper left), - then chooses as predictor the neighboring pixel closest to the computed value. - This technique is due to Alan W. Paeth - - - - - The None filter, the scanline is transmitted unmodified; it is only necessary to - insert a filter type byte before the data. - - - - - - Encodes the scanline - - The scanline to encode - The filtered scanline result. - - - - The Paeth filter computes a simple linear function of the three neighboring pixels (left, above, upper left), - then chooses as predictor the neighboring pixel closest to the computed value. - This technique is due to Alan W. Paeth. - - - - - - Decodes the scanline - - The scanline to decode - The previous scanline. - The bytes per pixel. - - - - Encodes the scanline - - The scanline to encode - The previous scanline. - The filtered scanline result. - The bytes per pixel. - The sum of the total variance of the filtered row - - - - Computes a simple linear function of the three neighboring pixels (left, above, upper left), then chooses - as predictor the neighboring pixel closest to the computed value. - - The left neighbor pixel. - The above neighbor pixel. - The upper left neighbor pixel. - - The . - - - - - The Sub filter transmits the difference between each byte and the value of the corresponding byte - of the prior pixel. - - - - - - Decodes the scanline - - The scanline to decode - The bytes per pixel. - - - - Encodes the scanline - - The scanline to encode - The filtered scanline result. - The bytes per pixel. - The sum of the total variance of the filtered row - - - - The Up filter is just like the Sub filter except that the pixel immediately above the current pixel, - rather than just to its left, is used as the predictor. - - - - - - Decodes the scanline - - The scanline to decode - The previous scanline. - - - - Encodes the scanline - - The scanline to encode - The previous scanline. - The filtered scanline result. - The sum of the total variance of the filtered row - - - - The options for decoding png images - - - - - Gets a value indicating whether the metadata should be ignored when the image is being decoded. - - - - - The options available for manipulating the encoder pipeline. - - - - - Gets the number of bits per sample or per palette index (not per pixel). - Not all values are allowed for all values. - - - - - Gets the color type. - - - - - Gets the filter method. - - - - - Gets the compression level 1-9. - Defaults to . - - - - - Gets the threshold of characters in text metadata, when compression should be used. - - - - - Gets the gamma value, that will be written the image. - - The gamma value of the image. - - - - Gets the quantizer for reducing the color count. - - - - - Gets the transparency threshold. - - - - - Gets a value indicating whether this instance should write an Adam7 interlaced image. - - - - - Gets a value indicating whether the metadata should be ignored when the image is being encoded. - When set to true, all ancillary chunks will be skipped. - - - - - Gets the chunk filter method. This allows to filter ancillary chunks. - - - - - Gets a value indicating whether fully transparent pixels that may contain R, G, B values which are not 0, - should be converted to transparent black, which can yield in better compression in some cases. - - - - - Provides enumeration for the available PNG bit depths. - - - - - 1 bit per sample or per palette index (not per pixel). - - - - - 2 bits per sample or per palette index (not per pixel). - - - - - 4 bits per sample or per palette index (not per pixel). - - - - - 8 bits per sample or per palette index (not per pixel). - - - - - 16 bits per sample or per palette index (not per pixel). - - - - - Stores header information about a chunk. - - - - - Gets the length. - An unsigned integer giving the number of bytes in the chunk's - data field. The length counts only the data field, not itself, - the chunk type code, or the CRC. Zero is a valid length - - - - - Gets the chunk type. - The value is the equal to the UInt32BigEndian encoding of its 4 ASCII characters. - - - - - Gets the data bytes appropriate to the chunk type, if any. - This field can be of zero length or null. - - - - - Gets a value indicating whether the given chunk is critical to decoding - - - - - Provides enumeration of available PNG optimization methods. - - - - - With the None filter, all chunks will be written. - - - - - Excludes the physical dimension information chunk from encoding. - - - - - Excludes the gamma information chunk from encoding. - - - - - Excludes the eXIf chunk from encoding. - - - - - Excludes the tTXt, iTXt or zTXt chunk from encoding. - - - - - All ancillary chunks will be excluded. - - - - - Contains a list of chunk types. - - - - - The IDAT chunk contains the actual image data. The image can contains more - than one chunk of this type. All chunks together are the whole image. - - - - - This chunk must appear last. It marks the end of the PNG data stream. - The chunk's data field is empty. - - - - - The first chunk in a png file. Can only exists once. Contains - common information like the width and the height of the image or - the used compression method. - - - - - The PLTE chunk contains from 1 to 256 palette entries, each a three byte - series in the RGB format. - - - - - The eXIf data chunk which contains the Exif profile. - - - - - This chunk specifies the relationship between the image samples and the desired - display output intensity. - - - - - The pHYs chunk specifies the intended pixel size or aspect ratio for display of the image. - - - - - Textual information that the encoder wishes to record with the image can be stored in - tEXt chunks. Each tEXt chunk contains a keyword and a text string. - - - - - Textual information that the encoder wishes to record with the image. The zTXt and tEXt chunks are semantically equivalent, - but the zTXt chunk is recommended for storing large blocks of text. Each zTXt chunk contains a (uncompressed) keyword and - a compressed text string. - - - - - The iTXt chunk contains International textual data. It contains a keyword, an optional language tag, an optional translated keyword - and the actual text string, which can be compressed or uncompressed. - - - - - The tRNS chunk specifies that the image uses simple transparency: - either alpha values associated with palette entries (for indexed-color images) - or a single transparent color (for grayscale and true color images). - - - - - The tIME chunk gives the time of the last image modification (not the time of initial image creation). - - - - - The bKGD chunk specifies a default background colour to present the image against. - If there is any other preferred background, either user-specified or part of a larger page (as in a browser), - the bKGD chunk should be ignored. - - - - - The iCCP chunk contains a embedded color profile. If the iCCP chunk is present, - the image samples conform to the colour space represented by the embedded ICC profile as defined by the International Color Consortium. - - - - - The sBIT chunk defines the original number of significant bits (which can be less than or equal to the sample depth). - This allows PNG decoders to recover the original data losslessly even if the data had a sample depth not directly supported by PNG. - - - - - If the sRGB chunk is present, the image samples conform to the sRGB colour space [IEC 61966-2-1] and should be displayed - using the specified rendering intent defined by the International Color Consortium. - - - - - The hIST chunk gives the approximate usage frequency of each colour in the palette. - - - - - The sPLT chunk contains the suggested palette. - - - - - The cHRM chunk may be used to specify the 1931 CIE x,y chromaticities of the red, - green, and blue display primaries used in the image, and the referenced white point. - - - - - Malformed chunk named CgBI produced by apple, which is not conform to the specification. - Related issue is here https://github.com/SixLabors/ImageSharp/issues/410 - - - - - Provides enumeration of available PNG color types. - - - - - Each pixel is a grayscale sample. - - - - - Each pixel is an R,G,B triple. - - - - - Each pixel is a palette index; a PLTE chunk must appear. - - - - - Each pixel is a grayscale sample, followed by an alpha sample. - - - - - Each pixel is an R,G,B triple, followed by an alpha sample. - - - - - Provides enumeration of available PNG compression levels. - - - - - Level 0. Equivalent to . - - - - - No compression. Equivalent to . - - - - - Level 1. Equivalent to . - - - - - Best speed compression level. - - - - - Level 2. - - - - - Level 3. - - - - - Level 4. - - - - - Level 5. - - - - - Level 6. Equivalent to . - - - - - The default compression level. Equivalent to . - - - - - Level 7. - - - - - Level 8. - - - - - Level 9. Equivalent to . - - - - - Best compression level. Equivalent to . - - - - - Registers the image encoders, decoders and mime type detectors for the png format. - - - - - - - - Defines Png constants defined in the specification. - - - - - The character encoding to use when reading and writing textual data keywords and text - (Latin-1 ISO-8859-1). - - - - - The character encoding to use when reading and writing language tags within iTXt chunks - (ASCII 7bit). - - - - - The character encoding to use when reading and writing translated textual data keywords and text - (UTF8). - - - - - The list of mimetypes that equate to a Png. - - - - - The list of file extensions that equate to a Png. - - - - - The header bytes as a big-endian coded ulong. - - - - - The dictionary of available color types. - - - - - The maximum length of keyword in a text chunk is 79 bytes. - - - - - The minimum length of a keyword in a text chunk is 1 byte. - - - - - Gets the header bytes identifying a Png. - - - - - Decoder for generating an image out of a png encoded stream. - - - - - - - - - - - - - - - - - - - - - - - - - - Performs the png decoding operation. - - - - - Reusable buffer. - - - - - Gets or sets a value indicating whether the metadata should be ignored when the image is being decoded. - - - - - Used the manage memory allocations. - - - - - The stream to decode from. - - - - - The png header. - - - - - The number of bytes per pixel. - - - - - The number of bytes per sample. - - - - - The number of bytes per scanline. - - - - - The palette containing color information for indexed png's. - - - - - The palette containing alpha channel color information for indexed png's. - - - - - A value indicating whether the end chunk has been reached. - - - - - Previous scanline processed. - - - - - The current scanline that is being processed. - - - - - The index of the current scanline being processed. - - - - - The current number of bytes read in the current scanline. - - - - - Gets or sets the png color type. - - - - - The next chunk of data to return. - - - - - Initializes a new instance of the class. - - The configuration. - The decoder options. - - - - - - - Gets the dimensions of the image. - - - - - - - - - - - Reads the least significant bits from the byte pair with the others set to 0. - - The source buffer - THe offset - The - - - - Attempts to convert a byte array to a new array where each value in the original array is represented by the - specified number of bits. - - The bytes to convert from. Cannot be empty. - The number of bytes per scanline - The number of bits per value. - The new array. - The resulting array. - - - - Reads the data chunk containing physical dimension data. - - The metadata to read to. - The data containing physical data. - - - - Reads the data chunk containing gamma data. - - The metadata to read to. - The data containing physical data. - - - - Initializes the image and various buffers needed for processing - - The type the pixels will be - The metadata information for the image - The image that we will populate - - - - Calculates the correct number of bits per pixel for the given color type. - - The - - - - Calculates the correct number of bytes per pixel for the given color type. - - The - - - - Calculates the scanline length. - - The width of the row. - - The representing the length. - - - - - Reads the scanlines within the image. - - The pixel format. - The png chunk containing the compressed scanline data. - The pixel data. - The png metadata - - - - Decodes the raw pixel data row by row - - The pixel format. - The compressed pixel data stream. - The image to decode to. - The png metadata - - - - Decodes the raw interlaced pixel data row by row - - - The pixel format. - The compressed pixel data stream. - The current image. - The png metadata. - - - - Processes the de-filtered scanline filling the image pixel data - - The pixel format. - The de-filtered scanline - The image - The png metadata. - - - - Processes the interlaced de-filtered scanline filling the image pixel data - - The pixel format. - The de-filtered scanline - The current image row. - The png metadata. - The column start index. Always 0 for none interlaced images. - The column increment. Always 1 for none interlaced images. - - - - Decodes and assigns marker colors that identify transparent pixels in non indexed images. - - The alpha tRNS array. - The png metadata. - - - - Reads a header chunk from the data. - - The png metadata. - The containing data. - - - - Reads a text chunk containing image properties from the data. - - The metadata to decode to. - The containing the data. - - - - Reads the compressed text chunk. Contains a uncompressed keyword and a compressed text string. - - The metadata to decode to. - The containing the data. - - - - Reads a iTXt chunk, which contains international text data. It contains: - - A uncompressed keyword. - - Compression flag, indicating if a compression is used. - - Compression method. - - Language tag (optional). - - A translated keyword (optional). - - Text data, which is either compressed or uncompressed. - - The metadata to decode to. - The containing the data. - - - - Decompresses a byte array with zlib compressed text data. - - Compressed text data bytes. - The string encoding to use. - The uncompressed value. - The . - - - - Reads the next data chunk. - - Count of bytes in the next data chunk, or 0 if there are no more data chunks left. - - - - Reads a chunk from the stream. - - The image format chunk. - - The . - - - - - Validates the png chunk. - - The . - - - - Reads the cycle redundancy chunk from the data. - - - - - Skips the chunk data and the cycle redundancy chunk read from the data. - - The image format chunk. - - - - Reads the chunk data from the stream. - - The length of the chunk data to read. - - - - Identifies the chunk type from the chunk. - - - Thrown if the input stream is not valid. - - - - - Attempts to read the length of the next chunk. - - - Whether the length was read. - - - - - Tries to reads a text chunk keyword, which have some restrictions to be valid: - Keywords shall contain only printable Latin-1 characters and should not have leading or trailing whitespace. - See: https://www.w3.org/TR/PNG/#11zTXt - - The keyword bytes. - The name. - True, if the keyword could be read and is valid. - - - - Image encoder for writing image data to a stream in png format. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Encodes the image to the specified stream from the . - - The pixel format. - The to encode from. - The to encode the image data to. - - - - Encodes the image to the specified stream from the . - - The pixel format. - The to encode from. - The to encode the image data to. - The token to monitor for cancellation requests. - A representing the asynchronous operation. - - - - Performs the png encoding operation. - - - - - The maximum block size, defaults at 64k for uncompressed blocks. - - - - - Used the manage memory allocations. - - - - - The configuration instance for the decoding operation. - - - - - Reusable buffer for writing general data. - - - - - Reusable buffer for writing chunk data. - - - - - The encoder options - - - - - The bit depth. - - - - - Gets or sets a value indicating whether to use 16 bit encoding for supported color types. - - - - - The number of bytes per pixel. - - - - - The image width. - - - - - The image height. - - - - - The raw data of previous scanline. - - - - - The raw data of current scanline. - - - - - The common buffer for the filters. - - - - - The ext buffer for the sub filter, . - - - - - The ext buffer for the average filter, . - - - - - The ext buffer for the Paeth filter, . - - - - - Initializes a new instance of the class. - - The to use for buffer allocations. - The configuration. - The options for influencing the encoder - - - - Encodes the image to the specified stream from the . - - The pixel format. - The to encode from. - The to encode the image data to. - The token to request cancellation. - - - - - - - Convert transparent pixels, to transparent black pixels, which can yield to better compression in some cases. - - The type of the pixel. - The cloned image where the transparent pixels will be changed. - - - - Creates the quantized image and sets calculates and sets the bit depth. - - The type of the pixel. - The image to quantize. - Cloned image with transparent pixels are changed to black. - The quantized image. - - - Collects a row of grayscale pixels. - The pixel format. - The image row span. - - - - Collects a row of true color pixel data. - - The pixel format. - The row span. - - - - Encodes the pixel data line by line. - Each scanline is encoded in the most optimal manner to improve compression. - - The pixel format. - The row span. - The quantized pixels. Can be null. - The row. - - - - Apply filter for the raw scanline. - - - - - Encodes the pixel data line by line. - Each scanline is encoded in the most optimal manner to improve compression. - - The pixel format. - The row span. - The quantized pixels. Can be null. - The row. - The - - - - Encodes the indexed pixel data (with palette) for Adam7 interlaced mode. - - The row span. - - - - Applies all PNG filters to the given scanline and returns the filtered scanline that is deemed - to be most compressible, using lowest total variation as proxy for compressibility. - - The - - - - Writes the header chunk to the stream. - - The containing image data. - - - - Writes the palette chunk to the stream. - Should be written before the first IDAT chunk. - - The pixel format. - The containing image data. - The quantized frame. - - - - Writes the physical dimension information to the stream. - Should be written before IDAT chunk. - - The containing image data. - The image metadata. - - - - Writes the eXIf chunk to the stream, if any EXIF Profile values are present in the metadata. - - The containing image data. - The image metadata. - - - - Writes a text chunk to the stream. Can be either a tTXt, iTXt or zTXt chunk, - depending whether the text contains any latin characters or should be compressed. - - The containing image data. - The image metadata. - - - - Compresses a given text using Zlib compression. - - The text bytes to compress. - The compressed text byte array. - - - - Writes the gamma information to the stream. - Should be written before PLTE and IDAT chunk. - - The containing image data. - - - - Writes the transparency chunk to the stream. - Should be written after PLTE and before IDAT. - - The containing image data. - The image metadata. - - - - Writes the pixel information to the stream. - - The pixel format. - The image. - The quantized pixel data. Can be null. - The stream. - - - - Allocates the buffers for each scanline. - - The bytes per scanline. - Length of the result. - - - - Allocates the ext buffers for adaptive filter. - - - - - Encodes the pixels. - - The type of the pixel. - The pixels. - The quantized pixels span. - The deflate stream. - - - - Interlaced encoding the pixels. - - The type of the pixel. - The pixels. - The deflate stream. - - - - Interlaced encoding the quantized (indexed, with palette) pixels. - - The type of the pixel. - The quantized. - The deflate stream. - - - - Writes the chunk end to the stream. - - The containing image data. - - - - Writes a chunk to the stream. - - The to write to. - The type of chunk to write. - The containing data. - - - - Writes a chunk of a specified length to the stream at the given offset. - - The to write to. - The type of chunk to write. - The containing data. - The position to offset the data at. - The of the data to write. - - - - Calculates the scanline length. - - The width of the row. - - The representing the length. - - - - - The helper methods for class. - - - - - Packs the given 8 bit array into and array of depths. - - The source span in 8 bits. - The resultant span in . - The bit depth. - The scaling factor. - - - - The options structure for the . - - - - - Initializes a new instance of the class. - - The source. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - The helper methods for the PNG encoder options. - - - - - Adjusts the options based upon the given metadata. - - The options. - The PNG metadata. - if set to true [use16 bit]. - The bytes per pixel. - - - - Creates the quantized frame. - - The type of the pixel. - The options. - The image. - - - - Calculates the bit depth value. - - The type of the pixel. - The options. - The quantized frame. - - - - Calculates the correct number of bytes per pixel for the given color type. - - Bytes per pixel. - - - - Returns a suggested for the given - This is not exhaustive but covers many common pixel formats. - - - - - Returns a suggested for the given - This is not exhaustive but covers many common pixel formats. - - - - - Provides enumeration of available PNG filter methods. - - - - - With the None filter, the scanline is transmitted unmodified. - - - - - The Sub filter transmits the difference between each byte and the value of the corresponding - byte of the prior pixel. - - - - - The Up filter is just like the filter except that the pixel immediately above the current pixel, - rather than just to its left, is used as the predictor. - - - - - The Average filter uses the average of the two neighboring pixels (left and above) to predict the value of a pixel. - - - - - The Paeth filter computes a simple linear function of the three neighboring pixels (left, above, upper left), - then chooses as predictor the neighboring pixel closest to the computed value. - - - - - Computes the output scanline using all five filters, and selects the filter that gives the smallest sum of - absolute values of outputs. - This method usually outperforms any single fixed filter choice. - - - - - Registers the image encoders, decoders and mime type detectors for the png format. - - - - - Gets the current instance. - - - - - - - - - - - - - - - - - - - - Represents the png header chunk. - - - - - Gets the dimension in x-direction of the image in pixels. - - - - - Gets the dimension in y-direction of the image in pixels. - - - - - Gets the bit depth. - Bit depth is a single-byte integer giving the number of bits per sample - or per palette index (not per pixel). Valid values are 1, 2, 4, 8, and 16, - although not all values are allowed for all color types. - - - - - Gets the color type. - Color type is a integer that describes the interpretation of the - image data. Color type codes represent sums of the following values: - 1 (palette used), 2 (color used), and 4 (alpha channel used). - - - - - Gets the compression method. - Indicates the method used to compress the image data. At present, - only compression method 0 (deflate/inflate compression with a sliding - window of at most 32768 bytes) is defined. - - - - - Gets the preprocessing method. - Indicates the preprocessing method applied to the image - data before compression. At present, only filter method 0 - (adaptive filtering with five basic filter types) is defined. - - - - - Gets the transmission order. - Indicates the transmission order of the image data. - Two values are currently defined: 0 (no interlace) or 1 (Adam7 interlace). - - - - - Validates the png header. - - - Thrown if the image does pass validation. - - - - - Writes the header to the given buffer. - - The buffer to write to. - - - - Parses the PngHeader from the given data buffer. - - The data to parse. - The parsed PngHeader. - - - - Detects png file headers - - - - - - - - - - - Provides enumeration of available PNG interlace modes. - - - - - Non interlaced - - - - - Adam 7 interlacing. - - - - - Provides Png specific metadata information for the image. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The metadata to create an instance from. - - - - Gets or sets the number of bits per sample or per palette index (not per pixel). - Not all values are allowed for all values. - - - - - Gets or sets the color type. - - - - - Gets or sets a value indicating whether this instance should write an Adam7 interlaced image. - - - - - Gets or sets the gamma value for the image. - - - - - Gets or sets the Rgb24 transparent color. - This represents any color in an 8 bit Rgb24 encoded png that should be transparent. - - - - - Gets or sets the Rgb48 transparent color. - This represents any color in a 16 bit Rgb24 encoded png that should be transparent. - - - - - Gets or sets the 8 bit grayscale transparent color. - This represents any color in an 8 bit grayscale encoded png that should be transparent. - - - - - Gets or sets the 16 bit grayscale transparent color. - This represents any color in a 16 bit grayscale encoded png that should be transparent. - - - - - Gets or sets a value indicating whether the image contains a transparency chunk and markers were decoded. - - - - - Gets or sets the collection of text data stored within the iTXt, tEXt, and zTXt chunks. - Used for conveying textual information associated with the image. - - - - - - - - Provides methods to allow the decoding of raw scanlines to image rows of different pixel formats. - TODO: We should make this a stateful class or struct to reduce the number of arguments on methods (most are invariant). - - - - - Stores text data contained in the iTXt, tEXt, and zTXt chunks. - Used for conveying textual information associated with the image, like the name of the author, - the copyright information, the date, where the image was created, or some other information. - - - - - Initializes a new instance of the struct. - - The keyword of the property. - The value of the property. - An optional language tag. - A optional translated keyword. - - - - Gets the keyword of this which indicates - the type of information represented by the text string as described in https://www.w3.org/TR/PNG/#11keywords. - - - Typical properties are the author, copyright information or other meta information. - - - - - Gets the value of this . - - - - - Gets an optional language tag defined in https://www.w3.org/TR/PNG/#2-RFC-3066 indicates the human language used by the translated keyword and the text. - If the first word is two or three letters long, it is an ISO language code https://www.w3.org/TR/PNG/#2-ISO-639. - - - Examples: cn, en-uk, no-bok, x-klingon, x-KlInGoN. - - - - - Gets an optional translated keyword, should contain a translation of the keyword into the language indicated by the language tag. - - - - - Compares two objects. The result specifies whether the values - of the properties of the two objects are equal. - - - The on the left side of the operand. - - - The on the right side of the operand. - - - True if the current left is equal to the parameter; otherwise, false. - - - - - Compares two objects. The result specifies whether the values - of the properties of the two objects are unequal. - - - The on the left side of the operand. - - - The on the right side of the operand. - - - True if the current left is unequal to the parameter; otherwise, false. - - - - - Indicates whether this instance and a specified object are equal. - - - The object to compare with the current instance. - - - true if and this instance are the same type and represent the - same value; otherwise, false. - - - - - Returns the hash code for this instance. - - - A 32-bit signed integer that is the hash code for this instance. - - - - - Returns the fully qualified type name of this instance. - - - A containing a fully qualified type name. - - - - - Indicates whether the current object is equal to another object of the same type. - - - True if the current object is equal to the parameter; otherwise, false. - - An object to compare with this object. - - - - Cold path optimizations for throwing png format based exceptions. - - - - - Enum indicating how the transparency should be handled on encoding. - - - - - The transparency will be kept as is. - - - - - Converts fully transparent pixels that may contain R, G, B values which are not 0, - to transparent black, which can yield in better compression in some cases. - - - - - Calculates the 32 bit Adler checksum of a given buffer according to - RFC 1950. ZLIB Compressed Data Format Specification version 3.3) - - - - - The default initial seed value of a Adler32 checksum calculation. - - - - - Calculates the Adler32 checksum with the bytes taken from the span. - - The readonly span of bytes. - The . - - - - Calculates the Adler32 checksum with the bytes taken from the span and seed. - - The input Adler32 value. - The readonly span of bytes. - The . - - - - Calculates the 32 bit Cyclic Redundancy Check (CRC) checksum of a given buffer - according to the IEEE 802.3 specification. - - - Contains precalulated tables for scalar calculations. - - - - - The default initial seed value of a Crc32 checksum calculation. - - - - - Calculates the CRC checksum with the bytes taken from the span. - - The readonly span of bytes. - The . - - - - Calculates the CRC checksum with the bytes taken from the span and seed. - - The input CRC value. - The readonly span of bytes. - The . - - - - The table of all possible eight bit values for fast scalar lookup. - - - - - This class compresses input with the deflate algorithm described in RFC 1951. - It has several compression levels and three different strategies described below. - - - - - The best and slowest compression level. This tries to find very - long and distant string repetitions. - - - - - The worst but fastest compression level. - - - - - The default compression level. - - - - - This level won't compress at all but output uncompressed blocks. - - - - - The compression method. This is the only method supported so far. - There is no need to use this constant at all. - - - - - Compression level. - - - - - The current state. - - - - - Initializes a new instance of the class. - - The memory allocator to use for buffer allocations. - The compression level, a value between NoCompression and BestCompression. - - if level is out of range. - - - - Compression Level as an enum for safer use - - - - - The best and slowest compression level. This tries to find very - long and distant string repetitions. - - - - - The worst but fastest compression level. - - - - - The default compression level. - - - - - This level won't compress at all but output uncompressed blocks. - - - - - The compression method. This is the only method supported so far. - There is no need to use this constant at all. - - - - - Gets a value indicating whetherthe stream was finished and no more output bytes - are available. - - - - - Gets a value indicating whether the input buffer is empty. - You should then call setInput(). - NOTE: This method can also return true when the stream - was finished. - - - - - Resets the deflater. The deflater acts afterwards as if it was - just created with the same compression level and strategy as it - had before. - - - - - Flushes the current input block. Further calls to Deflate() will - produce enough output to inflate everything in the current input - block. It is used by DeflaterOutputStream to implement Flush(). - - - - - Finishes the deflater with the current input block. It is an error - to give more input after this method was called. This method must - be called to force all bytes to be flushed. - - - - - Sets the data which should be compressed next. This should be - only called when needsInput indicates that more input is needed. - The given byte array should not be changed, before needsInput() returns - true again. - - The buffer containing the input data. - The start of the data. - The number of data bytes of input. - - if the buffer was finished or if previous input is still pending. - - - - - Sets the compression level. There is no guarantee of the exact - position of the change, but if you call this when needsInput is - true the change of compression level will occur somewhere near - before the end of the so far given input. - - - the new compression level. - - - - - Deflates the current input block to the given array. - - Buffer to store the compressed data. - Offset into the output array. - The maximum number of bytes that may be stored. - - The number of compressed bytes added to the output, or 0 if either - or returns true or length is zero. - - - - - - - - This class contains constants used for deflation. - - - - - Set to true to enable debugging - - - - - Written to Zip file to identify a stored block - - - - - Identifies static tree in Zip file - - - - - Identifies dynamic tree in Zip file - - - - - Header flag indicating a preset dictionary for deflation - - - - - Sets internal buffer sizes for Huffman encoding - - - - - Internal compression engine constant - - - - - Internal compression engine constant - - - - - Internal compression engine constant - - - - - Internal compression engine constant - - - - - Internal compression engine constant - - - - - Internal compression engine constant - - - - - Internal compression engine constant - - - - - Internal compression engine constant - - - - - Internal compression engine constant - - - - - Internal compression engine constant - - - - - Internal compression engine constant - - - - - Internal compression engine constant - - - - - Internal compression engine constant - - - - - Internal compression engine constant - - - - - Internal compression engine constant - - - - - Internal compression engine constant - - - - - Internal compression engine constant - - - - - Internal compression engine constant - - - - - Internal compression engine constant - - - - - Internal compression engine constant - - - - - Internal compression engine constant - - - - - Strategies for deflater - - - - - The default strategy - - - - - This strategy will only allow longer string repetitions. It is - useful for random data with a small character set. - - - - - This strategy will not look for string repetitions at all. It - only encodes with Huffman trees (which means, that more common - characters get a smaller encoding. - - - - - Low level compression engine for deflate algorithm which uses a 32K sliding window - with secondary compression from Huffman/Shannon-Fano codes. - - - - - Points to the current character in the window. - - - - - lookahead is the number of characters starting at strstart in - window that are valid. - So window[strstart] until window[strstart+lookahead-1] are valid - characters. - - - - - The current compression function. - - - - - The input data for compression. - - - - - The offset into inputBuf, where input data starts. - - - - - The end offset of the input data. - - - - - Hashtable, hashing three characters to an index for window, so - that window[index]..window[index+2] have this hash code. - Note that the array should really be unsigned short, so you need - to and the values with 0xFFFF. - - - - - prev[index & WMASK] points to the previous index that has the - same hash code as the string starting at index. This way - entries with the same hash code are in a linked list. - Note that the array should really be unsigned short, so you need - to and the values with 0xFFFF. - - - - - This array contains the part of the uncompressed stream that - is of relevance. The current character is indexed by strstart. - - - - - Initializes a new instance of the class. - - The memory allocator to use for buffer allocations. - The deflate strategy to use. - - - - Gets the pending buffer to use. - - - - - Deflate drives actual compression of data - - True to flush input buffers - Finish deflation with the current input. - Returns true if progress has been made. - - - - Sets input data to be deflated. Should only be called when - returns true - - The buffer containing input data. - The offset of the first byte of data. - The number of bytes of data to use as input. - - - - Determines if more input is needed. - - Return true if input is needed via SetInput - - - - Reset internal state - - - - - Set the deflate level (0-9) - - The value to set the level to. - - - - Fill the window - - - - - - - - Inserts the current string in the head hash and returns the previous - value for this hash. - - The previous hash value - - - - - Find the best (longest) string in the window matching the - string starting at strstart. - - - Preconditions: - - strstart + DeflaterConstants.MAX_MATCH <= window.length. - - - The current match. - True if a match greater than the minimum length is found - - - - Performs Deflate Huffman encoding. - - - - - Initializes a new instance of the class. - - The memory allocator to use for buffer allocations. - - - - Gets the lengths of the bit length codes are sent in order of decreasing probability, to avoid transmitting the lengths for unused bit length codes. - - - - - Gets the pending buffer to use. - - - - - Reset internal state - - - - - Write all trees to pending buffer - - The number/rank of treecodes to send. - - - - Compress current buffer writing data to pending buffer - - - - - Flush block to output with no compression - - Data to write - Index of first byte to write - Count of bytes to write - True if this is the last block - - - - Flush block to output with compression - - Data to flush - Index of first byte to flush - Count of bytes to flush - True if this is the last block - - - - Get value indicating if internal buffer is full - - true if buffer is full - - - - Add literal to buffer - - Literal value to add to buffer. - Value indicating internal buffer is full - - - - Add distance code and length to literal and distance trees - - Distance code - Length - Value indicating if internal buffer is full - - - - Reverse the bits of a 16 bit value. - - Value to reverse bits - Value with bits reversed - - - - - - - Resets the internal state of the tree - - - - - Set static codes and length - - new codes - length for new codes - - - - Build dynamic codes and lengths - - - - - Get encoded length - - Encoded length, the sum of frequencies * lengths - - - - Scan a literal or distance tree to determine the frequencies of the codes - in the bit length tree. - - - - - Write the tree values. - - The pending buffer. - The tree to write. - - - - A special stream deflating or compressing the bytes that are - written to it. It uses a Deflater to perform actual deflating. - - - - - Initializes a new instance of the class. - - The memory allocator to use for buffer allocations. - The output stream where deflated output is written. - The compression level. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Stores pending data for writing data to the Deflater. - - - - - Initializes a new instance of the class. - - The memory allocator to use for buffer allocations. - - - - Gets the number of bits written to the buffer. - - - - - Gets a value indicating whether indicates the buffer has been flushed. - - - - - Clear internal state/buffers. - - - - - Write a short value to buffer LSB first. - - The value to write. - - - - Write a block of data to the internal buffer. - - The data to write. - The offset of first byte to write. - The number of bytes to write. - - - - Aligns internal buffer on a byte boundary. - - - - - Write bits to internal buffer - - source of bits - number of bits to write - - - - Write a short value to internal buffer most significant byte first - - The value to write - - - - Flushes the pending buffer into the given output array. - If the output array is to small, only a partial flush is done. - - The output array. - The offset into output array. - The maximum number of bytes to store. - The number of bytes flushed. - - - - - - - Provides methods and properties for compressing streams by using the Zlib Deflate algorithm. - - - - - The raw stream containing the uncompressed image data. - - - - - Computes the checksum for the data stream. - - - - - A value indicating whether this instance of the given entity has been disposed. - - if this instance has been disposed; otherwise, . - - If the entity is disposed, it must not be disposed a second - time. The isDisposed field is set the first time the entity - is disposed. If the isDisposed field is true, then the Dispose() - method will not dispose again. This help not to prolong the entity's - life in the Garbage Collector. - - - - - The stream responsible for compressing the input stream. - - - - - Initializes a new instance of the class. - - The memory allocator to use for buffer allocations. - The stream to compress. - The compression level. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Provides methods and properties for deframing streams from PNGs. - - - - - Used to read the Adler-32 and Crc-32 checksums. - We don't actually use this for anything so it doesn't - have to be threadsafe. - - - - - A default delegate to get more data from the inner stream. - - - - - The inner raw memory stream. - - - - - A value indicating whether this instance of the given entity has been disposed. - - if this instance has been disposed; otherwise, . - - If the entity is disposed, it must not be disposed a second - time. The isDisposed field is set the first time the entity - is disposed. If the isDisposed field is true, then the Dispose() - method will not dispose again. This help not to prolong the entity's - life in the Garbage Collector. - - - - - The current data remaining to be read. - - - - - Delegate to get more data once we've exhausted the current data remaining. - - - - - Initializes a new instance of the class. - - The inner raw stream. - - - - Initializes a new instance of the class. - - The inner raw stream. - A delegate to get more data from the inner stream. - - - - - - - - - - - - - - - - - - - Gets the compressed stream over the deframed inner stream. - - - - - Adds new bytes from a frame found in the original stream. - - The current remaining data according to the chunk length. - Whether the chunk to be inflated is a critical chunk. - The . - - - - - - - - - - - - - - - - - - - - - - - - - The options for decoding tga images. Currently empty, but this may change in the future. - - - - - Configuration options for use during tga encoding. - - - - - Gets the number of bits per pixel. - - - - - Gets a value indicating whether run length compression should be used. - - - - - Enumerates the available bits per pixel the tga encoder supports. - - - - - 8 bits per pixel. Each pixel consists of 1 byte. - - - - - 16 bits per pixel. Each pixel consists of 2 bytes. - - - - - 24 bits per pixel. Each pixel consists of 3 bytes. - - - - - 32 bits per pixel. Each pixel consists of 4 bytes. - - - - - Indicates if compression is used. - - - - - No compression is used. - - - - - Run length encoding is used. - - - - - Registers the image encoders, decoders and mime type detectors for the tga format. - - - - - - - - The list of mimetypes that equate to a targa file. - - - - - The list of file extensions that equate to a targa file. - - - - - The file header length of a tga image in bytes. - - - - - Image decoder for Truevision TGA images. - - - - - - - - - - - - - - - - - - - - - - - Performs the tga decoding operation. - - - - - A scratch buffer to reduce allocations. - - - - - The metadata. - - - - - The tga specific metadata. - - - - - The file header containing general information about the image. - - - - - Used for allocating memory during processing operations. - - - - - The stream to decode from. - - - - - The bitmap decoder options. - - - - - Indicates whether there is a alpha channel present. - - - - - Initializes a new instance of the class. - - The configuration. - The options. - - - - - - - Gets the dimensions of the image. - - - - - - - - Reads a uncompressed TGA image with a palette. - - The pixel type. - The width of the image. - The height of the image. - The to assign the palette to. - The color palette. - Color map size of one entry in bytes. - The image origin. - - - - Reads a run length encoded TGA image with a palette. - - The pixel type. - The width of the image. - The height of the image. - The to assign the palette to. - The color palette. - Color map size of one entry in bytes. - The image origin. - - - - Reads a uncompressed monochrome TGA image. - - The pixel type. - The width of the image. - The height of the image. - The to assign the palette to. - the image origin. - - - - Reads a uncompressed TGA image where each pixels has 16 bit. - - The pixel type. - The width of the image. - The height of the image. - The to assign the palette to. - The image origin. - - - - Reads a uncompressed TGA image where each pixels has 24 bit. - - The pixel type. - The width of the image. - The height of the image. - The to assign the palette to. - The image origin. - - - - Reads a uncompressed TGA image where each pixels has 32 bit. - - The pixel type. - The width of the image. - The height of the image. - The to assign the palette to. - The image origin. - - - - Reads a run length encoded TGA image. - - The pixel type. - The width of the image. - The height of the image. - The to assign the palette to. - The bytes per pixel. - The image origin. - - - - - - - Produce uncompressed tga data from a run length encoded stream. - - The width of the image. - The height of the image. - Buffer for uncompressed data. - The bytes used per pixel. - - - - Returns the y- value based on the given height. - - The y- value representing the current row. - The height of the image. - The image origin. - The representing the inverted value. - - - - Indicates whether the y coordinates needs to be inverted, to keep a top left origin. - - The image origin. - True, if y coordinate needs to be inverted. - - - - Returns the x- value based on the given width. - - The x- value representing the current column. - The width of the image. - The image origin. - The representing the inverted value. - - - - Indicates whether the x coordinates needs to be inverted, to keep a top left origin. - - The image origin. - True, if x coordinate needs to be inverted. - - - - Reads the tga file header from the stream. - - The containing image data. - The image origin. - - - - Image encoder for writing an image to a stream as a targa truevision image. - - - - - Gets or sets the number of bits per pixel. - - - - - Gets or sets a value indicating whether no compression or run length compression should be used. - - - - - - - - - - - Image encoder for writing an image to a stream as a truevision targa image. - - - - - Used for allocating memory during processing operations. - - - - - The global configuration. - - - - - Reusable buffer for writing data. - - - - - The color depth, in number of bits per pixel. - - - - - Indicates if run length compression should be used. - - - - - Initializes a new instance of the class. - - The encoder options. - The memory manager. - - - - Encodes the image to the specified stream from the . - - The pixel format. - The to encode from. - The to encode the image data to. - The token to request cancellation. - - - - Writes the pixel data to the binary stream. - - The pixel format. - The to write to. - - The containing pixel data. - - - - - Writes a run length encoded tga image to the stream. - - The pixel type. - The stream to write the image to. - The image to encode. - - - - Finds consecutive pixels which have the same value. - - The pixel type. - The pixels of the image. - X coordinate to start searching for the same pixels. - Y coordinate to start searching for the same pixels. - The number of equal pixels. - - - - Writes the 8bit pixels uncompressed to the stream. - - The pixel format. - The to write to. - The containing pixel data. - - - - Writes the 16bit pixels uncompressed to the stream. - - The pixel format. - The to write to. - The containing pixel data. - - - - Writes the 24bit pixels uncompressed to the stream. - - The pixel format. - The to write to. - The containing pixel data. - - - - Writes the 32bit pixels uncompressed to the stream. - - The pixel format. - The to write to. - The containing pixel data. - - - - Convert the pixel values to grayscale using ITU-R Recommendation BT.709. - - The pixel to get the luminance from. - - - - This block of bytes tells the application detailed information about the targa image. - - - - - - Defines the size of the data structure in the targa file. - - - - - Gets the id length. - This field identifies the number of bytes contained in Field 6, the Image ID Field. The maximum number - of characters is 255. A value of zero indicates that no Image ID field is included with the image. - - - - - Gets the color map type. - This field indicates the type of color map (if any) included with the image. There are currently 2 defined - values for this field: - 0 - indicates that no color-map data is included with this image. - 1 - indicates that a color-map is included with this image. - - - - - Gets the image type. - The TGA File Format can be used to store Pseudo-Color, True-Color and Direct-Color images of various - pixel depths. - - - - - Gets the start of the color map. - This field and its sub-fields describe the color map (if any) used for the image. If the Color Map Type field - is set to zero, indicating that no color map exists, then these 5 bytes should be set to zero. - - - - - Gets the total number of color map entries included. - - - - - Gets the number of bits per entry. Typically 15, 16, 24 or 32-bit values are used. - - - - - Gets the XOffset. - These bytes specify the absolute horizontal coordinate for the lower left - corner of the image as it is positioned on a display device having an - origin at the lower left of the screen. - - - - - Gets the YOffset. - These bytes specify the absolute vertical coordinate for the lower left - corner of the image as it is positioned on a display device having an - origin at the lower left of the screen. - - - - - Gets the width of the image in pixels. - - - - - Gets the height of the image in pixels. - - - - - Gets the number of bits per pixel. This number includes - the Attribute or Alpha channel bits. Common values are 8, 16, 24 and - 32 but other pixel depths could be used. - - - - - Gets the ImageDescriptor. - ImageDescriptor contains two pieces of information. - Bits 0 through 3 contain the number of attribute bits per pixel. - Attribute bits are found only in pixels for the 16- and 32-bit flavors of the TGA format and are called alpha channel, - overlay, or interrupt bits. Bits 4 and 5 contain the image origin location (coordinate 0,0) of the image. - This position may be any of the four corners of the display screen. - When both of these bits are set to zero, the image origin is the lower-left corner of the screen. - Bits 6 and 7 of the ImageDescriptor field are unused and should be set to 0. - - - - - Registers the image encoders, decoders and mime type detectors for the tga format. - - - - - Gets the current instance. - - - - - - - - - - - - - - - - - - - - Detects tga file headers. - - - - - - - - - - - Bottom left origin. - - - - - Bottom right origin. - - - - - Top left origin. - - - - - Top right origin. - - - - - Defines the tga image type. The TGA File Format can be used to store Pseudo-Color, - True-Color and Direct-Color images of various pixel depths. - - - - - No image data included. - - - - - Uncompressed, color mapped image. - - - - - Uncompressed true color image. - - - - - Uncompressed Black and white (grayscale) image. - - - - - Run length encoded, color mapped image. - - - - - Run length encoded, true color image. - - - - - Run length encoded, black and white (grayscale) image. - - - - - Extension methods for TgaImageType enum. - - - - - Checks if this tga image type is run length encoded. - - The tga image type. - True, if this image type is run length encoded, otherwise false. - - - - Checks, if the image type has valid value. - - The image type. - true, if its a valid tga image type. - - - - Provides TGA specific metadata information for the image. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The metadata to create an instance from. - - - - Gets or sets the number of bits per pixel. - - - - - Gets or sets the the number of alpha bits per pixel. - - - - - - - - Cold path optimization for throwing 's - - The error message for the exception. - - - - Cold path optimization for throwing 's - - The error message for the exception. - The exception that is the cause of the current exception, or a null reference - if no inner exception is specified. - - - - Cold path optimization for throwing 's - - The error message for the exception. - - - - Extension methods for the type. - - - Extension methods for the type. - - - Extension methods for the type. - - - Extension methods for the type. - - - Extension methods for the type. - - - - - Gets the bmp format specific metadata for the image. - - The metadata this method extends. - The . - - - - Gets the gif format specific metadata for the image. - - The metadata this method extends. - The . - - - - Gets the gif format specific metadata for the image frame. - - The metadata this method extends. - The . - - - - Gets the jpeg format specific metadata for the image. - - The metadata this method extends. - The . - - - - Gets the png format specific metadata for the image. - - The metadata this method extends. - The . - - - - Gets the tga format specific metadata for the image. - - The metadata this method extends. - The . - - - - Extension methods for the type. - - - Extension methods for the type. - - - Contains internal extensions for - - - - - Saves the image to the given stream with the Bmp format. - - The image this method extends. - The file path to save the image to. - Thrown if the path is null. - - - - Saves the image to the given stream with the Bmp format. - - The image this method extends. - The file path to save the image to. - Thrown if the path is null. - A representing the asynchronous operation. - - - - Saves the image to the given stream with the Bmp format. - - The image this method extends. - The file path to save the image to. - The token to monitor for cancellation requests. - Thrown if the path is null. - A representing the asynchronous operation. - - - - Saves the image to the given stream with the Bmp format. - - The image this method extends. - The file path to save the image to. - The encoder to save the image with. - Thrown if the path is null. - - - - Saves the image to the given stream with the Bmp format. - - The image this method extends. - The file path to save the image to. - The encoder to save the image with. - The token to monitor for cancellation requests. - Thrown if the path is null. - A representing the asynchronous operation. - - - - Saves the image to the given stream with the Bmp format. - - The image this method extends. - The stream to save the image to. - Thrown if the stream is null. - - - - Saves the image to the given stream with the Bmp format. - - The image this method extends. - The stream to save the image to. - The token to monitor for cancellation requests. - Thrown if the stream is null. - A representing the asynchronous operation. - - - - Saves the image to the given stream with the Bmp format. - - The image this method extends. - The stream to save the image to. - The encoder to save the image with. - Thrown if the stream is null. - A representing the asynchronous operation. - - - - Saves the image to the given stream with the Bmp format. - - The image this method extends. - The stream to save the image to. - The encoder to save the image with. - The token to monitor for cancellation requests. - Thrown if the stream is null. - A representing the asynchronous operation. - - - - Saves the image to the given stream with the Gif format. - - The image this method extends. - The file path to save the image to. - Thrown if the path is null. - - - - Saves the image to the given stream with the Gif format. - - The image this method extends. - The file path to save the image to. - Thrown if the path is null. - A representing the asynchronous operation. - - - - Saves the image to the given stream with the Gif format. - - The image this method extends. - The file path to save the image to. - The token to monitor for cancellation requests. - Thrown if the path is null. - A representing the asynchronous operation. - - - - Saves the image to the given stream with the Gif format. - - The image this method extends. - The file path to save the image to. - The encoder to save the image with. - Thrown if the path is null. - - - - Saves the image to the given stream with the Gif format. - - The image this method extends. - The file path to save the image to. - The encoder to save the image with. - The token to monitor for cancellation requests. - Thrown if the path is null. - A representing the asynchronous operation. - - - - Saves the image to the given stream with the Gif format. - - The image this method extends. - The stream to save the image to. - Thrown if the stream is null. - - - - Saves the image to the given stream with the Gif format. - - The image this method extends. - The stream to save the image to. - The token to monitor for cancellation requests. - Thrown if the stream is null. - A representing the asynchronous operation. - - - - Saves the image to the given stream with the Gif format. - - The image this method extends. - The stream to save the image to. - The encoder to save the image with. - Thrown if the stream is null. - A representing the asynchronous operation. - - - - Saves the image to the given stream with the Gif format. - - The image this method extends. - The stream to save the image to. - The encoder to save the image with. - The token to monitor for cancellation requests. - Thrown if the stream is null. - A representing the asynchronous operation. - - - - Saves the image to the given stream with the Jpeg format. - - The image this method extends. - The file path to save the image to. - Thrown if the path is null. - - - - Saves the image to the given stream with the Jpeg format. - - The image this method extends. - The file path to save the image to. - Thrown if the path is null. - A representing the asynchronous operation. - - - - Saves the image to the given stream with the Jpeg format. - - The image this method extends. - The file path to save the image to. - The token to monitor for cancellation requests. - Thrown if the path is null. - A representing the asynchronous operation. - - - - Saves the image to the given stream with the Jpeg format. - - The image this method extends. - The file path to save the image to. - The encoder to save the image with. - Thrown if the path is null. - - - - Saves the image to the given stream with the Jpeg format. - - The image this method extends. - The file path to save the image to. - The encoder to save the image with. - The token to monitor for cancellation requests. - Thrown if the path is null. - A representing the asynchronous operation. - - - - Saves the image to the given stream with the Jpeg format. - - The image this method extends. - The stream to save the image to. - Thrown if the stream is null. - - - - Saves the image to the given stream with the Jpeg format. - - The image this method extends. - The stream to save the image to. - The token to monitor for cancellation requests. - Thrown if the stream is null. - A representing the asynchronous operation. - - - - Saves the image to the given stream with the Jpeg format. - - The image this method extends. - The stream to save the image to. - The encoder to save the image with. - Thrown if the stream is null. - A representing the asynchronous operation. - - - - Saves the image to the given stream with the Jpeg format. - - The image this method extends. - The stream to save the image to. - The encoder to save the image with. - The token to monitor for cancellation requests. - Thrown if the stream is null. - A representing the asynchronous operation. - - - - Saves the image to the given stream with the Png format. - - The image this method extends. - The file path to save the image to. - Thrown if the path is null. - - - - Saves the image to the given stream with the Png format. - - The image this method extends. - The file path to save the image to. - Thrown if the path is null. - A representing the asynchronous operation. - - - - Saves the image to the given stream with the Png format. - - The image this method extends. - The file path to save the image to. - The token to monitor for cancellation requests. - Thrown if the path is null. - A representing the asynchronous operation. - - - - Saves the image to the given stream with the Png format. - - The image this method extends. - The file path to save the image to. - The encoder to save the image with. - Thrown if the path is null. - - - - Saves the image to the given stream with the Png format. - - The image this method extends. - The file path to save the image to. - The encoder to save the image with. - The token to monitor for cancellation requests. - Thrown if the path is null. - A representing the asynchronous operation. - - - - Saves the image to the given stream with the Png format. - - The image this method extends. - The stream to save the image to. - Thrown if the stream is null. - - - - Saves the image to the given stream with the Png format. - - The image this method extends. - The stream to save the image to. - The token to monitor for cancellation requests. - Thrown if the stream is null. - A representing the asynchronous operation. - - - - Saves the image to the given stream with the Png format. - - The image this method extends. - The stream to save the image to. - The encoder to save the image with. - Thrown if the stream is null. - A representing the asynchronous operation. - - - - Saves the image to the given stream with the Png format. - - The image this method extends. - The stream to save the image to. - The encoder to save the image with. - The token to monitor for cancellation requests. - Thrown if the stream is null. - A representing the asynchronous operation. - - - - Saves the image to the given stream with the Tga format. - - The image this method extends. - The file path to save the image to. - Thrown if the path is null. - - - - Saves the image to the given stream with the Tga format. - - The image this method extends. - The file path to save the image to. - Thrown if the path is null. - A representing the asynchronous operation. - - - - Saves the image to the given stream with the Tga format. - - The image this method extends. - The file path to save the image to. - The token to monitor for cancellation requests. - Thrown if the path is null. - A representing the asynchronous operation. - - - - Saves the image to the given stream with the Tga format. - - The image this method extends. - The file path to save the image to. - The encoder to save the image with. - Thrown if the path is null. - - - - Saves the image to the given stream with the Tga format. - - The image this method extends. - The file path to save the image to. - The encoder to save the image with. - The token to monitor for cancellation requests. - Thrown if the path is null. - A representing the asynchronous operation. - - - - Saves the image to the given stream with the Tga format. - - The image this method extends. - The stream to save the image to. - Thrown if the stream is null. - - - - Saves the image to the given stream with the Tga format. - - The image this method extends. - The stream to save the image to. - The token to monitor for cancellation requests. - Thrown if the stream is null. - A representing the asynchronous operation. - - - - Saves the image to the given stream with the Tga format. - - The image this method extends. - The stream to save the image to. - The encoder to save the image with. - Thrown if the stream is null. - A representing the asynchronous operation. - - - - Saves the image to the given stream with the Tga format. - - The image this method extends. - The stream to save the image to. - The encoder to save the image with. - The token to monitor for cancellation requests. - Thrown if the stream is null. - A representing the asynchronous operation. - - - - Writes the image to the given file path using an encoder detected from the path. - - The source image. - The file path to save the image to. - The path is null. - No encoder available for provided path. - - - - Writes the image to the given file path using an encoder detected from the path. - - The source image. - The file path to save the image to. - The token to monitor for cancellation requests. - The path is null. - No encoder available for provided path. - A representing the asynchronous operation. - - - - Writes the image to the given file path using the given image encoder. - - The source image. - The file path to save the image to. - The encoder to save the image with. - The path is null. - The encoder is null. - - - - Writes the image to the given file path using the given image encoder. - - The source image. - The file path to save the image to. - The encoder to save the image with. - The token to monitor for cancellation requests. - The path is null. - The encoder is null. - A representing the asynchronous operation. - - - - Writes the image to the given stream using the given image format. - - The source image. - The stream to save the image to. - The format to save the image in. - The stream is null. - The format is null. - The stream is not writable. - No encoder available for provided format. - - - - Writes the image to the given stream using the given image format. - - The source image. - The stream to save the image to. - The format to save the image in. - The token to monitor for cancellation requests. - The stream is null. - The format is null. - The stream is not writable. - No encoder available for provided format. - A representing the asynchronous operation. - - - - Returns a Base64 encoded string from the given image. - The result is prepended with a Data URI - - - For example: - - - - - The source image - The format. - The format is null. - The - - - - Locks the image providing access to the pixels. - - It is imperative that the accessor is correctly disposed off after use. - - - The type of the pixel. - The image. - - The - - - - - Utility class for common geometric functions. - - - - - Converts a degree (360-periodic) angle to a radian (2*Pi-periodic) angle. - - The angle in degrees. - - The representing the degree as radians. - - - - - Converts a radian (2*Pi-periodic) angle to a degree (360-periodic) angle. - - The angle in radians. - - The representing the degree as radians. - - - - - Adds extensions that allow the processing of images to the type. - - - - - Sets the default options against the image processing context. - - The image processing context to store default against. - The action to update instance of the default options used. - The passed in to allow chaining. - - - - Sets the default options against the configuration. - - The configuration to store default against. - The default options to use. - - - - Sets the default options against the image processing context. - - The image processing context to store default against. - The default options to use. - The passed in to allow chaining. - - - - Sets the default options against the configuration. - - The configuration to store default against. - The default options to use. - - - - Gets the default options against the image processing context. - - The image processing context to retrieve defaults from. - The globaly configued default options. - - - - Gets the default options against the image processing context. - - The configuration to retrieve defaults from. - The globaly configued default options. - - - - Options for influencing the drawing functions. - - - - - Initializes a new instance of the class. - - - - - Gets or sets a value indicating whether antialiasing should be applied. - Defaults to true. - - - - - Gets or sets a value indicating the number of subpixels to use while rendering with antialiasing enabled. - Defaults to 16. - - - - - Gets or sets a value between indicating the blending percentage to apply to the drawing operation. - Range 0..1; Defaults to 1. - - - - - Gets or sets a value indicating the color blending mode to apply to the drawing operation. - Defaults to . - - - - - Gets or sets a value indicating the alpha composition mode to apply to the drawing operation - Defaults to . - - - - - - - - Represents an interface that can register image encoders, decoders and image format detectors. - - - - - Called when loaded into a configuration object so the module can register items into the configuration. - - The configuration that will retain the encoders, decodes and mime type detectors. - - - - A generic interface for a deeply cloneable type. - - The type of object to clone. - - - - Creates a new that is a deep copy of the current instance. - - The . - - - - An interface for objects that can be cloned. This creates a deep copy of the object. - - - - - Creates a new object that is a deep copy of the current instance. - - The . - - - - Encapsulates the properties and methods that describe an image. - - - - - Encapsulates properties that describe basic image information including dimensions, pixel type information - and additional metadata. - - - - - Gets information about the image pixels. - - - - - Gets the width. - - - - - Gets the height. - - - - - Gets the metadata of the image. - - - - - Encapsulates an image, which consists of the pixel data for a graphics image and its attributes. - For the non-generic type, the pixel type is only known at runtime. - is always implemented by a pixel-specific instance. - - - Adds static methods allowing the decoding of new images. - - - Adds static methods allowing the creation of new image from a byte array. - - - Adds static methods allowing the creation of new image from a given file. - - - Adds static methods allowing the creation of new image from a given stream. - - - Adds static methods allowing the creation of new image from raw pixel data. - - - Adds static methods allowing wrapping an existing memory area as an image. - - - - - Initializes a new instance of the class. - - - The configuration which allows altering default behaviour or extending the library. - - The . - The . - The . - - - - Initializes a new instance of the class. - - - - - Gets the implementing the public property. - - - - - - - - - - - - - - - - - Gets the frames of the image as (non-generic) . - - - - - - - - - - - Saves the image to the given stream using the given image encoder. - - The stream to save the image to. - The encoder to save the image with. - Thrown if the stream or encoder is null. - - - - Saves the image to the given stream using the given image encoder. - - The stream to save the image to. - The encoder to save the image with. - The token to monitor for cancellation requests. - Thrown if the stream or encoder is null. - A representing the asynchronous operation. - - - - Returns a copy of the image in the given pixel format. - - The pixel format. - The - - - - Returns a copy of the image in the given pixel format. - - The pixel format. - The configuration providing initialization code which allows extending the library. - The . - - - - Update the size of the image after mutation. - - The . - - - - Disposes the object and frees resources for the Garbage Collector. - - Whether to dispose of managed and unmanaged objects. - - - - Throws if the image is disposed. - - - - - Accepts a . - Implemented by invoking - with the pixel type of the image. - - The visitor. - - - - Accepts a . - Implemented by invoking - with the pixel type of the image. - - The visitor. - The token to monitor for cancellation requests. - - - - Creates an instance backed by an uninitialized memory buffer. - This is an optimized creation method intended to be used by decoders. - The image might be filled with memory garbage. - - The pixel type - The - The width of the image - The height of the image - The - The result - - - - By reading the header on the provided stream this calculates the images format. - - The image stream to read the header from. - The configuration. - The mime type or null if none found. - - - - By reading the header on the provided stream this calculates the images format. - - The image stream to read the header from. - The configuration. - The mime type or null if none found. - - - - By reading the header on the provided stream this calculates the images format. - - The image stream to read the header from. - The configuration. - The IImageFormat. - The image format or null if none found. - - - - By reading the header on the provided stream this calculates the images format. - - The image stream to read the header from. - The configuration. - The decoder and the image format or null if none found. - - - - Decodes the image stream to the current image. - - The stream. - the configuration. - The pixel format. - - A new . - - - - - Decodes the image stream to the current image. - - The stream. - the configuration. - The token to monitor for cancellation requests. - The pixel format. - A representing the asynchronous operation. - - - - Reads the raw image information from the specified stream. - - The stream. - the configuration. - - The or null if a suitable info detector is not found. - - - - - Reads the raw image information from the specified stream. - - The stream. - the configuration. - The token to monitor for cancellation requests. - - A representing the asynchronous operation with the - property of the returned type set to null if a suitable detector - is not found. - - - - By reading the header on the provided byte array this calculates the images format. - - The byte array containing encoded image data to read the header from. - The data is null. - The format or null if none found. - - - - By reading the header on the provided byte array this calculates the images format. - - The configuration. - The byte array containing encoded image data to read the header from. - The configuration is null. - The data is null. - The mime type or null if none found. - - - - Reads the raw image information from the specified stream without fully decoding it. - - The byte array containing encoded image data to read the header from. - The data is null. - The data is not readable. - - The or null if suitable info detector not found. - - - - - Reads the raw image information from the specified stream without fully decoding it. - - The byte array containing encoded image data to read the header from. - The format type of the decoded image. - The data is null. - The data is not readable. - - The or null if suitable info detector not found. - - - - - Reads the raw image information from the specified stream without fully decoding it. - - The configuration. - The byte array containing encoded image data to read the header from. - The format type of the decoded image. - The configuration is null. - The data is null. - The data is not readable. - - The or null if suitable info detector is not found. - - - - - Load a new instance of from the given encoded byte array. - - The byte array containing image data. - The configuration is null. - The data is null. - A new . - - - - Load a new instance of from the given encoded byte array. - - The byte array containing encoded image data. - The pixel format. - The data is null. - Image format not recognised. - Image contains invalid content. - A new . - - - - Load a new instance of from the given encoded byte array. - - The byte array containing image data. - The mime type of the decoded image. - The pixel format. - The data is null. - Image format not recognised. - Image contains invalid content. - A new . - - - - Load a new instance of from the given encoded byte array. - - The configuration options. - The byte array containing encoded image data. - The pixel format. - The configuration is null. - The data is null. - Image format not recognised. - Image contains invalid content. - A new . - - - - Load a new instance of from the given encoded byte array. - - The configuration options. - The byte array containing encoded image data. - The of the decoded image. - The pixel format. - The configuration is null. - The data is null. - Image format not recognised. - Image contains invalid content. - A new . - - - - Load a new instance of from the given encoded byte array. - - The byte array containing encoded image data. - The decoder. - The pixel format. - The data is null. - Image format not recognised. - Image contains invalid content. - A new . - - - - Load a new instance of from the given encoded byte array. - - The Configuration. - The byte array containing encoded image data. - The decoder. - The pixel format. - The configuration is null. - The data is null. - Image format not recognised. - Image contains invalid content. - A new . - - - - By reading the header on the provided byte span this calculates the images format. - - The byte span containing encoded image data to read the header from. - The format or null if none found. - - - - By reading the header on the provided byte span this calculates the images format. - - The configuration. - The byte span containing encoded image data to read the header from. - The configuration is null. - The mime type or null if none found. - - - - Load a new instance of from the given encoded byte span. - - The byte span containing encoded image data. - The pixel format. - Image format not recognised. - Image contains invalid content. - A new . - - - - Load a new instance of from the given encoded byte span. - - The byte span containing image data. - The mime type of the decoded image. - The pixel format. - Image format not recognised. - Image contains invalid content. - A new . - - - - Load a new instance of from the given encoded byte span. - - The byte span containing encoded image data. - The decoder. - The pixel format. - Image format not recognised. - Image contains invalid content. - A new . - - - - Load a new instance of from the given encoded byte span. - - The configuration options. - The byte span containing encoded image data. - The pixel format. - The configuration is null. - Image format not recognised. - Image contains invalid content. - A new . - - - - Load a new instance of from the given encoded byte span. - - The Configuration. - The byte span containing image data. - The decoder. - The pixel format. - The configuration is null. - Image format not recognised. - Image contains invalid content. - A new . - - - - Load a new instance of from the given encoded byte span. - - The configuration options. - The byte span containing image data. - The of the decoded image. - The pixel format. - The configuration is null. - Image format not recognised. - Image contains invalid content. - A new . - - - - Load a new instance of from the given encoded byte array. - - The byte array containing image data. - The detected format. - The configuration is null. - The data is null. - Image format not recognised. - Image contains invalid content. - The . - - - - Load a new instance of from the given encoded byte array. - - The byte array containing encoded image data. - The decoder. - The data is null. - Image format not recognised. - Image contains invalid content. - The . - - - - Load a new instance of from the given encoded byte array. - - The configuration for the decoder. - The byte array containing encoded image data. - The configuration is null. - The data is null. - Image format not recognised. - Image contains invalid content. - The . - - - - Load a new instance of from the given encoded byte array. - - The configuration for the decoder. - The byte array containing image data. - The decoder. - The configuration is null. - The data is null. - Image format not recognised. - Image contains invalid content. - The . - - - - Load a new instance of from the given encoded byte array. - - The configuration for the decoder. - The byte array containing image data. - The mime type of the decoded image. - The configuration is null. - The data is null. - Image format not recognised. - Image contains invalid content. - The . - - - - Load a new instance of from the given encoded byte span. - - The byte span containing image data. - Image format not recognised. - Image contains invalid content. - The . - - - - Load a new instance of from the given encoded byte span. - - The byte span containing image data. - The decoder. - The data is null. - The decoder is null. - Image format not recognised. - Image contains invalid content. - The . - - - - Load a new instance of from the given encoded byte array. - - The byte span containing image data. - The detected format. - The decoder is null. - Image format not recognised. - Image contains invalid content. - The . - - - - Decodes a new instance of from the given encoded byte span. - - The configuration options. - The byte span containing image data. - The . - - - - Load a new instance of from the given encoded byte span. - - The Configuration. - The byte span containing image data. - The decoder. - The configuration is null. - The decoder is null. - The stream is not readable. - Image format not recognised. - Image contains invalid content. - The . - - - - Load a new instance of from the given encoded byte span. - - The configuration options. - The byte span containing image data. - The of the decoded image.> - The configuration is null. - Image format not recognised. - Image contains invalid content. - The . - - - - By reading the header on the provided file this calculates the images mime type. - - The image file to open and to read the header from. - The mime type or null if none found. - - - - By reading the header on the provided file this calculates the images mime type. - - The configuration. - The image file to open and to read the header from. - The configuration is null. - The mime type or null if none found. - - - - Reads the raw image information from the specified stream without fully decoding it. - - The image file to open and to read the header from. - - The or null if suitable info detector not found. - - - - - Reads the raw image information from the specified stream without fully decoding it. - - The image file to open and to read the header from. - The format type of the decoded image. - - The or null if suitable info detector not found. - - - - - Reads the raw image information from the specified stream without fully decoding it. - - The configuration. - The image file to open and to read the header from. - The format type of the decoded image. - The configuration is null. - - The or null if suitable info detector is not found. - - - - - Reads the raw image information from the specified stream without fully decoding it. - - The image file to open and to read the header from. - The token to monitor for cancellation requests. - The configuration is null. - - The representing the asynchronous operation with the parameter type - property set to null if suitable info detector is not found. - - - - - Reads the raw image information from the specified stream without fully decoding it. - - The configuration. - The image file to open and to read the header from. - The token to monitor for cancellation requests. - The configuration is null. - - The representing the asynchronous operation with the parameter type - property set to null if suitable info detector is not found. - - - - - Reads the raw image information from the specified stream without fully decoding it. - - The image file to open and to read the header from. - The token to monitor for cancellation requests. - The configuration is null. - - The representing the asynchronous operation with the parameter type - property set to null if suitable info detector is not found. - - - - - Reads the raw image information from the specified stream without fully decoding it. - - The configuration. - The image file to open and to read the header from. - The token to monitor for cancellation requests. - The configuration is null. - - The representing the asynchronous operation with the parameter type - property set to null if suitable info detector is not found. - - - - - Create a new instance of the class from the given file. - - The file path to the image. - - Thrown if the stream is not readable nor seekable. - - The . - - - - Create a new instance of the class from the given file. - - The file path to the image. - The mime type of the decoded image. - - Thrown if the stream is not readable nor seekable. - - A new . - - - - Create a new instance of the class from the given file. - - The configuration for the decoder. - The file path to the image. - The configuration is null. - The path is null. - Image format not recognised. - Image contains invalid content. - The . - - - - Create a new instance of the class from the given file. - - The configuration for the decoder. - The file path to the image. - The token to monitor for cancellation requests. - The configuration is null. - The path is null. - Image format not recognised. - Image contains invalid content. - A representing the asynchronous operation. - - - - Create a new instance of the class from the given file. - - The Configuration. - The file path to the image. - The decoder. - The configuration is null. - The path is null. - The decoder is null. - Image format not recognised. - Image contains invalid content. - The . - - - - Create a new instance of the class from the given file. - - The file path to the image. - The token to monitor for cancellation requests. - The configuration is null. - The path is null. - The decoder is null. - Image format not recognised. - Image contains invalid content. - A representing the asynchronous operation. - - - - Create a new instance of the class from the given file. - - The file path to the image. - The decoder. - The configuration is null. - The path is null. - The decoder is null. - Image format not recognised. - Image contains invalid content. - A representing the asynchronous operation. - - - - Create a new instance of the class from the given file. - - The file path to the image. - The decoder. - The configuration is null. - The path is null. - The decoder is null. - Image format not recognised. - Image contains invalid content. - The pixel format. - A representing the asynchronous operation. - - - - Create a new instance of the class from the given file. - - The Configuration. - The file path to the image. - The decoder. - The token to monitor for cancellation requests. - The configuration is null. - The path is null. - The decoder is null. - Image format not recognised. - Image contains invalid content. - A representing the asynchronous operation. - - - - Create a new instance of the class from the given file. - - The Configuration. - The file path to the image. - The decoder. - The token to monitor for cancellation requests. - The configuration is null. - The path is null. - The decoder is null. - Image format not recognised. - Image contains invalid content. - The pixel format. - A representing the asynchronous operation. - - - - Create a new instance of the class from the given file. - - The file path to the image. - The configuration is null. - The path is null. - Image format not recognised. - Image contains invalid content. - The pixel format. - A representing the asynchronous operation. - - - - Create a new instance of the class from the given file. - - The configuration for the decoder. - The file path to the image. - The token to monitor for cancellation requests. - The configuration is null. - The path is null. - Image format not recognised. - Image contains invalid content. - The pixel format. - A representing the asynchronous operation. - - - - Create a new instance of the class from the given file. - - The file path to the image. - The decoder. - The path is null. - The decoder is null. - Image format not recognised. - Image contains invalid content. - The . - - - - Create a new instance of the class from the given file. - - The file path to the image. - The path is null. - Image format not recognised. - Image contains invalid content. - The pixel format. - A new . - - - - Create a new instance of the class from the given file. - - The file path to the image. - The mime type of the decoded image. - The path is null. - Image format not recognised. - Image contains invalid content. - The pixel format. - A new . - - - - Create a new instance of the class from the given file. - - The configuration options. - The file path to the image. - The configuration is null. - The path is null. - Image format not recognised. - Image contains invalid content. - The pixel format. - A new . - - - - Create a new instance of the class from the given file. - - The configuration options. - The file path to the image. - The mime type of the decoded image. - The configuration is null. - The path is null. - Image format not recognised. - Image contains invalid content. - The pixel format. - A new . - - - - Create a new instance of the class from the given file. - The pixel type is selected by the decoder. - - The configuration options. - The file path to the image. - The mime type of the decoded image. - The configuration is null. - The path is null. - Image format not recognised. - Image contains invalid content. - A new . - - - - Create a new instance of the class from the given file. - - The file path to the image. - The decoder. - The path is null. - Image format not recognised. - Image contains invalid content. - The pixel format. - A new . - - - - Create a new instance of the class from the given file. - - The Configuration. - The file path to the image. - The decoder. - The configuration is null. - The path is null. - The decoder is null. - Image format not recognised. - Image contains invalid content. - The pixel format. - A new . - - - - By reading the header on the provided stream this calculates the images format type. - - The image stream to read the header from. - The stream is null. - The stream is not readable. - The format type or null if none found. - - - - By reading the header on the provided stream this calculates the images format type. - - The configuration. - The image stream to read the header from. - The configuration is null. - The stream is null. - The stream is not readable. - The format type or null if none found. - - - - By reading the header on the provided stream this calculates the images format type. - - The image stream to read the header from. - The stream is null. - The stream is not readable. - A representing the asynchronous operation or null if none is found. - - - - By reading the header on the provided stream this calculates the images format type. - - The configuration. - The image stream to read the header from. - The configuration is null. - The stream is null. - The stream is not readable. - A representing the asynchronous operation. - - - - Reads the raw image information from the specified stream without fully decoding it. - - The image stream to read the header from. - The stream is null. - The stream is not readable. - Image contains invalid content. - - The or null if a suitable info detector is not found. - - - - - Reads the raw image information from the specified stream without fully decoding it. - - The image stream to read the header from. - The stream is null. - The stream is not readable. - Image contains invalid content. - - A representing the asynchronous operation or null if - a suitable detector is not found. - - - - - Reads the raw image information from the specified stream without fully decoding it. - - The image stream to read the header from. - The format type of the decoded image. - The stream is null. - The stream is not readable. - Image contains invalid content. - - The or null if a suitable info detector is not found. - - - - - Reads the raw image information from the specified stream without fully decoding it. - - The configuration. - The image stream to read the information from. - The configuration is null. - The stream is null. - The stream is not readable. - Image contains invalid content. - - The or null if a suitable info detector is not found. - - - - - Reads the raw image information from the specified stream without fully decoding it. - - The configuration. - The image stream to read the information from. - The token to monitor for cancellation requests. - The configuration is null. - The stream is null. - The stream is not readable. - Image contains invalid content. - - A representing the asynchronous operation or null if - a suitable detector is not found. - - - - - Reads the raw image information from the specified stream without fully decoding it. - - The configuration. - The image stream to read the information from. - The format type of the decoded image. - The configuration is null. - The stream is null. - The stream is not readable. - Image contains invalid content. - - The or null if a suitable info detector is not found. - - - - - Reads the raw image information from the specified stream without fully decoding it. - - The image stream to read the information from. - The token to monitor for cancellation requests. - The configuration is null. - The stream is null. - The stream is not readable. - Image contains invalid content. - - The representing the asynchronous operation with the parameter type - property set to null if suitable info detector is not found. - - - - - Reads the raw image information from the specified stream without fully decoding it. - - The configuration. - The image stream to read the information from. - The token to monitor for cancellation requests. - The configuration is null. - The stream is null. - The stream is not readable. - Image contains invalid content. - - The representing the asynchronous operation with the parameter type - property set to null if suitable info detector is not found. - - - - - Decode a new instance of the class from the given stream. - The pixel format is selected by the decoder. - - The stream containing image information. - The format type of the decoded image. - The stream is null. - The stream is not readable. - Image format not recognised. - Image contains invalid content. - The . - - - - Decode a new instance of the class from the given stream. - The pixel format is selected by the decoder. - - The stream containing image information. - The stream is null. - The stream is not readable. - Image format not recognised. - Image contains invalid content. - A representing the asynchronous operation. - - - - Decode a new instance of the class from the given stream. - The pixel format is selected by the decoder. - - The stream containing image information. - The stream is null. - The stream is not readable. - Image format not recognised. - Image contains invalid content. - The . - - - - Decode a new instance of the class from the given stream. - The pixel format is selected by the decoder. - - The stream containing image information. - The stream is null. - The stream is not readable. - Image format not recognised. - Image contains invalid content. - A representing the asynchronous operation. - - - - Decode a new instance of the class from the given stream. - The pixel format is selected by the decoder. - - The stream containing image information. - The decoder. - The stream is null. - The decoder is null. - The stream is not readable. - Image format not recognised. - Image contains invalid content. - The . - - - - Decode a new instance of the class from the given stream. - The pixel format is selected by the decoder. - - The stream containing image information. - The decoder. - The stream is null. - The decoder is null. - The stream is not readable. - Image format not recognised. - Image contains invalid content. - A representing the asynchronous operation. - - - - Decode a new instance of the class from the given stream. - The pixel format is selected by the decoder. - - The configuration for the decoder. - The stream containing image information. - The decoder. - The configuration is null. - The stream is null. - The decoder is null. - The stream is not readable. - Image format not recognised. - Image contains invalid content. - A new . - - - - Decode a new instance of the class from the given stream. - The pixel format is selected by the decoder. - - The configuration for the decoder. - The stream containing image information. - The decoder. - The token to monitor for cancellation requests. - The configuration is null. - The stream is null. - The decoder is null. - The stream is not readable. - Image format not recognised. - Image contains invalid content. - A representing the asynchronous operation. - - - - Decode a new instance of the class from the given stream. - - The configuration for the decoder. - The stream containing image information. - The configuration is null. - The stream is null. - The stream is not readable. - Image format not recognised. - Image contains invalid content. - A new . - - - - Decode a new instance of the class from the given stream. - - The configuration for the decoder. - The stream containing image information. - The token to monitor for cancellation requests. - The configuration is null. - The stream is null. - The stream is not readable. - Image format not recognised. - Image contains invalid content. - A representing the asynchronous operation. - - - - Create a new instance of the class from the given stream. - - The stream containing image information. - The stream is null. - The stream is not readable. - Image format not recognised. - Image contains invalid content. - The pixel format. - A new . - - - - Create a new instance of the class from the given stream. - - The stream containing image information. - The stream is null. - The stream is not readable. - Image format not recognised. - Image contains invalid content. - The pixel format. - A representing the asynchronous operation. - - - - Create a new instance of the class from the given stream. - - The stream containing image information. - The format type of the decoded image. - The stream is null. - The stream is not readable. - Image format not recognised. - Image contains invalid content. - The pixel format. - A new . - - - - Create a new instance of the class from the given stream. - - The stream containing image information. - The stream is null. - The stream is not readable. - Image format not recognised. - Image contains invalid content. - The pixel format. - A representing the asynchronous operation. - - - - Create a new instance of the class from the given stream. - - The stream containing image information. - The decoder. - The stream is null. - The stream is not readable. - Image format not recognised. - Image contains invalid content. - The pixel format. - A new . - - - - Create a new instance of the class from the given stream. - - The stream containing image information. - The decoder. - The token to monitor for cancellation requests. - The stream is null. - The stream is not readable. - Image format not recognised. - Image contains invalid content. - The pixel format. - A representing the asynchronous operation. - - - - Create a new instance of the class from the given stream. - - The Configuration. - The stream containing image information. - The decoder. - The configuration is null. - The stream is null. - The stream is not readable. - Image format not recognised. - Image contains invalid content. - The pixel format. - A new . - - - - Create a new instance of the class from the given stream. - - The Configuration. - The stream containing image information. - The decoder. - The token to monitor for cancellation requests. - The configuration is null. - The stream is null. - The stream is not readable. - Image format not recognised. - Image contains invalid content. - The pixel format. - A representing the asynchronous operation. - - - - Create a new instance of the class from the given stream. - - The configuration options. - The stream containing image information. - The configuration is null. - The stream is null. - The stream is not readable. - Image format not recognised. - Image contains invalid content. - The pixel format. - A new . - - - - Create a new instance of the class from the given stream. - - The configuration options. - The stream containing image information. - The format type of the decoded image. - The configuration is null. - The stream is null. - The stream is not readable. - Image format not recognised. - Image contains invalid content. - The pixel format. - A representing the asynchronous operation. - - - - Create a new instance of the class from the given stream. - - The configuration options. - The stream containing image information. - The token to monitor for cancellation requests. - The configuration is null. - The stream is null. - The stream is not readable. - Image format not recognised. - Image contains invalid content. - A representing the asynchronous operation. - - - - Create a new instance of the class from the given stream. - - The configuration options. - The stream containing image information. - The token to monitor for cancellation requests. - The configuration is null. - The stream is null. - The stream is not readable. - Image format not recognised. - Image contains invalid content. - The pixel format. - A representing the asynchronous operation. - - - - Create a new instance of the class from the given stream. - - The configuration options. - The stream containing image information. - The token to monitor for cancellation requests. - The configuration is null. - The stream is null. - The stream is not readable. - Image format not recognised. - Image contains invalid content. - The pixel format. - A representing the asynchronous operation. - - - - Decode a new instance of the class from the given stream. - The pixel format is selected by the decoder. - - The configuration options. - The stream containing image information. - The format type of the decoded image. - The configuration is null. - The stream is null. - The stream is not readable. - Image format not recognised. - Image contains invalid content. - A new . - - - - Performs the given action against the stream ensuring that it is seekable. - - The type of object returned from the action. - The configuration. - The input stream. - The action to perform. - The . - - - - Performs the given action asynchronously against the stream ensuring that it is seekable. - - The type of object returned from the action. - The configuration. - The input stream. - The action to perform. - The cancellation token. - The . - - - - Create a new instance of the class from the raw data. - - The byte array containing image data. - The width of the final image. - The height of the final image. - The pixel format. - The data length is incorrect. - A new . - - - - Create a new instance of the class from the raw data. - - The byte array containing image data. - The width of the final image. - The height of the final image. - The pixel format. - The data length is incorrect. - A new . - - - - Create a new instance of the class from the given byte array in format. - - The byte array containing image data. - The width of the final image. - The height of the final image. - The pixel format. - The data length is incorrect. - A new . - - - - Create a new instance of the class from the given byte array in format. - - The byte array containing image data. - The width of the final image. - The height of the final image. - The pixel format. - The data length is incorrect. - A new . - - - - Create a new instance of the class from the given byte array in format. - - The configuration for the decoder. - The byte array containing image data. - The width of the final image. - The height of the final image. - The pixel format. - The configuration is null. - The data length is incorrect. - A new . - - - - Create a new instance of the class from the given byte array in format. - - The configuration for the decoder. - The byte array containing image data. - The width of the final image. - The height of the final image. - The pixel format. - The configuration is null. - The data length is incorrect. - A new . - - - - Create a new instance of the class from the raw data. - - The configuration for the decoder. - The Span containing the image Pixel data. - The width of the final image. - The height of the final image. - The pixel format. - The configuration is null. - The data length is incorrect. - A new . - - - - Create a new instance of the class from the raw data. - - The configuration for the decoder. - The Span containing the image Pixel data. - The width of the final image. - The height of the final image. - The configuration is null. - The data length is incorrect. - The pixel format. - A new . - - - - - Wraps an existing contiguous memory area of at least 'width' x 'height' pixels allowing viewing/manipulation as - an instance. - - - Please note: using this method does not transfer the ownership of the underlying buffer of the input - to the new instance. This means that consumers of this method must ensure that the input buffer - is either self-contained, (for example, a instance wrapping a new array that was - created), or that the owning object is not disposed until the returned is disposed. - - - If the input instance is one retrieved from an instance - rented from a memory pool (such as ), and that owning instance is disposed while the image is still - in use, this will lead to undefined behavior and possibly runtime crashes (as the same buffer might then be modified by other - consumers while the returned image is still working on it). Make sure to control the lifetime of the input buffers appropriately. - - - The pixel type - The - The pixel memory. - The width of the memory image. - The height of the memory image. - The . - The configuration is null. - The metadata is null. - An instance - - - - - Wraps an existing contiguous memory area of at least 'width' x 'height' pixels allowing viewing/manipulation as - an instance. - - - Please note: using this method does not transfer the ownership of the underlying buffer of the input - to the new instance. This means that consumers of this method must ensure that the input buffer - is either self-contained, (for example, a instance wrapping a new array that was - created), or that the owning object is not disposed until the returned is disposed. - - - If the input instance is one retrieved from an instance - rented from a memory pool (such as ), and that owning instance is disposed while the image is still - in use, this will lead to undefined behavior and possibly runtime crashes (as the same buffer might then be modified by other - consumers while the returned image is still working on it). Make sure to control the lifetime of the input buffers appropriately. - - - The pixel type - The - The pixel memory. - The width of the memory image. - The height of the memory image. - The configuration is null. - An instance. - - - - - Wraps an existing contiguous memory area of at least 'width' x 'height' pixels allowing viewing/manipulation as - an instance. - - - Please note: using this method does not transfer the ownership of the underlying buffer of the input - to the new instance. This means that consumers of this method must ensure that the input buffer - is either self-contained, (for example, a instance wrapping a new array that was - created), or that the owning object is not disposed until the returned is disposed. - - - If the input instance is one retrieved from an instance - rented from a memory pool (such as ), and that owning instance is disposed while the image is still - in use, this will lead to undefined behavior and possibly runtime crashes (as the same buffer might then be modified by other - consumers while the returned image is still working on it). Make sure to control the lifetime of the input buffers appropriately. - - - The pixel type. - The pixel memory. - The width of the memory image. - The height of the memory image. - An instance. - - - - Wraps an existing contiguous memory area of at least 'width' x 'height' pixels, - allowing to view/manipulate it as an instance. - The ownership of the is being transferred to the new instance, - meaning that the caller is not allowed to dispose . - It will be disposed together with the result image. - - The pixel type - The - The that is being transferred to the image - The width of the memory image. - The height of the memory image. - The - The configuration is null. - The metadata is null. - An instance - - - - Wraps an existing contiguous memory area of at least 'width' x 'height' pixels, - allowing to view/manipulate it as an instance. - The ownership of the is being transferred to the new instance, - meaning that the caller is not allowed to dispose . - It will be disposed together with the result image. - - The pixel type. - The - The that is being transferred to the image. - The width of the memory image. - The height of the memory image. - The configuration is null. - An instance - - - - Wraps an existing contiguous memory area of at least 'width' x 'height' pixels, - allowing to view/manipulate it as an instance. - The ownership of the is being transferred to the new instance, - meaning that the caller is not allowed to dispose . - It will be disposed together with the result image. - - The pixel type - The that is being transferred to the image. - The width of the memory image. - The height of the memory image. - An instance. - - - - - Wraps an existing contiguous memory area of at least 'width' x 'height' pixels allowing viewing/manipulation as - an instance. - - - Please note: using this method does not transfer the ownership of the underlying buffer of the input - to the new instance. This means that consumers of this method must ensure that the input buffer - is either self-contained, (for example, a instance wrapping a new array that was - created), or that the owning object is not disposed until the returned is disposed. - - - If the input instance is one retrieved from an instance - rented from a memory pool (such as ), and that owning instance is disposed while the image is still - in use, this will lead to undefined behavior and possibly runtime crashes (as the same buffer might then be modified by other - consumers while the returned image is still working on it). Make sure to control the lifetime of the input buffers appropriately. - - - The pixel type - The - The byte memory representing the pixel data. - The width of the memory image. - The height of the memory image. - The . - The configuration is null. - The metadata is null. - An instance - - - - - Wraps an existing contiguous memory area of at least 'width' x 'height' pixels allowing viewing/manipulation as - an instance. - - - Please note: using this method does not transfer the ownership of the underlying buffer of the input - to the new instance. This means that consumers of this method must ensure that the input buffer - is either self-contained, (for example, a instance wrapping a new array that was - created), or that the owning object is not disposed until the returned is disposed. - - - If the input instance is one retrieved from an instance - rented from a memory pool (such as ), and that owning instance is disposed while the image is still - in use, this will lead to undefined behavior and possibly runtime crashes (as the same buffer might then be modified by other - consumers while the returned image is still working on it). Make sure to control the lifetime of the input buffers appropriately. - - - The pixel type - The - The byte memory representing the pixel data. - The width of the memory image. - The height of the memory image. - The configuration is null. - An instance. - - - - - Wraps an existing contiguous memory area of at least 'width' x 'height' pixels allowing viewing/manipulation as - an instance. - - - Please note: using this method does not transfer the ownership of the underlying buffer of the input - to the new instance. This means that consumers of this method must ensure that the input buffer - is either self-contained, (for example, a instance wrapping a new array that was - created), or that the owning object is not disposed until the returned is disposed. - - - If the input instance is one retrieved from an instance - rented from a memory pool (such as ), and that owning instance is disposed while the image is still - in use, this will lead to undefined behavior and possibly runtime crashes (as the same buffer might then be modified by other - consumers while the returned image is still working on it). Make sure to control the lifetime of the input buffers appropriately. - - - The pixel type. - The byte memory representing the pixel data. - The width of the memory image. - The height of the memory image. - An instance. - - - - - Wraps an existing contiguous memory area of at least 'width' x 'height' pixels allowing viewing/manipulation as - an instance. - - - Please note: this method relies on callers to carefully manage the target memory area being referenced by the - pointer and that the lifetime of such a memory area is at least equal to that of the returned - instance. For example, if the input pointer references an unmanaged memory area, - callers must ensure that the memory area is not freed as long as the returned is - in use and not disposed. The same applies if the input memory area points to a pinned managed object, as callers - must ensure that objects will remain pinned as long as the instance is in use. - Failing to do so constitutes undefined behavior and will likely lead to memory corruption and runtime crashes. - - - Note also that if you have a or an array (which can be cast to ) of - either or values, it is highly recommended to use one of the other - available overloads of this method instead (such as - or , to make the resulting code less error - prone and avoid having to pin the underlying memory buffer in use. This method is primarily meant to be used when - doing interop or working with buffers that are located in unmanaged memory. - - - The pixel type - The - The pointer to the target memory buffer to wrap. - The width of the memory image. - The height of the memory image. - The . - The configuration is null. - The metadata is null. - An instance - - - - - Wraps an existing contiguous memory area of at least 'width' x 'height' pixels allowing viewing/manipulation as - an instance. - - - Please note: this method relies on callers to carefully manage the target memory area being referenced by the - pointer and that the lifetime of such a memory area is at least equal to that of the returned - instance. For example, if the input pointer references an unmanaged memory area, - callers must ensure that the memory area is not freed as long as the returned is - in use and not disposed. The same applies if the input memory area points to a pinned managed object, as callers - must ensure that objects will remain pinned as long as the instance is in use. - Failing to do so constitutes undefined behavior and will likely lead to memory corruption and runtime crashes. - - - Note also that if you have a or an array (which can be cast to ) of - either or values, it is highly recommended to use one of the other - available overloads of this method instead (such as - or , to make the resulting code less error - prone and avoid having to pin the underlying memory buffer in use. This method is primarily meant to be used when - doing interop or working with buffers that are located in unmanaged memory. - - - The pixel type - The - The pointer to the target memory buffer to wrap. - The width of the memory image. - The height of the memory image. - The configuration is null. - An instance. - - - - - Wraps an existing contiguous memory area of at least 'width' x 'height' pixels allowing viewing/manipulation as - an instance. - - - Please note: this method relies on callers to carefully manage the target memory area being referenced by the - pointer and that the lifetime of such a memory area is at least equal to that of the returned - instance. For example, if the input pointer references an unmanaged memory area, - callers must ensure that the memory area is not freed as long as the returned is - in use and not disposed. The same applies if the input memory area points to a pinned managed object, as callers - must ensure that objects will remain pinned as long as the instance is in use. - Failing to do so constitutes undefined behavior and will likely lead to memory corruption and runtime crashes. - - - Note also that if you have a or an array (which can be cast to ) of - either or values, it is highly recommended to use one of the other - available overloads of this method instead (such as - or , to make the resulting code less error - prone and avoid having to pin the underlying memory buffer in use. This method is primarily meant to be used when - doing interop or working with buffers that are located in unmanaged memory. - - - The pixel type. - The pointer to the target memory buffer to wrap. - The width of the memory image. - The height of the memory image. - An instance. - - - - Represents a pixel-agnostic image frame containing all pixel data and . - In case of animated formats like gif, it contains the single frame in a animation. - In all other cases it is the only frame of the image. - - - Contains methods for loading raw pixel data. - - - - - Initializes a new instance of the class. - - The configuration which allows altering default behaviour or extending the library. - The frame width. - The frame height. - The . - - - - Gets the width. - - - - - Gets the height. - - - - - Gets the metadata of the frame. - - - - - - - - Gets the size of the frame. - - The - - - - Gets the bounds of the frame. - - The - - - - - - - Disposes the object and frees resources for the Garbage Collector. - - Whether to dispose of managed and unmanaged objects. - - - - Updates the size of the image frame. - - - - - Create a new instance of the class from the given byte array in format. - - The configuration which allows altering default behaviour or extending the library. - The byte array containing image data. - The width of the final image. - The height of the final image. - The pixel format. - A new . - - - - Create a new instance of the class from the raw data. - - The configuration which allows altering default behaviour or extending the library. - The Span containing the image Pixel data. - The width of the final image. - The height of the final image. - The pixel format. - A new . - - - - Encapsulates a pixel-agnostic collection of instances - that make up an . - - - - - Gets the number of frames. - - - - - Gets the root frame. - - - - - Gets the root frame. (Implements .) - - - - - Gets the at the specified index. - - - The . - - The index. - The at the specified index. - - - - Determines the index of a specific in the . - - The to locate in the . - The index of item if found in the list; otherwise, -1. - - - - Clones and inserts the into the at the specified . - - The zero-based index to insert the frame at. - The to clone and insert into the . - Frame must have the same dimensions as the image. - The cloned . - - - - Clones the frame and appends the clone to the end of the collection. - - The raw pixel data to generate the from. - The cloned . - - - - Removes the frame at the specified index and frees all freeable resources associated with it. - - The zero-based index of the frame to remove. - Cannot remove last frame. - - - - Determines whether the contains the . - - The frame. - - true if the contains the specified frame; otherwise, false. - - - - - Moves an from to . - - The zero-based index of the frame to move. - The index to move the frame to. - - - - Removes the frame at the specified index and creates a new image with only the removed frame - with the same metadata as the original image. - - The zero-based index of the frame to export. - Cannot remove last frame. - The new with the specified frame. - - - - Creates an with only the frame at the specified index - with the same metadata as the original image. - - The zero-based index of the frame to clone. - The new with the specified frame. - - - - Creates a new and appends it to the end of the collection. - - - The new . - - - - - Creates a new and appends it to the end of the collection. - - The background color to initialize the pixels with. - - The new . - - - - - - - - - - - Implements . - - The enumerator. - - - - Implements the getter of the indexer. - - The index. - The frame. - - - - Implements . - - The index. - The frame. - The new frame. - - - - Implements . - - The frame. - The new frame. - - - - Implements . - - The index. - The new image. - - - - Implements . - - The index. - The new image. - - - - Implements . - - The new frame. - - - - Implements . - - The background color. - The new frame. - - - - Encapsulates a pixel-specific collection of instances - that make up an . - - The type of the pixel. - - - - Gets the number of frames. - - - - - Gets the root frame. - - - - - - - - Gets the at the specified index. - - - The . - - The index. - The at the specified index. - - - - - - - Determines the index of a specific in the . - - The to locate in the . - The index of item if found in the list; otherwise, -1. - - - - Clones and inserts the into the at the specified . - - The zero-based index to insert the frame at. - The to clone and insert into the . - Frame must have the same dimensions as the image. - The cloned . - - - - Clones the frame and appends the clone to the end of the collection. - - The raw pixel data to generate the from. - The cloned . - - - - Creates a new frame from the pixel data with the same dimensions as the other frames and inserts the - new frame at the end of the collection. - - The raw pixel data to generate the from. - The new . - - - - Creates a new frame from the pixel data with the same dimensions as the other frames and inserts the - new frame at the end of the collection. - - The raw pixel data to generate the from. - The new . - - - - Removes the frame at the specified index and frees all freeable resources associated with it. - - The zero-based index of the frame to remove. - Cannot remove last frame. - - - - - - - Determines whether the contains the . - - The frame. - - true if the contains the specified frame; otherwise, false. - - - - - Moves an from to . - - The zero-based index of the frame to move. - The index to move the frame to. - - - - Removes the frame at the specified index and creates a new image with only the removed frame - with the same metadata as the original image. - - The zero-based index of the frame to export. - Cannot remove last frame. - The new with the specified frame. - - - - Creates an with only the frame at the specified index - with the same metadata as the original image. - - The zero-based index of the frame to clone. - The new with the specified frame. - - - - Creates a new and appends it to the end of the collection. - - - The new . - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Creates a new and appends it to the end of the collection. - - The background color to initialize the pixels with. - - The new . - - - - - - - - - - - Represents a pixel-specific image frame containing all pixel data and . - In case of animated formats like gif, it contains the single frame in a animation. - In all other cases it is the only frame of the image. - - The pixel format. - - - - Initializes a new instance of the class. - - The configuration which allows altering default behaviour or extending the library. - The width of the image in pixels. - The height of the image in pixels. - - - - Initializes a new instance of the class. - - The configuration which allows altering default behaviour or extending the library. - The of the frame. - The metadata. - - - - Initializes a new instance of the class. - - The configuration which allows altering default behaviour or extending the library. - The width of the image in pixels. - The height of the image in pixels. - The metadata. - - - - Initializes a new instance of the class. - - The configuration which allows altering default behaviour or extending the library. - The width of the image in pixels. - The height of the image in pixels. - The color to clear the image with. - - - - Initializes a new instance of the class. - - The configuration which allows altering default behaviour or extending the library. - The width of the image in pixels. - The height of the image in pixels. - The color to clear the image with. - The metadata. - - - - Initializes a new instance of the class wrapping an existing buffer. - - The configuration providing initialization code which allows extending the library. - The width of the image in pixels. - The height of the image in pixels. - The memory source. - - - - Initializes a new instance of the class wrapping an existing buffer. - - The configuration providing initialization code which allows extending the library. - The width of the image in pixels. - The height of the image in pixels. - The memory source. - The metadata. - - - - Initializes a new instance of the class. - - The configuration which allows altering default behaviour or extending the library. - The source. - - - - Gets the image pixels. Not private as Buffer2D requires an array in its constructor. - - - - - - - - Gets or sets the pixel at the specified position. - - The x-coordinate of the pixel. Must be greater than or equal to zero and less than the width of the image. - The y-coordinate of the pixel. Must be greater than or equal to zero and less than the height of the image. - The at the specified position. - Thrown when the provided (x,y) coordinates are outside the image boundary. - - - - Gets the representation of the pixels as a of contiguous memory - at row beginning from the first pixel on that row. - - The row. - The - Thrown when row index is out of range. - - - - Gets the representation of the pixels as a in the source image's pixel format - stored in row major order, if the backing buffer is contiguous. - - The . - The . - - - - Gets a reference to the pixel at the specified position. - - The x-coordinate of the pixel. Must be greater than or equal to zero and less than the width of the image. - The y-coordinate of the pixel. Must be greater than or equal to zero and less than the height of the image. - The at the specified position. - - - - Copies the pixels to a of the same size. - - The target pixel buffer accessor. - - - - Switches the buffers used by the image and the pixelSource meaning that the Image will "own" the buffer from the pixelSource and the pixelSource will now own the Images buffer. - - The pixel source. - - - - - - - - - - Clones the current instance. - - The - - - - Clones the current instance. - - The configuration providing initialization code which allows extending the library. - The - - - - Returns a copy of the image frame in the given pixel format. - - The pixel format. - The - - - - Returns a copy of the image frame in the given pixel format. - - The pixel format. - The configuration providing initialization code which allows extending the library. - The - - - - Clears the bitmap. - - The value to initialize the bitmap with. - - - - A implementing the clone logic for . - - - - - - - - Contains information about the image including dimensions, pixel type information and additional metadata - - - - - Initializes a new instance of the class. - - The image pixel type information. - The width of the image in pixels. - The height of the image in pixels. - The images metadata. - - - - - - - - - - - - - - - - Extension methods that allow the addition of geometry calculating methods to the type - - - - - Gets the bounds of the image. - - The image info - The - - - - Gets the bounds of the image. - - The image info - The - - - - Encapsulates an image, which consists of the pixel data for a graphics image and its attributes. - For generic -s the pixel type is known at compile time. - - The pixel format. - - - - Initializes a new instance of the class - with the height and the width of the image. - - The configuration providing initialization code which allows extending the library. - The width of the image in pixels. - The height of the image in pixels. - - - - Initializes a new instance of the class - with the height and the width of the image. - - The configuration providing initialization code which allows extending the library. - The width of the image in pixels. - The height of the image in pixels. - The color to initialize the pixels with. - - - - Initializes a new instance of the class - with the height and the width of the image. - - The width of the image in pixels. - The height of the image in pixels. - The color to initialize the pixels with. - - - - Initializes a new instance of the class - with the height and the width of the image. - - The width of the image in pixels. - The height of the image in pixels. - - - - Initializes a new instance of the class - with the height and the width of the image. - - The configuration providing initialization code which allows extending the library. - The width of the image in pixels. - The height of the image in pixels. - The images metadata. - - - - Initializes a new instance of the class - wrapping an external . - - The configuration providing initialization code which allows extending the library. - The memory source. - The width of the image in pixels. - The height of the image in pixels. - The images metadata. - - - - Initializes a new instance of the class - with the height and the width of the image. - - The configuration providing initialization code which allows extending the library. - The width of the image in pixels. - The height of the image in pixels. - The color to initialize the pixels with. - The images metadata. - - - - Initializes a new instance of the class - with the height and the width of the image. - - The configuration providing initialization code which allows extending the library. - The images metadata. - The frames that will be owned by this image instance. - - - - - - - Gets the collection of image frames. - - - - - Gets the root frame. - - - - - Gets or sets the pixel at the specified position. - - The x-coordinate of the pixel. Must be greater than or equal to zero and less than the width of the image. - The y-coordinate of the pixel. Must be greater than or equal to zero and less than the height of the image. - The at the specified position. - Thrown when the provided (x,y) coordinates are outside the image boundary. - - - - Gets the representation of the pixels as a of contiguous memory - at row beginning from the first pixel on that row. - - The row. - The - Thrown when row index is out of range. - - - - Gets the representation of the pixels as a in the source image's pixel format - stored in row major order, if the backing buffer is contiguous. - - The . - The . - - - - Clones the current image - - Returns a new image with all the same metadata as the original. - - - - Clones the current image with the given configuration. - - The configuration providing initialization code which allows extending the library. - Returns a new with all the same pixel data as the original. - - - - Returns a copy of the image in the given pixel format. - - The pixel format. - The configuration providing initialization code which allows extending the library. - The . - - - - - - - - - - - - - - - - - - - Switches the buffers used by the image and the pixelSource meaning that the Image will "own" the buffer from the pixelSource and the pixelSource will now own the Images buffer. - - The pixel source. - - - - A pixel-specific image frame where each pixel buffer value represents an index in a color palette. - - The pixel format. - - - - Initializes a new instance of the class. - - - The configuration which allows altering default behaviour or extending the library. - - The frame width. - The frame height. - The color palette. - - - - Gets the configuration which allows altering default behaviour or extending the library. - - - - - Gets the width of this . - - - - - Gets the height of this . - - - - - Gets the color palette of this . - - - - - - - - Gets the representation of the pixels as a of contiguous memory - at row beginning from the first pixel on that row. - - The row index in the pixel buffer. - The pixel row as a . - - - - - Gets the representation of the pixels as a of contiguous memory - at row beginning from the first pixel on that row. - - - Note: Values written to this span are not sanitized against the palette length. - Care should be taken during assignment to prevent out-of-bounds errors. - - - The row index in the pixel buffer. - The pixel row as a . - - - - - - - A readonly stream that add a secondary level buffer in addition to native stream - buffered reading to reduce the overhead of small incremental reads. - - - - - Initializes a new instance of the class. - - The configuration which allows altering default behaviour or extending the library. - The input stream. - - - - Gets the size, in bytes, of the underlying buffer. - - - - - - - - - - - - - - - - - - - - Gets the underlying stream. - - - - - - - - - - - - - - - - - - This operation is not supported in . - - - - - - This operation is not supported in . - - - - - - - - Provides an in-memory stream composed of non-contiguous chunks that doesn't need to be resized. - Chunks are allocated by the assigned via the constructor - and is designed to take advantage of buffer pooling when available. - - - - - The default length in bytes of each buffer chunk. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The length, in bytes of each buffer chunk. - The memory allocator. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Copy entire buffer into an array. - - The . - - - - Write remainder of this stream to another stream. - - The stream to write to. - - - - A simple interface representing the filesystem. - - - - - Returns a readable stream as defined by the path. - - Path to the file to open. - A stream representing the file to open. - - - - Creates or opens a file and returns it as a writable stream as defined by the path. - - Path to the file to open. - A stream representing the file to open. - - - - A wrapper around the local File apis. - - - - - - - - - - - Options for allocating buffers. - - - - - Indicates that the buffer should just be allocated. - - - - - Indicates that the allocated buffer should be cleaned following allocation. - - - - - Contains and . - - - Contains common factory methods and configuration constants. - - - Implements by allocating memory from . - - - - - The buffer implementation of . - - - - - The length of the buffer. - - - - - A weak reference to the source pool. - - - By using a weak reference here, we are making sure that array pools and their retained arrays are always GC-ed - after a call to , regardless of having buffer instances still being in use. - - - - - Gets the buffer as a byte array. - - - - - - - - - - - The implementation of . - - - - - - - - The default value for: maximum size of pooled arrays in bytes. - Currently set to 24MB, which is equivalent to 8 megapixels of raw RGBA32 data. - - - - - The value for: The threshold to pool arrays in which has less buckets for memory safety. - - - - - The default bucket count for . - - - - - The default bucket count for . - - - - - This is the default. Should be good for most use cases. - - The memory manager. - - - - For environments with very limited memory capabilities, only small buffers like image rows are pooled. - - The memory manager. - - - - For environments with limited memory capabilities, only small array requests are pooled, which can result in reduced throughput. - - The memory manager. - - - - For environments where memory capabilities are not an issue, the maximum amount of array requests are pooled which results in optimal throughput. - - The memory manager. - - - - The for small-to-medium buffers which is not kept clean. - - - - - The for huge buffers, which is not kept clean. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The maximum size of pooled arrays. Arrays over the thershold are gonna be always allocated. - - - - Initializes a new instance of the class. - - The maximum size of pooled arrays. Arrays over the thershold are gonna be always allocated. - Arrays over this threshold will be pooled in which has less buckets for memory safety. - - - - Initializes a new instance of the class. - - The maximum size of pooled arrays. Arrays over the thershold are gonna be always allocated. - The threshold to pool arrays in which has less buckets for memory safety. - Max arrays per bucket for the large array pool. - Max arrays per bucket for the normal array pool. - - - - Initializes a new instance of the class. - - The maximum size of pooled arrays. Arrays over the thershold are gonna be always allocated. - The threshold to pool arrays in which has less buckets for memory safety. - Max arrays per bucket for the large array pool. - Max arrays per bucket for the normal array pool. - The length of the largest contiguous buffer that can be handled by this allocator instance. - - - - Gets the maximum size of pooled arrays in bytes. - - - - - Gets the threshold to pool arrays in which has less buckets for memory safety. - - - - - Gets the length of the largest contiguous buffer that can be handled by this allocator instance. - - - - - - - - - - - - - - - - - Represents a byte buffer backed by a managed array. Useful for interop with classic .NET API-s. - - - - - Gets the managed array backing this buffer instance. - - - - - Wraps an array as an instance. - - - - - - Initializes a new instance of the class. - - The array. - The length of the buffer. - - - - Initializes a new instance of the class. - - The array. - - - - Gets the array. - - - - - Gets the length. - - - - - - - - - - - - - - Provides an based on . - - - - - Initializes a new instance of the class. - - The byte array. - - - - Provides a base class for implementations by implementing pinning logic for adaption. - - The element type. - - - - - - - - - - Gets the object that should be pinned. - - The pinnable . - - - - Memory managers are used to allocate memory for image processing operations. - - - - - Gets the length of the largest contiguous buffer that can be handled by this allocator instance in bytes. - - The length of the largest contiguous buffer that can be handled by this allocator instance. - - - - Allocates an , holding a of length . - - Type of the data stored in the buffer. - Size of the buffer to allocate. - The allocation options. - A buffer of values of type . - When length is zero or negative. - When length is over the capacity of the allocator. - - - - Allocates an . - - The requested buffer length. - The allocation options. - The . - When length is zero or negative. - When length is over the capacity of the allocator. - - - - Releases all retained resources not being in use. - Eg: by resetting array pools and letting GC to free the arrays. - - - - - Implements by newing up managed arrays on every allocation request. - - - - - - - - - - - - - - Defines extension methods for . - - - - - Gets the backing . - - The buffer. - The element type. - The MemoryGroup. - - - - TODO: Does not work with multi-buffer groups, should be specific to Resize. - Copy columns of inplace, - from positions starting at to positions at . - - - - - Returns a representing the full area of the buffer. - - The element type - The - The - - - - Return a to the subregion represented by 'rectangle' - - The element type - The - The rectangle subregion - The - - - - Return a to the whole area of 'buffer' - - The element type - The - The - - - - Returns the size of the buffer. - - The element type - The - The of the buffer - - - - Represents a rectangular region inside a 2D memory buffer (). - - The element type. - - - - Initializes a new instance of the struct. - - The . - The defining a rectangular area within the buffer. - - - - Initializes a new instance of the struct. - - The . - - - - Gets the rectangle specifying the boundaries of the area in . - - - - - Gets the being pointed by this instance. - - - - - Gets the width - - - - - Gets the height - - - - - Gets the pixel stride which is equal to the width of . - - - - - Gets the size of the area. - - - - - Gets a value indicating whether the area refers to the entire - - - - - Gets or sets a value at the given index. - - The position inside a row - The row index - The reference to the value - - - - Gets a span to row 'y' inside this area. - - The row index - The span - - - - Returns a subregion as . (Similar to .) - - The x index at the subregion origin. - The y index at the subregion origin. - The desired width of the subregion. - The desired height of the subregion. - The subregion - - - - Returns a subregion as . (Similar to .) - - The specifying the boundaries of the subregion - The subregion - - - - Gets a reference to the [0,0] element. - - The reference to the [0,0] element - - - - Represents a buffer of value type objects - interpreted as a 2D region of x elements. - - - Before RC1, this class might be target of API changes, use it on your own risk! - - The value type. - - - - Initializes a new instance of the class. - - The to wrap. - The number of elements in a row. - The number of rows. - - - - Gets the width. - - - - - Gets the height. - - - - - Gets the backing . - - The MemoryGroup. - - - - Gets the backing without the view abstraction. - - - This property has been kept internal intentionally. - It's public counterpart is , - which only exposes the view of the MemoryGroup. - - - - - Gets a reference to the element at the specified position. - - The x coordinate (row) - The y coordinate (position at row) - A reference to the element. - When index is out of range of the buffer. - - - - Disposes the instance - - - - - Gets a to the row 'y' beginning from the pixel at the first pixel on that row. - - - This method does not validate the y argument for performance reason, - is being propagated from lower levels. - - The row index. - The of the pixels in the row. - Thrown when row index is out of range. - - - - Gets a to the row 'y' beginning from the pixel at the first pixel on that row. - This method is intended for internal use only, since it does not use the indirection provided by - . - - The y (row) coordinate. - The . - - - - Gets a to the row 'y' beginning from the pixel at the first pixel on that row. - - The y (row) coordinate. - The . - - - - Gets a to the backing data if the backing group consists of a single contiguous memory buffer. - Throws otherwise. - - The referencing the memory area. - - Thrown when the backing group is discontiguous. - - - - - Gets a to the backing data of if the backing group consists of a single contiguous memory buffer. - Throws otherwise. - - The . - - Thrown when the backing group is discontiguous. - - - - - Swaps the contents of 'destination' with 'source' if the buffers are owned (1), - copies the contents of 'source' to 'destination' otherwise (2). Buffers should be of same size in case 2! - - - - - A custom that can wrap of instances - and cast them to be for any arbitrary unmanaged value type. - - The value type to use when casting the wrapped instance. - - - - The wrapped of instance. - - - - - Initializes a new instance of the class. - - The of instance to wrap. - - - - - - - - - - - - - - - - Represents discontiguous group of multiple uniformly-sized memory segments. - The last segment can be smaller than the preceding ones. - - The element type. - - - - Gets the number of elements per contiguous sub-buffer preceding the last buffer. - The last buffer is allowed to be smaller. - - - - - Gets the aggregate number of elements in the group. - - - - - Gets a value indicating whether the group has been invalidated. - - - Invalidation usually occurs when an image processor capable to alter the image dimensions replaces - the image buffers internally. - - - - - Returns a value-type implementing an allocation-free enumerator of the memory groups in the current - instance. The return type shouldn't be used directly: just use a block on - the instance in use and the C# compiler will automatically invoke this - method behind the scenes. This method takes precedence over the - implementation, which is still available when casting to one of the underlying interfaces. - - A new instance mapping the current values in use. - - - - A value-type enumerator for instances. - - The element type. - - - - - - - - - - Returns a slice that is expected to be within the bounds of a single buffer. - Otherwise is thrown. - - - - - Implements , defining a view for - rather than owning the segments. - - - This type provides an indirection, protecting the users of publicly exposed memory API-s - from internal memory-swaps. Whenever an internal swap happens, the - instance becomes invalid, throwing an exception on all operations. - - The element type. - - - - - - - - - - - - - Represents discontinuous group of multiple uniformly-sized memory segments. - The underlying buffers may change with time, therefore it's not safe to expose them directly on - and . - - The element type. - - - - A implementation that consumes the underlying memory buffers. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Creates a new memory group, allocating it's buffers with the provided allocator. - - The to use. - The total length of the buffer. - The expected alignment (eg. to make sure image rows fit into single buffers). - The . - A new . - Thrown when 'blockAlignment' converted to bytes is greater than the buffer capacity of the allocator. - - - - Swaps the contents of 'target' with 'source' if the buffers are allocated (1), - copies the contents of 'source' to 'target' otherwise (2). - Groups should be of same TotalLength in case 2. - - - - - A implementation that owns the underlying memory buffers. - - - - - - - - - - - Exception thrown when the library detects an invalid memory allocation request, - or an attempt has been made to use an invalidated . - - - - - Initializes a new instance of the class. - - The exception message text. - - - - Initializes a new instance of the class. - - - - - Extension methods for . - - - - - Allocates a buffer of value type objects interpreted as a 2D region - of x elements. - - The type of buffer items to allocate. - The memory allocator. - The buffer width. - The buffer height. - The allocation options. - The . - - - - Allocates a buffer of value type objects interpreted as a 2D region - of width x height elements. - - The type of buffer items to allocate. - The memory allocator. - The buffer size. - The allocation options. - The . - - - - Allocates padded buffers for BMP encoder/decoder. (Replacing old PixelRow/PixelArea). - - The . - Pixel count in the row - The pixel size in bytes, eg. 3 for RGB. - The padding. - A . - - - - Allocates a . - - The to use. - The total length of the buffer. - The expected alignment (eg. to make sure image rows fit into single buffers). - The . - A new . - Thrown when 'blockAlignment' converted to bytes is greater than the buffer capacity of the allocator. - - - - Extension methods for - - - - - Gets a from an instance. - - The buffer - The - - - - Gets the length of an internal buffer. - - The buffer - The length of the buffer - - - - Gets a to an offsetted position inside the buffer. - - The buffer - The start - The - - - - Gets a to an offsetted position inside the buffer. - - The buffer - The start - The length of the slice - The - - - - Clears the contents of this buffer. - - The buffer - - - - Gets a reference to the first item in the internal buffer for an instance. - - The buffer - A reference to the first item within the memory wrapped by - - - - Represents an interval of rows in a and/or - - - Before RC1, this class might be target of API changes, use it on your own risk! - - - - - Initializes a new instance of the struct. - - The inclusive minimum row. - The exclusive maximum row. - - - - Gets the inclusive minimum row. - - - - - Gets the exclusive maximum row. - - - - - Gets the difference ( - ). - - - - - Returns a boolean indicating whether the given two -s are equal. - - The first to compare. - The second to compare. - True if the given -s are equal; False otherwise. - - - - Returns a boolean indicating whether the given two -s are not equal. - - The first to compare. - The second to compare. - True if the given -s are not equal; False otherwise. - - - - - - - - - - - - - - - - A custom that can wrap a rawpointer to a buffer of a specified type. - - The value type to use when casting the wrapped instance. - This manager doesn't own the memory buffer that it points to. - - - - The pointer to the memory buffer. - - - - - The length of the memory area. - - - - - Initializes a new instance of the class. - - The pointer to the memory buffer. - The length of the memory area. - - - - - - - - - - - - - - - - Enumerated frame process modes to apply to multi-frame images. - - - - - Decodes all the frames of a multi-frame image. - - - - - Decodes only the first frame of a multi-frame image. - - - - - Encapsulates the metadata of an image frame. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - by making a copy from other metadata. - - - The other to create this instance from. - - - - - - - - Gets the metadata value associated with the specified key. - - The type of format metadata. - The type of format frame metadata. - The key of the value to get. - - The . - - - - - Encapsulates the metadata of an image. - - - - - The default horizontal resolution value (dots per inch) in x direction. - The default value is 96 . - - - - - The default vertical resolution value (dots per inch) in y direction. - The default value is 96 . - - - - - The default pixel resolution units. - The default value is . - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - by making a copy from other metadata. - - - The other to create this instance from. - - - - - Gets or sets the resolution of the image in x- direction. - It is defined as the number of dots per inch and should be an positive value. - - The density of the image in x- direction. - - - - Gets or sets the resolution of the image in y- direction. - It is defined as the number of dots per inch and should be an positive value. - - The density of the image in y- direction. - - - - Gets or sets unit of measure used when reporting resolution. - 00 : No units; width:height pixel aspect ratio = Ydensity:Xdensity - 01 : Pixels per inch (2.54 cm) - 02 : Pixels per centimeter - 03 : Pixels per meter - - - - - Gets or sets the Exif profile. - - - - - Gets or sets the list of ICC profiles. - - - - - Gets or sets the iptc profile. - - - - - Gets the metadata value associated with the specified key. - - The type of metadata. - The key of the value to get. - - The . - - - - - - - - Synchronizes the profiles with the current metadata. - - - - - Provides enumeration of available pixel density units. - - - - - No units; width:height pixel aspect ratio. - - - - - Pixels per inch (2.54 cm). - - - - - Pixels per centimeter. - - - - - Pixels per meter (100 cm). - - - - - Specifies exif data types. - - - - - Unknown - - - - - An 8-bit unsigned integer. - - - - - An 8-bit byte containing one 7-bit ASCII code. The final byte is terminated with NULL. - - Although the standard defines ASCII this has commonly been ignored as - ASCII cannot properly encode text in many languages. - - - - - - A 16-bit (2-byte) unsigned integer. - - - - - A 32-bit (4-byte) unsigned integer. - - - - - Two LONGs. The first LONG is the numerator and the second LONG expresses the denominator. - - - - - An 8-bit signed integer. - - - - - An 8-bit byte that can take any value depending on the field definition. - - - - - A 16-bit (2-byte) signed integer. - - - - - A 32-bit (4-byte) signed integer (2's complement notation). - - - - - Two SLONGs. The first SLONG is the numerator and the second SLONG is the denominator. - - - - - A 32-bit single precision floating point value. - - - - - A 64-bit double precision floating point value. - - - - - Gets the size in bytes of the given data type. - - The data type. - - The . - - - Thrown if the type is unsupported. - - - - - Specifies which parts will be written when the profile is added to an image. - - - - - None - - - - - IfdTags - - - - - ExifTags - - - - - GPSTags - - - - - All - - - - - Represents an EXIF profile providing access to the collection of values. - - - - - The byte array to read the EXIF profile from. - - - - - The collection of EXIF values - - - - - The thumbnail offset position in the byte stream - - - - - The thumbnail length in the byte stream - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The byte array to read the EXIF profile from. - - - - Initializes a new instance of the class - by making a copy from another EXIF profile. - - The other EXIF profile, where the clone should be made from. - is null.> - - - - Gets or sets which parts will be written when the profile is added to an image. - - - - - Gets the tags that where found but contained an invalid value. - - - - - Gets the values of this EXIF profile. - - - - - Returns the thumbnail in the EXIF profile when available. - - The pixel format. - - The . - - - - - Returns the value with the specified tag. - - The tag of the exif value. - The value with the specified tag. - The data type of the tag. - - - - Removes the value with the specified tag. - - The tag of the EXIF value. - - The . - - - - - Sets the value of the specified tag. - - The tag of the exif value. - The value. - The data type of the tag. - - - - Converts this instance to a byte array. - - The - - - - - - - Returns the value with the specified tag. - - The tag of the exif value. - The value with the specified tag. - - - - Sets the value of the specified tag. - - The tag of the exif value. - The value. - - - - Synchronizes the profiles with the specified metadata. - - The metadata. - - - - Reads and parses EXIF data from a byte array. - - - - - Gets the invalid tags. - - - - - Gets the thumbnail length in the byte stream. - - - - - Gets the thumbnail offset position in the byte stream. - - - - - Gets the remaining length. - - - - - Reads and returns the collection of EXIF values. - - - The . - - - - - Adds the collection of EXIF values to the reader. - - The values. - The index. - - - - Class that provides a description for an ExifTag value. - - - - - Initializes a new instance of the class. - - The value of the exif tag. - The description for the value of the exif tag. - - - - Gets the tag description from any custom attributes. - - The tag. - The value. - - The . - - - - - Contains methods for writing EXIF metadata. - - - - - Which parts will be written. - - - - - Initializes a new instance of the class. - - The values. - The allowed parts. - - - - Returns the EXIF data. - - - The . - - - - - - - Class that represents an exif tag from the Exif standard 2.31. - - - - - - - - - - - - - - - - - - Gets the FaxProfile exif tag. - - - - - Gets the ModeNumber exif tag. - - - - - Gets the GPSAltitudeRef exif tag. - - - - - Gets the ClipPath exif tag. - - - - - Gets the VersionYear exif tag. - - - - - Gets the XMP exif tag. - - - - - Gets the CFAPattern2 exif tag. - - - - - Gets the TIFFEPStandardID exif tag. - - - - - Gets the XPTitle exif tag. - - - - - Gets the XPComment exif tag. - - - - - Gets the XPAuthor exif tag. - - - - - Gets the XPKeywords exif tag. - - - - - Gets the XPSubject exif tag. - - - - - Gets the GPSVersionID exif tag. - - - - - Converts the specified to a . - - The to convert. - - - - Determines whether the specified instances are considered equal. - - The first to compare. - The second to compare. - - - - Determines whether the specified instances are not considered equal. - - The first to compare. - The second to compare. - - - - - - - - - - - - - - - - Gets the PixelScale exif tag. - - - - - Gets the IntergraphMatrix exif tag. - - - - - Gets the ModelTiePoint exif tag. - - - - - Gets the ModelTransform exif tag. - - - - - Gets the SubfileType exif tag. - - - - - Gets the SubIFDOffset exif tag. - - - - - Gets the GPSIFDOffset exif tag. - - - - - Gets the T4Options exif tag. - - - - - Gets the T6Options exif tag. - - - - - Gets the XClipPathUnits exif tag. - - - - - Gets the YClipPathUnits exif tag. - - - - - Gets the ProfileType exif tag. - - - - - Gets the CodingMethods exif tag. - - - - - Gets the T82ptions exif tag. - - - - - Gets the JPEGInterchangeFormat exif tag. - - - - - Gets the JPEGInterchangeFormatLength exif tag. - - - - - Gets the MDFileTag exif tag. - - - - - Gets the StandardOutputSensitivity exif tag. - - - - - Gets the RecommendedExposureIndex exif tag. - - - - - Gets the ISOSpeed exif tag. - - - - - Gets the ISOSpeedLatitudeyyy exif tag. - - - - - Gets the ISOSpeedLatitudezzz exif tag. - - - - - Gets the FaxRecvParams exif tag. - - - - - Gets the FaxRecvTime exif tag. - - - - - Gets the ImageNumber exif tag. - - - - - Gets the FreeOffsets exif tag. - - - - - Gets the FreeByteCounts exif tag. - - - - - Gets the ColorResponseUnit exif tag. - - - - - Gets the TileOffsets exif tag. - - - - - Gets the SMinSampleValue exif tag. - - - - - Gets the SMaxSampleValue exif tag. - - - - - Gets the JPEGQTables exif tag. - - - - - Gets the JPEGDCTables exif tag. - - - - - Gets the JPEGACTables exif tag. - - - - - Gets the StripRowCounts exif tag. - - - - - Gets the IntergraphRegisters exif tag. - - - - - Gets the TimeZoneOffset exif tag. - - - - - Gets the ImageWidth exif tag. - - - - - Gets the ImageLength exif tag. - - - - - Gets the TileWidth exif tag. - - - - - Gets the TileLength exif tag. - - - - - Gets the BadFaxLines exif tag. - - - - - Gets the ConsecutiveBadFaxLines exif tag. - - - - - Gets the PixelXDimension exif tag. - - - - - Gets the PixelYDimension exif tag. - - - - - Gets the StripOffsets exif tag. - - - - - Gets the TileByteCounts exif tag. - - - - - Gets the ImageLayer exif tag. - - - - - Gets the XPosition exif tag. - - - - - Gets the YPosition exif tag. - - - - - Gets the XResolution exif tag. - - - - - Gets the YResolution exif tag. - - - - - Gets the BatteryLevel exif tag. - - - - - Gets the ExposureTime exif tag. - - - - - Gets the FNumber exif tag. - - - - - Gets the MDScalePixel exif tag. - - - - - Gets the CompressedBitsPerPixel exif tag. - - - - - Gets the ApertureValue exif tag. - - - - - Gets the MaxApertureValue exif tag. - - - - - Gets the SubjectDistance exif tag. - - - - - Gets the FocalLength exif tag. - - - - - Gets the FlashEnergy2 exif tag. - - - - - Gets the FocalPlaneXResolution2 exif tag. - - - - - Gets the FocalPlaneYResolution2 exif tag. - - - - - Gets the ExposureIndex2 exif tag. - - - - - Gets the Humidity exif tag. - - - - - Gets the Pressure exif tag. - - - - - Gets the Acceleration exif tag. - - - - - Gets the FlashEnergy exif tag. - - - - - Gets the FocalPlaneXResolution exif tag. - - - - - Gets the FocalPlaneYResolution exif tag. - - - - - Gets the ExposureIndex exif tag. - - - - - Gets the DigitalZoomRatio exif tag. - - - - - Gets the GPSAltitude exif tag. - - - - - Gets the GPSDOP exif tag. - - - - - Gets the GPSSpeed exif tag. - - - - - Gets the GPSTrack exif tag. - - - - - Gets the GPSImgDirection exif tag. - - - - - Gets the GPSDestBearing exif tag. - - - - - Gets the GPSDestDistance exif tag. - - - - - Gets the WhitePoint exif tag. - - - - - Gets the PrimaryChromaticities exif tag. - - - - - Gets the YCbCrCoefficients exif tag. - - - - - Gets the ReferenceBlackWhite exif tag. - - - - - Gets the GPSLatitude exif tag. - - - - - Gets the GPSLongitude exif tag. - - - - - Gets the GPSTimestamp exif tag. - - - - - Gets the GPSDestLatitude exif tag. - - - - - Gets the GPSDestLongitude exif tag. - - - - - Gets the LensSpecification exif tag. - - - - - Gets the OldSubfileType exif tag. - - - - - Gets the Compression exif tag. - - - - - Gets the PhotometricInterpretation exif tag. - - - - - Gets the Thresholding exif tag. - - - - - Gets the CellWidth exif tag. - - - - - Gets the CellLength exif tag. - - - - - Gets the FillOrder exif tag. - - - - - Gets the Orientation exif tag. - - - - - Gets the SamplesPerPixel exif tag. - - - - - Gets the PlanarConfiguration exif tag. - - - - - Gets the GrayResponseUnit exif tag. - - - - - Gets the ResolutionUnit exif tag. - - - - - Gets the CleanFaxData exif tag. - - - - - Gets the InkSet exif tag. - - - - - Gets the NumberOfInks exif tag. - - - - - Gets the DotRange exif tag. - - - - - Gets the Indexed exif tag. - - - - - Gets the OPIProxy exif tag. - - - - - Gets the JPEGProc exif tag. - - - - - Gets the JPEGRestartInterval exif tag. - - - - - Gets the YCbCrPositioning exif tag. - - - - - Gets the Rating exif tag. - - - - - Gets the RatingPercent exif tag. - - - - - Gets the ExposureProgram exif tag. - - - - - Gets the Interlace exif tag. - - - - - Gets the SelfTimerMode exif tag. - - - - - Gets the SensitivityType exif tag. - - - - - Gets the MeteringMode exif tag. - - - - - Gets the LightSource exif tag. - - - - - Gets the FocalPlaneResolutionUnit2 exif tag. - - - - - Gets the SensingMethod2 exif tag. - - - - - Gets the Flash exif tag. - - - - - Gets the ColorSpace exif tag. - - - - - Gets the FocalPlaneResolutionUnit exif tag. - - - - - Gets the SensingMethod exif tag. - - - - - Gets the CustomRendered exif tag. - - - - - Gets the ExposureMode exif tag. - - - - - Gets the WhiteBalance exif tag. - - - - - Gets the FocalLengthIn35mmFilm exif tag. - - - - - Gets the SceneCaptureType exif tag. - - - - - Gets the GainControl exif tag. - - - - - Gets the Contrast exif tag. - - - - - Gets the Saturation exif tag. - - - - - Gets the Sharpness exif tag. - - - - - Gets the SubjectDistanceRange exif tag. - - - - - Gets the GPSDifferential exif tag. - - - - - Gets the BitsPerSample exif tag. - - - - - Gets the MinSampleValue exif tag. - - - - - Gets the MaxSampleValue exif tag. - - - - - Gets the GrayResponseCurve exif tag. - - - - - Gets the ColorMap exif tag. - - - - - Gets the ExtraSamples exif tag. - - - - - Gets the PageNumber exif tag. - - - - - Gets the TransferFunction exif tag. - - - - - Gets the Predictor exif tag. - - - - - Gets the HalftoneHints exif tag. - - - - - Gets the SampleFormat exif tag. - - - - - Gets the TransferRange exif tag. - - - - - Gets the DefaultImageColor exif tag. - - - - - Gets the JPEGLosslessPredictors exif tag. - - - - - Gets the JPEGPointTransforms exif tag. - - - - - Gets the YCbCrSubsampling exif tag. - - - - - Gets the CFARepeatPatternDim exif tag. - - - - - Gets the IntergraphPacketData exif tag. - - - - - Gets the ISOSpeedRatings exif tag. - - - - - Gets the SubjectArea exif tag. - - - - - Gets the SubjectLocation exif tag. - - - - - Gets the ShutterSpeedValue exif tag. - - - - - Gets the BrightnessValue exif tag. - - - - - Gets the ExposureBiasValue exif tag. - - - - - Gets the AmbientTemperature exif tag. - - - - - Gets the WaterDepth exif tag. - - - - - Gets the CameraElevationAngle exif tag. - - - - - Gets the Decode exif tag. - - - - - Gets the ImageDescription exif tag. - - - - - Gets the Make exif tag. - - - - - Gets the Model exif tag. - - - - - Gets the Software exif tag. - - - - - Gets the DateTime exif tag. - - - - - Gets the Artist exif tag. - - - - - Gets the HostComputer exif tag. - - - - - Gets the Copyright exif tag. - - - - - Gets the DocumentName exif tag. - - - - - Gets the PageName exif tag. - - - - - Gets the InkNames exif tag. - - - - - Gets the TargetPrinter exif tag. - - - - - Gets the ImageID exif tag. - - - - - Gets the MDLabName exif tag. - - - - - Gets the MDSampleInfo exif tag. - - - - - Gets the MDPrepDate exif tag. - - - - - Gets the MDPrepTime exif tag. - - - - - Gets the MDFileUnits exif tag. - - - - - Gets the SEMInfo exif tag. - - - - - Gets the SpectralSensitivity exif tag. - - - - - Gets the DateTimeOriginal exif tag. - - - - - Gets the DateTimeDigitized exif tag. - - - - - Gets the SubsecTime exif tag. - - - - - Gets the SubsecTimeOriginal exif tag. - - - - - Gets the SubsecTimeDigitized exif tag. - - - - - Gets the RelatedSoundFile exif tag. - - - - - Gets the FaxSubaddress exif tag. - - - - - Gets the OffsetTime exif tag. - - - - - Gets the OffsetTimeOriginal exif tag. - - - - - Gets the OffsetTimeDigitized exif tag. - - - - - Gets the SecurityClassification exif tag. - - - - - Gets the ImageHistory exif tag. - - - - - Gets the ImageUniqueID exif tag. - - - - - Gets the OwnerName exif tag. - - - - - Gets the SerialNumber exif tag. - - - - - Gets the LensMake exif tag. - - - - - Gets the LensModel exif tag. - - - - - Gets the LensSerialNumber exif tag. - - - - - Gets the GDALMetadata exif tag. - - - - - Gets the GDALNoData exif tag. - - - - - Gets the GPSLatitudeRef exif tag. - - - - - Gets the GPSLongitudeRef exif tag. - - - - - Gets the GPSSatellites exif tag. - - - - - Gets the GPSStatus exif tag. - - - - - Gets the GPSMeasureMode exif tag. - - - - - Gets the GPSSpeedRef exif tag. - - - - - Gets the GPSTrackRef exif tag. - - - - - Gets the GPSImgDirectionRef exif tag. - - - - - Gets the GPSMapDatum exif tag. - - - - - Gets the GPSDestLatitudeRef exif tag. - - - - - Gets the GPSDestLongitudeRef exif tag. - - - - - Gets the GPSDestBearingRef exif tag. - - - - - Gets the GPSDestDistanceRef exif tag. - - - - - Gets the GPSDateStamp exif tag. - - - - - Gets the JPEGTables exif tag. - - - - - Gets the OECF exif tag. - - - - - Gets the ExifVersion exif tag. - - - - - Gets the ComponentsConfiguration exif tag. - - - - - Gets the MakerNote exif tag. - - - - - Gets the UserComment exif tag. - - - - - Gets the FlashpixVersion exif tag. - - - - - Gets the SpatialFrequencyResponse exif tag. - - - - - Gets the SpatialFrequencyResponse2 exif tag. - - - - - Gets the Noise exif tag. - - - - - Gets the CFAPattern exif tag. - - - - - Gets the DeviceSettingDescription exif tag. - - - - - Gets the ImageSourceData exif tag. - - - - - Gets the GPSProcessingMethod exif tag. - - - - - Gets the GPSAreaInformation exif tag. - - - - - Gets the FileSource exif tag. - - - - - Gets the ImageDescription exif tag. - - - - - All exif tags from the Exif standard 2.31. - - - - - Unknown - - - - - SubIFDOffset - - - - - GPSIFDOffset - - - - - SubfileType - - - - - OldSubfileType - - - - - ImageWidth - - - - - ImageLength - - - - - BitsPerSample - - - - - Compression - - - - - PhotometricInterpretation - - - - - Thresholding - - - - - CellWidth - - - - - CellLength - - - - - FillOrder - - - - - DocumentName - - - - - ImageDescription - - - - - Make - - - - - Model - - - - - StripOffsets - - - - - Orientation - - - - - SamplesPerPixel - - - - - RowsPerStrip - - - - - StripByteCounts - - - - - MinSampleValue - - - - - MaxSampleValue - - - - - XResolution - - - - - YResolution - - - - - PlanarConfiguration - - - - - PageName - - - - - XPosition - - - - - YPosition - - - - - FreeOffsets - - - - - FreeByteCounts - - - - - GrayResponseUnit - - - - - GrayResponseCurve - - - - - T4Options - - - - - T6Options - - - - - ResolutionUnit - - - - - PageNumber - - - - - ColorResponseUnit - - - - - TransferFunction - - - - - Software - - - - - DateTime - - - - - Artist - - - - - HostComputer - - - - - Predictor - - - - - WhitePoint - - - - - PrimaryChromaticities - - - - - ColorMap - - - - - HalftoneHints - - - - - TileWidth - - - - - TileLength - - - - - TileOffsets - - - - - TileByteCounts - - - - - BadFaxLines - - - - - CleanFaxData - - - - - ConsecutiveBadFaxLines - - - - - InkSet - - - - - InkNames - - - - - NumberOfInks - - - - - DotRange - - - - - TargetPrinter - - - - - ExtraSamples - - - - - SampleFormat - - - - - SMinSampleValue - - - - - SMaxSampleValue - - - - - TransferRange - - - - - ClipPath - - - - - XClipPathUnits - - - - - YClipPathUnits - - - - - Indexed - - - - - JPEGTables - - - - - OPIProxy - - - - - ProfileType - - - - - FaxProfile - - - - - CodingMethods - - - - - VersionYear - - - - - ModeNumber - - - - - Decode - - - - - DefaultImageColor - - - - - T82ptions - - - - - JPEGProc - - - - - JPEGInterchangeFormat - - - - - JPEGInterchangeFormatLength - - - - - JPEGRestartInterval - - - - - JPEGLosslessPredictors - - - - - JPEGPointTransforms - - - - - JPEGQTables - - - - - JPEGDCTables - - - - - JPEGACTables - - - - - YCbCrCoefficients - - - - - YCbCrSubsampling - - - - - YCbCrPositioning - - - - - ReferenceBlackWhite - - - - - StripRowCounts - - - - - XMP - - - - - Rating - - - - - RatingPercent - - - - - ImageID - - - - - CFARepeatPatternDim - - - - - CFAPattern2 - - - - - BatteryLevel - - - - - Copyright - - - - - ExposureTime - - - - - FNumber - - - - - MDFileTag - - - - - MDScalePixel - - - - - MDLabName - - - - - MDSampleInfo - - - - - MDPrepDate - - - - - MDPrepTime - - - - - MDFileUnits - - - - - PixelScale - - - - - IntergraphPacketData - - - - - IntergraphRegisters - - - - - IntergraphMatrix - - - - - ModelTiePoint - - - - - SEMInfo - - - - - ModelTransform - - - - - ImageLayer - - - - - ExposureProgram - - - - - SpectralSensitivity - - - - - ISOSpeedRatings - - - - - OECF - - - - - Interlace - - - - - TimeZoneOffset - - - - - SelfTimerMode - - - - - SensitivityType - - - - - StandardOutputSensitivity - - - - - RecommendedExposureIndex - - - - - ISOSpeed - - - - - ISOSpeedLatitudeyyy - - - - - ISOSpeedLatitudezzz - - - - - FaxRecvParams - - - - - FaxSubaddress - - - - - FaxRecvTime - - - - - ExifVersion - - - - - DateTimeOriginal - - - - - DateTimeDigitized - - - - - OffsetTime - - - - - OffsetTimeOriginal - - - - - OffsetTimeDigitized - - - - - ComponentsConfiguration - - - - - CompressedBitsPerPixel - - - - - ShutterSpeedValue - - - - - ApertureValue - - - - - BrightnessValue - - - - - ExposureBiasValue - - - - - MaxApertureValue - - - - - SubjectDistance - - - - - MeteringMode - - - - - LightSource - - - - - Flash - - - - - FocalLength - - - - - FlashEnergy2 - - - - - SpatialFrequencyResponse2 - - - - - Noise - - - - - FocalPlaneXResolution2 - - - - - FocalPlaneYResolution2 - - - - - FocalPlaneResolutionUnit2 - - - - - ImageNumber - - - - - SecurityClassification - - - - - ImageHistory - - - - - SubjectArea - - - - - ExposureIndex2 - - - - - TIFFEPStandardID - - - - - SensingMethod - - - - - MakerNote - - - - - UserComment - - - - - SubsecTime - - - - - SubsecTimeOriginal - - - - - SubsecTimeDigitized - - - - - ImageSourceData - - - - - AmbientTemperature - - - - - Humidity - - - - - Pressure - - - - - WaterDepth - - - - - Acceleration - - - - - CameraElevationAngle - - - - - XPTitle - - - - - XPComment - - - - - XPAuthor - - - - - XPKeywords - - - - - XPSubject - - - - - FlashpixVersion - - - - - ColorSpace - - - - - PixelXDimension - - - - - PixelYDimension - - - - - RelatedSoundFile - - - - - FlashEnergy - - - - - SpatialFrequencyResponse - - - - - FocalPlaneXResolution - - - - - FocalPlaneYResolution - - - - - FocalPlaneResolutionUnit - - - - - SubjectLocation - - - - - ExposureIndex - - - - - SensingMethod - - - - - FileSource - - - - - SceneType - - - - - CFAPattern - - - - - CustomRendered - - - - - ExposureMode - - - - - WhiteBalance - - - - - DigitalZoomRatio - - - - - FocalLengthIn35mmFilm - - - - - SceneCaptureType - - - - - GainControl - - - - - Contrast - - - - - Saturation - - - - - Sharpness - - - - - DeviceSettingDescription - - - - - SubjectDistanceRange - - - - - ImageUniqueID - - - - - OwnerName - - - - - SerialNumber - - - - - LensSpecification - - - - - LensMake - - - - - LensModel - - - - - LensSerialNumber - - - - - GDALMetadata - - - - - GDALNoData - - - - - GPSVersionID - - - - - GPSLatitudeRef - - - - - GPSLatitude - - - - - GPSLongitudeRef - - - - - GPSLongitude - - - - - GPSAltitudeRef - - - - - GPSAltitude - - - - - GPSTimestamp - - - - - GPSSatellites - - - - - GPSStatus - - - - - GPSMeasureMode - - - - - GPSDOP - - - - - GPSSpeedRef - - - - - GPSSpeed - - - - - GPSTrackRef - - - - - GPSTrack - - - - - GPSImgDirectionRef - - - - - GPSImgDirection - - - - - GPSMapDatum - - - - - GPSDestLatitudeRef - - - - - GPSDestLatitude - - - - - GPSDestLongitudeRef - - - - - GPSDestLongitude - - - - - GPSDestBearingRef - - - - - GPSDestBearing - - - - - GPSDestDistanceRef - - - - - GPSDestDistance - - - - - GPSProcessingMethod - - - - - GPSAreaInformation - - - - - GPSDateStamp - - - - - GPSDifferential - - - - - Class that represents an exif tag from the Exif standard 2.31 with as the data type of the tag. - - The data type of the tag. - - - - Gets the value of the current instance as a string. - - - - - A value of the exif profile. - - - - - Gets the data type of the exif value. - - - - - Gets a value indicating whether the value is an array. - - - - - Gets the tag of the exif value. - - - - - Gets the value of this exif value. - - The value of this exif value. - - - - Sets the value of this exif value. - - The value of this exif value. - A value indicating whether the value could be set. - - - - A value of the exif profile. - - The type of the value. - - - - Gets or sets the value. - - - - - A segment of a curve - - - - - Initializes a new instance of the class. - - The signature of this segment - - - - Gets the signature of this segment - - - - - - - - A formula based curve segment - - - - - Initializes a new instance of the class. - - The type of this segment - Gamma segment parameter - A segment parameter - B segment parameter - C segment parameter - D segment parameter - E segment parameter - - - - Gets the type of this curve - - - - - Gets the gamma curve parameter - - - - - Gets the A curve parameter - - - - - Gets the B curve parameter - - - - - Gets the C curve parameter - - - - - Gets the D curve parameter - - - - - Gets the E curve parameter - - - - - - - - - - - A one dimensional ICC curve. - - - - - Initializes a new instance of the class. - - The break points of this curve - The segments of this curve - - - - Gets the breakpoints that separate two curve segments - - - - - Gets an array of curve segments - - - - - - - - A parametric curve - - - - - Initializes a new instance of the class. - - G curve parameter - - - - Initializes a new instance of the class. - - G curve parameter - A curve parameter - B curve parameter - - - - Initializes a new instance of the class. - - G curve parameter - A curve parameter - B curve parameter - C curve parameter - - - - Initializes a new instance of the class. - - G curve parameter - A curve parameter - B curve parameter - C curve parameter - D curve parameter - - - - Initializes a new instance of the class. - - G curve parameter - A curve parameter - B curve parameter - C curve parameter - D curve parameter - E curve parameter - F curve parameter - - - - Gets the type of this curve - - - - - Gets the G curve parameter - - - - - Gets the A curve parameter - - - - - Gets the B curve parameter - - - - - Gets the C curve parameter - - - - - Gets the D curve parameter - - - - - Gets the E curve parameter - - - - - Gets the F curve parameter - - - - - - - - - - - - - - A response curve - - - - - Initializes a new instance of the class. - - The type of this curve - The XYZ values - The response arrays - - - - Gets the type of this curve - - - - - Gets the XYZ values - - - - - Gets the response arrays - - - - - - - - - - - - - - A sampled curve segment - - - - - Initializes a new instance of the class. - - The curve values of this segment - - - - Gets the curve values of this segment - - - - - - - - - - - Provides methods to read ICC data types - - - Provides methods to read ICC data types - - - Provides methods to read ICC data types - - - Provides methods to read ICC data types - - - Provides methods to read ICC data types - - - Provides methods to read ICC data types - - - Provides methods to read ICC data types - - - Provides methods to read ICC data types - - - - - The data that is read - - - - - The current reading position - - - - - Initializes a new instance of the class. - - The data to read - - - - Gets the length in bytes of the raw data - - - - - Sets the reading position to the given value - - The new index position - - - - Returns the current without increment and adds the given increment - - The value to increment - The current without the increment - - - - Calculates the 4 byte padding and adds it to the variable - - - - - Calculates the 4 byte padding - - the number of bytes to pad - - - - Gets the bit value at a specified position - - The value from where the bit will be extracted - Position of the bit. Zero based index from left to right. - The bit value at specified position - - - - Reads a - - The read curve - - - - Reads a - - The number of channels - The read curve - - - - Reads a - - The read curve - - - - Reads a - - The read segment - - - - Reads a - - The read segment - - - - Reads a - - The read segment - - - - Reads curve data - - Number of input channels - The curve data - - - - Reads an 8bit lookup table - - The read LUT - - - - Reads a 16bit lookup table - - The number of entries - The read LUT - - - - Reads a CLUT depending on type - - Input channel count - Output channel count - If true, it's read as CLUTf32, - else read as either CLUT8 or CLUT16 depending on embedded information - The read CLUT - - - - Reads an 8 bit CLUT - - Input channel count - Output channel count - Grid point count for each CLUT channel - The read CLUT8 - - - - Reads a 16 bit CLUT - - Input channel count - Output channel count - Grid point count for each CLUT channel - The read CLUT16 - - - - Reads a 32bit floating point CLUT - - Input channel count - Output channel count - Grid point count for each CLUT channel - The read CLUTf32 - - - - Reads a two dimensional matrix - - Number of values in X - Number of values in Y - True if the values are encoded as Single; false if encoded as Fix16 - The read matrix - - - - Reads a one dimensional matrix - - Number of values - True if the values are encoded as Single; false if encoded as Fix16 - The read matrix - - - - Reads a - - The read - - - - Reads a CurveSet - - Number of input channels - Number of output channels - The read - - - - Reads a Matrix - - Number of input channels - Number of output channels - The read - - - - Reads a CLUT - - Number of input channels - Number of output channels - The read - - - - Reads a DateTime - - the value - - - - Reads an ICC profile version number - - the version number - - - - Reads an XYZ number - - the XYZ number - - - - Reads a profile ID - - the profile ID - - - - Reads a position number - - the position number - - - - Reads a response number - - the response number - - - - Reads a named color - - Number of device coordinates - the named color - - - - Reads a profile description - - the profile description - - - - Reads a colorant table entry - - the profile description - - - - Reads a screening channel - - the screening channel - - - - Reads an ushort - - the value - - - - Reads a short - - the value - - - - Reads an uint - - the value - - - - Reads an int - - the value - - - - Reads an ulong - - the value - - - - Reads a long - - the value - - - - Reads a float. - - the value - - - - Reads a double - - the value - - - - Reads an ASCII encoded string. - - number of bytes to read - The value as a string - - - - Reads an UTF-16 big-endian encoded string. - - number of bytes to read - The value as a string - - - - Reads a signed 32bit number with 1 sign bit, 15 value bits and 16 fractional bits. - - The number as double - - - - Reads an unsigned 32bit number with 16 value bits and 16 fractional bits. - - The number as double - - - - Reads an unsigned 16bit number with 1 value bit and 15 fractional bits. - - The number as double - - - - Reads an unsigned 16bit number with 8 value bits and 8 fractional bits. - - The number as double - - - - Reads a number of bytes and advances the index. - - The number of bytes to read - The read bytes - - - - Reads a tag data entry - - The table entry with reading information - the tag data entry - - - - Reads the header of a - - The read signature - - - - Reads the header of a and checks if it's the expected value - - expected value to check against - - - - Reads a with an unknown - - The size of the entry in bytes - The read entry - - - - Reads a - - The read entry - - - - Reads a - - The read entry - - - - Reads a - - The read entry - - - - Reads a - - The read entry - - - - Reads a - - The size of the entry in bytes - The read entry - - - - Reads a - - The read entry - - - - Reads a - - The read entry - - - - Reads a - - The read entry - - - - Reads a - - The read entry - - - - Reads a - - The read entry - - - - Reads a - - The read entry - - - - Reads a - - The read entry - - - - Reads a - - The read entry - - - - Reads a - - The read entry - - - - Reads a - - The read entry - - - - Reads a - - The read entry - - - - Reads a - - The read entry - - - - Reads a - - The read entry - - - - Reads a - - The size of the entry in bytes - The read entry - - - - Reads a - - The read entry - - - - Reads a - - The size of the entry in bytes - The read entry - - - - Reads a - - The size of the entry in bytes - The read entry - - - - Reads a - - The size of the entry in bytes - The read entry - - - - Reads a - - The size of the entry in bytes - The read entry - - - - Reads a - - The size of the entry in bytes - The read entry - - - - Reads a - - The size of the entry in bytes - The read entry - - - - Reads a - - The read entry - - - - Reads a - - The size of the entry in bytes - The read entry - - - - Reads a - - The read entry - - - - Reads a - - The read entry - - - - Reads a - - The read entry - - - - Reads a - - The size of the entry in bytes - The read entry - - - - Provides methods to write ICC data types - - - Provides methods to write ICC data types - - - Provides methods to write ICC data types - - - Provides methods to write ICC data types - - - Provides methods to write ICC data types - - - Provides methods to write ICC data types - - - Provides methods to write ICC data types - - - Provides methods to write ICC data types - - - - - The underlying stream where the data is written to - - - - - To detect redundant calls - - - - - Initializes a new instance of the class. - - - - - Gets the currently written length in bytes - - - - - Gets the written data bytes - - The written data - - - - Sets the writing position to the given value - - The new index position - - - - Writes a byte array - - The array to write - The number of bytes written - - - - Writes a ushort array - - The array to write - The number of bytes written - - - - Writes a short array - - The array to write - The number of bytes written - - - - Writes a uint array - - The array to write - The number of bytes written - - - - Writes an int array - - The array to write - The number of bytes written - - - - Writes a ulong array - - The array to write - The number of bytes written - - - - Write a number of empty bytes - - The number of bytes to write - The number of bytes written - - - - Writes empty bytes to a 4-byte margin - - The number of bytes written - - - - - - - Writes given bytes from pointer - - Pointer to the bytes to write - The number of bytes to write - The number of bytes written - - - - Writes given bytes from pointer ignoring endianness - - Pointer to the bytes to write - The number of bytes to write - The number of bytes written - - - - Writes curve data - - The curves to write - The number of bytes written - - - - Writes a - - The curve to write - The number of bytes written - - - - Writes a - - The curve to write - The number of bytes written - - - - Writes a - - The curve to write - The number of bytes written - - - - Writes a - - The curve to write - The number of bytes written - - - - Writes a - - The curve to write - The number of bytes written - - - - Writes a - - The curve to write - The number of bytes written - - - - Writes an 8bit lookup table - - The LUT to write - The number of bytes written - - - - Writes an 16bit lookup table - - The LUT to write - The number of bytes written - - - - Writes an color lookup table - - The CLUT to write - The number of bytes written - - - - Writes a 8bit color lookup table - - The CLUT to write - The number of bytes written - - - - Writes a 16bit color lookup table - - The CLUT to write - The number of bytes written - - - - Writes a 32bit float color lookup table - - The CLUT to write - The number of bytes written - - - - Writes a two dimensional matrix - - The matrix to write - True if the values are encoded as Single; false if encoded as Fix16 - The number of bytes written - - - - Writes a two dimensional matrix - - The matrix to write - True if the values are encoded as Single; false if encoded as Fix16 - The number of bytes written - - - - Writes a two dimensional matrix - - The matrix to write - True if the values are encoded as Single; false if encoded as Fix16 - The number of bytes written - - - - Writes a one dimensional matrix - - The matrix to write - True if the values are encoded as Single; false if encoded as Fix16 - The number of bytes written - - - - Writes a one dimensional matrix - - The matrix to write - True if the values are encoded as Single; false if encoded as Fix16 - The number of bytes written - - - - Writes a - - The element to write - The number of bytes written - - - - Writes a CurveSet - - The element to write - The number of bytes written - - - - Writes a Matrix - - The element to write - The number of bytes written - - - - Writes a CLUT - - The element to write - The number of bytes written - - - - Writes a DateTime - - The value to write - the number of bytes written - - - - Writes an ICC profile version number - - The value to write - the number of bytes written - - - - Writes an XYZ number - - The value to write - the number of bytes written - - - - Writes a profile ID - - The value to write - the number of bytes written - - - - Writes a position number - - The value to write - the number of bytes written - - - - Writes a response number - - The value to write - the number of bytes written - - - - Writes a named color - - The value to write - the number of bytes written - - - - Writes a profile description - - The value to write - the number of bytes written - - - - Writes a screening channel - - The value to write - the number of bytes written - - - - Writes a byte - - The value to write - the number of bytes written - - - - Writes an ushort - - The value to write - the number of bytes written - - - - Writes a short - - The value to write - the number of bytes written - - - - Writes an uint - - The value to write - the number of bytes written - - - - Writes an int - - The value to write - the number of bytes written - - - - Writes an ulong - - The value to write - the number of bytes written - - - - Writes a long - - The value to write - the number of bytes written - - - - Writes a float - - The value to write - the number of bytes written - - - - Writes a double - - The value to write - the number of bytes written - - - - Writes a signed 32bit number with 1 sign bit, 15 value bits and 16 fractional bits - - The value to write - the number of bytes written - - - - Writes an unsigned 32bit number with 16 value bits and 16 fractional bits - - The value to write - the number of bytes written - - - - Writes an unsigned 16bit number with 1 value bit and 15 fractional bits - - The value to write - the number of bytes written - - - - Writes an unsigned 16bit number with 8 value bits and 8 fractional bits - - The value to write - the number of bytes written - - - - Writes an ASCII encoded string - - the string to write - the number of bytes written - - - - Writes an ASCII encoded string resizes it to the given length - - The string to write - The desired length of the string (including potential null terminator) - If True, there will be a \0 added at the end - the number of bytes written - - - - Writes an UTF-16 big-endian encoded string - - the string to write - the number of bytes written - - - - Writes a tag data entry - - The entry to write - The table entry for the written data entry - The number of bytes written (excluding padding) - - - - Writes a tag data entry (without padding) - - The entry to write - The number of bytes written - - - - Writes the header of a - - The signature of the entry - The number of bytes written - - - - Writes a - - The entry to write - The number of bytes written - - - - Writes a - - The entry to write - The number of bytes written - - - - Writes a - - The entry to write - The number of bytes written - - - - Writes a - - The entry to write - The number of bytes written - - - - Writes a - - The entry to write - The number of bytes written - - - - Writes a - - The entry to write - The number of bytes written - - - - Writes a - - The entry to write - The number of bytes written - - - - Writes a - - The entry to write - The number of bytes written - - - - Writes a - - The entry to write - The number of bytes written - - - - Writes a - - The entry to write - The number of bytes written - - - - Writes a - - The entry to write - The number of bytes written - - - - Writes a - - The entry to write - The number of bytes written - - - - Writes a - - The entry to write - The number of bytes written - - - - Writes a - - The entry to write - The number of bytes written - - - - Writes a - - The entry to write - The number of bytes written - - - - Writes a - - The entry to write - The number of bytes written - - - - Writes a - - The entry to write - The number of bytes written - - - - Writes a - - The entry to write - The number of bytes written - - - - Writes a - - The entry to write - The number of bytes written - - - - Writes a - - The entry to write - The number of bytes written - - - - Writes a - - The entry to write - The number of bytes written - - - - Writes a - - The entry to write - The number of bytes written - - - - Writes a - - The entry to write - The number of bytes written - - - - Writes a - - The entry to write - The number of bytes written - - - - Writes a - - The entry to write - The number of bytes written - - - - Writes a - - The entry to write - The number of bytes written - - - - Writes a - - The entry to write - The number of bytes written - - - - Writes a - - The entry to write - The number of bytes written - - - - Writes a - - The entry to write - The number of bytes written - - - - Writes a - - The entry to write - The number of bytes written - - - - Writes a - - The entry to write - The number of bytes written - - - - Writes a - - The entry to write - The number of bytes written - - - - Writes a - - The entry to write - The number of bytes written - - - - Color lookup table data type - - - - - 32bit floating point - - - - - 8bit unsigned integer (byte) - - - - - 16bit unsigned integer (ushort) - - - - - Colorant Encoding - - - - - Unknown colorant encoding - - - - - ITU-R BT.709-2 colorant encoding - - - - - SMPTE RP145 colorant encoding - - - - - EBU Tech.3213-E colorant encoding - - - - - P22 colorant encoding - - - - - Color Space Type - - - - - CIE XYZ - - - - - CIE Lab - - - - - CIE Luv - - - - - YCbCr - - - - - CIE Yxy - - - - - RGB - - - - - Gray - - - - - HSV - - - - - HLS - - - - - CMYK - - - - - CMY - - - - - Generic 2 channel color - - - - - Generic 3 channel color - - - - - Generic 4 channel color - - - - - Generic 5 channel color - - - - - Generic 6 channel color - - - - - Generic 7 channel color - - - - - Generic 8 channel color - - - - - Generic 9 channel color - - - - - Generic 10 channel color - - - - - Generic 11 channel color - - - - - Generic 12 channel color - - - - - Generic 13 channel color - - - - - Generic 14 channel color - - - - - Generic 15 channel color - - - - - Curve Measurement Encodings - - - - - ISO 5-3 densitometer response. This is the accepted standard for - reflection densitometers for measuring photographic color prints - - - - - ISO 5-3 densitometer response which is the accepted standard in - Europe for color reflection densitometers - - - - - ISO 5-3 densitometer response commonly referred to as narrow band - or interference-type response. - - - - - ISO 5-3 wide band color reflection densitometer response which is - the accepted standard in the United States for color reflection densitometers - - - - - ISO 5-3 densitometer response for measuring color negatives - - - - - DIN 16536-2 densitometer response, with no polarizing filter - - - - - DIN 16536-2 densitometer response, with polarizing filter - - - - - DIN 16536-2 narrow band densitometer response, with no polarizing filter - - - - - DIN 16536-2 narrow band densitometer response, with polarizing filter - - - - - Curve Segment Signature - - - - - Curve defined by a formula - - - - - Curve defined by multiple segments - - - - - Enumerates the basic data types as defined in ICC.1:2010 version 4.3.0.0 - Section 4.2 to 4.15 - - - - - A 12-byte value representation of the time and date - - - - - A single-precision 32-bit floating-point as specified in IEEE 754, - excluding un-normalized s, infinities, and not a "" (NaN) values - - - - - Positions of some data elements are indicated using a position offset with the data element's size. - - - - - An 8-byte value, used to associate a normalized device code with a measurement value - - - - - A fixed signed 4-byte (32-bit) quantity which has 16 fractional bits - - - - - A fixed unsigned 4-byte (32-bit) quantity having 16 fractional bits - - - - - A fixed unsigned 2-byte (16-bit) quantity having15 fractional bits - - - - - A fixed unsigned 2-byte (16-bit) quantity having 8 fractional bits - - - - - An unsigned 2-byte (16-bit) integer - - - - - An unsigned 4-byte (32-bit) integer - - - - - An unsigned 8-byte (64-bit) integer - - - - - An unsigned 1-byte (8-bit) integer - - - - - A set of three fixed signed 4-byte (32-bit) quantities used to encode CIEXYZ, nCIEXYZ, and PCSXYZ tristimulus values - - - - - Alpha-numeric values, and other input and output codes, shall conform to the American Standard Code for - Information Interchange (ASCII) specified in ISO/IEC 646. - - - - - Device attributes. Can be combined with a logical OR - The least-significant 32 bits are defined by the ICC, - the rest can be used for vendor specific values - - - - - Opacity transparent - - - - - Opacity reflective - - - - - Reflectivity matte - - - - - Reflectivity glossy - - - - - Polarity negative - - - - - Polarity positive - - - - - Chroma black and white - - - - - Chroma color - - - - - Formula curve segment type - - - - - Type 1: Y = (a * X + b)^γ + c - - - - - Type 1: Y = a * log10 (b * X^γ + c) + d - - - - - Type 3: Y = a * b^(c * X + d) + e - - - - - Measurement Geometry - - - - - Unknown geometry - - - - - Geometry of 0°:45° or 45°:0° - - - - - Geometry of 0°:d or d:0° - - - - - Multi process element signature - - - - - Set of curves - - - - - Matrix transformation - - - - - Color lookup table - - - - - Reserved for future expansion. Do not use! - - - - - Reserved for future expansion. Do not use! - - - - - Formula curve segment type - - - - - Type 1: Y = X^g - - - - - CIE 122-1996: - For X >= -b/a: Y =(a * X + b)^g - For X $lt; -b/a: Y = 0 - - - - - IEC 61966-3: - For X >= -b/a: Y =(a * X + b)^g + c - For X $lt; -b/a: Y = c - - - - - IEC 61966-2-1 (sRGB): - For X >= d: Y =(a * X + b)^g - For X $lt; d: Y = c * X - - - - - Type 5: - For X >= d: Y =(a * X + b)^g + c - For X $lt; d: Y = c * X + f - - - - - Enumerates the primary platform/operating system framework for which the profile was created - - - - - No platform identified - - - - - Apple Computer, Inc. - - - - - Microsoft Corporation - - - - - Silicon Graphics, Inc. - - - - - Sun Microsystems, Inc. - - - - - Profile Class Name - - - - - Input profiles are generally used with devices such as scanners and - digital cameras. The types of profiles available for use as Input - profiles are N-component LUT-based, Three-component matrix-based, - and monochrome. - - - - - This class of profiles represents display devices such as monitors. - The types of profiles available for use as Display profiles are - N-component LUT-based, Three-component matrix-based, and monochrome. - - - - - Output profiles are used to support devices such as printers and - film recorders. The types of profiles available for use as Output - profiles are N-component LUT-based and Monochrome. - - - - - This profile contains a pre-evaluated transform that cannot be undone, - which represents a one-way link or connection between devices. It does - not represent any device model nor can it be embedded into images. - - - - - This profile provides the relevant information to perform a transformation - between color encodings and the PCS. This type of profile is based on - modeling rather than device measurement or characterization data. - ColorSpace profiles may be embedded in images. - - - - - This profile represents abstract transforms and does not represent any - device model. Color transformations using Abstract profiles are performed - from PCS to PCS. Abstract profiles cannot be embedded in images. - - - - - NamedColor profiles can be thought of as sibling profiles to device profiles. - For a given device there would be one or more device profiles to handle - process color conversions and one or more named color profiles to handle - named colors. - - - - - Profile flags. Can be combined with a logical OR. - The least-significant 16 bits are reserved for the ICC, - the rest can be used for vendor specific values - - - - - No flags (equivalent to NotEmbedded and Independent) - - - - - Profile is embedded within another file - - - - - Profile is embedded within another file - - - - - Profile cannot be used independently of the embedded color data - - - - - Profile can be used independently of the embedded color data - - - - - Enumerates the ICC Profile Tags as defined in ICC.1:2010 version 4.3.0.0 - Section 9 - - Each tag value represent the size of the tag in the profile. - - - - - - Unknown tag - - - - - A2B0 - This tag defines a color transform from Device, Color Encoding or PCS, to PCS, or a color transform - from Device 1 to Device 2, using lookup table tag element structures - - - - - A2B2 - This tag describes the color transform from Device or Color Encoding to PCS using lookup table tag element structures - - - - - A2B2 - This tag describes the color transform from Device or Color Encoding to PCS using lookup table tag element structures - - - - - bXYZ - This tag contains the third column in the matrix used in matrix/TRC transforms. - - - - - bTRC - This tag contains the blue channel tone reproduction curve. The first element represents no colorant (white) or - phosphor (black) and the last element represents 100 % colorant (blue) or 100 % phosphor (blue). - - - - - B2A0 - This tag defines a color transform from PCS to Device or Color Encoding using the lookup table tag element structures - - - - - B2A1 - This tag defines a color transform from PCS to Device or Color Encoding using the lookup table tag element structures. - - - - - B2A2 - This tag defines a color transform from PCS to Device or Color Encoding using the lookup table tag element structures. - - - - - B2D0 - This tag defines a color transform from PCS to Device. It supports float32Number-encoded input range, output range and transform, and - provides a means to override the BToA0 tag. - - - - - B2D1 - This tag defines a color transform from PCS to Device. It supports float32Number-encoded input range, output range and transform, and - provides a means to override the BToA1 tag. - - - - - B2D2 - This tag defines a color transform from PCS to Device. It supports float32Number-encoded input range, output range and transform, and - provides a means to override the BToA2 tag. - - - - - B2D3 - This tag defines a color transform from PCS to Device. It supports float32Number-encoded input range, output range and transform, and - provides a means to override the BToA1 tag. - - - - - calt - This tag contains the profile calibration date and time. This allows applications and utilities to verify if this profile matches a - vendor's profile and how recently calibration has been performed. - - - - - targ - This tag contains the name of the registered characterization data set, or it contains the measurement - data for a characterization target. - - - - - chad - This tag contains a matrix, which shall be invertible, and which converts an nCIEXYZ color, measured using the actual illumination - conditions and relative to the actual adopted white, to an nCIEXYZ color relative to the PCS adopted white - - - - - chrm - This tag contains the type and the data of the phosphor/colorant chromaticity set used. - - - - - clro - This tag specifies the laydown order of colorants. - - - - - clrt - - - - - clot - This tag identifies the colorants used in the profile by a unique name and set of PCSXYZ or PCSLAB values. - When used in DeviceLink profiles only the PCSLAB values shall be permitted. - - - - - ciis - This tag indicates the image state of PCS colorimetry produced using the colorimetric intent transforms. - - - - - cprt - This tag contains the text copyright information for the profile. - - - - - crdi - Removed in V4 - - - - - data - Removed in V4 - - - - - dtim - Removed in V4 - - - - - dmnd - This tag describes the structure containing invariant and localizable - versions of the device manufacturer for display - - - - - dmdd - This tag describes the structure containing invariant and localizable - versions of the device model for display. - - - - - devs - Removed in V4 - - - - - D2B0 - This tag defines a color transform from Device to PCS. It supports float32Number-encoded - input range, output range and transform, and provides a means to override the AToB0 tag - - - - - D2B1 - This tag defines a color transform from Device to PCS. It supports float32Number-encoded - input range, output range and transform, and provides a means to override the AToB1 tag - - - - - D2B2 - This tag defines a color transform from Device to PCS. It supports float32Number-encoded - input range, output range and transform, and provides a means to override the AToB1 tag - - - - - D2B3 - This tag defines a color transform from Device to PCS. It supports float32Number-encoded - input range, output range and transform, and provides a means to override the AToB1 tag - - - - - gamt - This tag provides a table in which PCS values are the input and a single - output value for each input value is the output. If the output value is 0, the PCS color is in-gamut. - If the output is non-zero, the PCS color is out-of-gamut - - - - - kTRC - This tag contains the grey tone reproduction curve. The tone reproduction curve provides the necessary - information to convert between a single device channel and the PCSXYZ or PCSLAB encoding. - - - - - gXYZ - This tag contains the second column in the matrix, which is used in matrix/TRC transforms. - - - - - gTRC - This tag contains the green channel tone reproduction curve. The first element represents no - colorant (white) or phosphor (black) and the last element represents 100 % colorant (green) or 100 % phosphor (green). - - - - - lumi - This tag contains the absolute luminance of emissive devices in candelas per square meter as described by the Y channel. - - - - - meas - This tag describes the alternative measurement specification, such as a D65 illuminant instead of the default D50. - - - - - bkpt - Removed in V4 - - - - - wtpt - This tag, which is used for generating the ICC-absolute colorimetric intent, specifies the chromatically - adapted nCIEXYZ tristimulus values of the media white point. - - - - - ncol - OBSOLETE, use - - - - - ncl2 - This tag contains the named color information providing a PCS and optional device representation - for a list of named colors. - - - - - resp - This tag describes the structure containing a description of the device response for which the profile is intended. - - - - - rig0 - There is only one standard reference medium gamut, as defined in ISO 12640-3 - - - - - pre0 - This tag contains the preview transformation from PCS to device space and back to the PCS. - - - - - pre1 - This tag defines the preview transformation from PCS to device space and back to the PCS. - - - - - pre2 - This tag contains the preview transformation from PCS to device space and back to the PCS. - - - - - desc - This tag describes the structure containing invariant and localizable versions of the profile - description for display. - - - - - pseq - This tag describes the structure containing a description of the profile sequence from source to - destination, typically used with the DeviceLink profile. - - - - - psd0 - Removed in V4 - - - - - psd1 - Removed in V4 - - - - - psd2 - Removed in V4 - - - - - psd3 - Removed in V4 - - - - - ps2s - Removed in V4 - - - - - psd2i- Removed in V4 - - - - - rXYZ - This tag contains the first column in the matrix, which is used in matrix/TRC transforms. - - - - - This tag contains the red channel tone reproduction curve. The first element represents no colorant - (white) or phosphor (black) and the last element represents 100 % colorant (red) or 100 % phosphor (red). - - - - - rig2 - There is only one standard reference medium gamut, as defined in ISO 12640-3. - - - - - scrd - Removed in V4 - - - - - scrn - Removed in V4 - - - - - tech - The device technology signature - - - - - bfd - Removed in V4 - - - - - vued - This tag describes the structure containing invariant and localizable - versions of the viewing conditions. - - - - - view - This tag defines the viewing conditions parameters - - - - - Rendering intent - - - - - In perceptual transforms the PCS values represent hypothetical - measurements of a color reproduction on the reference reflective - medium. By extension, for the perceptual intent, the PCS represents - the appearance of that reproduction as viewed in the reference viewing - environment by a human observer adapted to that environment. The exact - color rendering of the perceptual intent is vendor specific. - - - - - Transformations for this intent shall re-scale the in-gamut, - chromatically adapted tristimulus values such that the white - point of the actual medium is mapped to the PCS white point - (for either input or output) - - - - - The exact color rendering of the saturation intent is vendor - specific and involves compromises such as trading off - preservation of hue in order to preserve the vividness of pure colors. - - - - - Transformations for this intent shall leave the chromatically - adapted nCIEXYZ tristimulus values of the in-gamut colors unchanged. - - - - - Screening flags. Can be combined with a logical OR. - - - - - No flags (equivalent to NotDefaultScreens and UnitLinesPerCm) - - - - - Use printer default screens - - - - - Don't use printer default screens - - - - - Frequency units in Lines/Inch - - - - - Frequency units in Lines/cm - - - - - Enumerates the screening spot types - - - - - Unknown spot type - - - - - Default printer spot type - - - - - Round stop type - - - - - Diamond spot type - - - - - Ellipse spot type - - - - - Line spot type - - - - - Square spot type - - - - - Cross spot type - - - - - Signature Name - - - - - Unknown signature - - - - - Scene Colorimetry Estimates - - - - - Scene Appearance Estimates - - - - - Focal Plane Colorimetry Estimates - - - - - Reflection Hardcopy Original Colorimetry - - - - - Reflection Print Output Colorimetry - - - - - Perceptual Reference Medium Gamut - - - - - Film Scanner - - - - - Digital Camera - - - - - Reflective Scanner - - - - - InkJet Printer - - - - - Thermal Wax Printer - - - - - Electrophotographic Printer - - - - - Electrostatic Printer - - - - - Dye Sublimation Printer - - - - - Photographic Paper Printer - - - - - Film Writer - - - - - Video Monitor - - - - - Video Camera - - - - - Projection Television - - - - - Cathode Ray Tube Display - - - - - Passive Matrix Display - - - - - Active Matrix Display - - - - - Photo CD - - - - - Photographic Image Setter - - - - - Gravure - - - - - Offset Lithography - - - - - Silkscreen - - - - - Flexography - - - - - Motion Picture Film Scanner - - - - - Motion Picture Film Recorder - - - - - Digital Motion Picture Camera - - - - - Digital Cinema Projector - - - - - Standard Illuminant - - - - - Unknown illuminant - - - - - D50 illuminant - - - - - D65 illuminant - - - - - D93 illuminant - - - - - F2 illuminant - - - - - D55 illuminant - - - - - A illuminant - - - - - D50 illuminant - - - - - F8 illuminant - - - - - Standard Observer - - - - - Unknown observer - - - - - CIE 1931 observer - - - - - CIE 1964 observer - - - - - Type Signature - - - - - Unknown type signature - - - - - The chromaticity tag type provides basic chromaticity data and type of - phosphors or colorants of a monitor to applications and utilities - - - - - This is an optional tag which specifies the laydown order in which colorants - will be printed on an n-colorant device. The laydown order may be the same - as the channel generation order listed in the colorantTableTag or the channel - order of a color encoding type such as CMYK, in which case this tag is not - needed. When this is not the case (for example, ink-towers sometimes use - the order KCMY), this tag may be used to specify the laydown order of the - colorants - - - - - The purpose of this tag is to identify the colorants used in the profile - by a unique name and set of PCSXYZ or PCSLAB values to give the colorant - an unambiguous value. The first colorant listed is the colorant of the - first device channel of a LUT tag. The second colorant listed is the - colorant of the second device channel of a LUT tag, and so on - - - - - The curveType embodies a one-dimensional function which maps an input - value in the domain of the function to an output value in the range - of the function - - - - - The dataType is a simple data structure that contains either 7-bit ASCII - or binary data - - - - - Date and time defined by 6 unsigned 16bit integers - (year, month, day, hour, minute, second) - - - - - This structure represents a color transform using tables with 16-bit - precision. This type contains four processing elements: a 3 × 3 matrix - (which shall be the identity matrix unless the input color space is - PCSXYZ), a set of one-dimensional input tables, a multi-dimensional - lookup table, and a set of one-dimensional output tables - - - - - This structure represents a color transform using tables of 8-bit - precision. This type contains four processing elements: a 3 × 3 matrix - (which shall be the identity matrix unless the input color space is - PCSXYZ), a set of one-dimensional input tables, a multi-dimensional - lookup table, and a set of one-dimensional output tables. - - - - - This structure represents a color 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 × 3 - matrix with offset terms, a set of one-dimensional curves, a - multi-dimensional lookup table, and a set of one-dimensional - output curves - - - - - This structure represents a color transform. The type contains - up to five processing elements which are stored in the BToATag - in the following order: a set of one-dimensional curves, a 3 × 3 - matrix with offset terms, a set of one-dimensional curves, a - multi-dimensional lookup table, and a set of one-dimensional curves. - - - - - This information refers only to the internal - profile data and is meant to provide profile makers an alternative - to the default measurement specifications - - - - - This tag structure contains a set of records each referencing a - multilingual Unicode string associated with a profile. Each string - is referenced in a separate record with the information about what - language and region the string is for. - - - - - This structure represents a color transform, containing a sequence - of processing elements. The processing elements contained in the - structure are defined in the structure itself, allowing for a flexible - structure. Currently supported processing elements are: a set of one - dimensional curves, a matrix with offset terms, and a multidimensional - lookup table (CLUT). Other processing element types may be added in - the future. Each type of processing element may be contained any - number of times in the structure. - - - - - This type is a count value and array of structures that provide color - coordinates for color names. For each named color, a PCS and optional - device representation of the color are given. Both representations are - 16-bit values and PCS values shall be relative colorimetric. The device - representation corresponds to the header’s "data color space" field. - This representation should be consistent with the "number of device - coordinates" 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. - - - - - This type describes a one-dimensional curve by specifying one of a - predefined set of functions using the parameters. - - - - - 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. - - - - - This type is an array of structures, each of which contains information - for identification of a profile used in a sequence. - - - - - The purpose of this tag type is to provide a mechanism to relate physical - colorant amounts with the normalized device codes produced by lut8Type, - lut16Type, lutAToBType, lutBToAType or multiProcessElementsType tags - so that corrections can be made for variation in the device without - having to produce a new profile. The mechanism can be used by applications - to allow users with relatively inexpensive and readily available - instrumentation to apply corrections to individual output color - channels in order to achieve consistent results. - - - - - Array of signed floating point numbers with 1 sign bit, 15 value bits and 16 fractional bits - - - - - The signatureType contains a 4-byte sequence. Sequences of less than four - characters are padded at the end with spaces. Typically this type is used - for registered tags that can be displayed on many development systems as - a sequence of four characters. - - - - - Simple ASCII text - - - - - Array of unsigned floating point numbers with 16 value bits and 16 fractional bits - - - - - Array of unsigned 16bit integers (ushort) - - - - - Array of unsigned 32bit integers (uint) - - - - - Array of unsigned 64bit integers (ulong) - - - - - Array of unsigned 8bit integers (byte) - - - - - This type represents a set of viewing condition parameters. - - - - - 3 floating point values describing a XYZ color value - - - - - REMOVED IN V4 - The textDescriptionType is a complex structure that contains three - types of text description structures: 7-bit ASCII, Unicode and ScriptCode. Since no - single standard method for specifying localizable character sets exists across - the major platform vendors, including all three provides access for the major - operating systems. The 7-bit ASCII description is to be an invariant, - nonlocalizable name for consistent reference. It is preferred that both the - Unicode and ScriptCode structures be properly localized. - - - - - REMOVED IN V4 - This type contains the PostScript product name to which this - profile corresponds and the names of the companion CRDs - - - - - REMOVED IN V4 - The screeningType describes various screening parameters including - screen frequency, screening angle, and spot shape - - - - - REMOVED IN V4 - 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 and BG - - - - - REMOVED IN V4 - This type is an array of structures each of which contains - platform-specific information about the settings of the device for which - this profile is valid. This type is not supported. - - - - - REMOVED IN V2 - use instead. This type is not supported. - - - - - Represents an error that happened while reading or writing a corrupt/invalid ICC profile - - - - - Initializes a new instance of the class. - - The message that describes the error - - - - Initializes a new instance of the class. - - The message that describes the error - The exception that is the cause of the current exception, or a null reference - (Nothing in Visual Basic) if no inner exception is specified - - - - Represents an ICC profile - - - - - The byte array to read the ICC profile from - - - - - The backing file for the property - - - - - ICC profile header - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The raw ICC profile data - - - - Initializes a new instance of the class. - - The profile header - The actual profile data - - - - Initializes a new instance of the class - by making a copy from another ICC profile. - - The other ICC profile, where the clone should be made from. - is null.> - - - - Gets or sets the profile header - - - - - Gets the actual profile data - - - - - - - - Calculates the MD5 hash value of an ICC profile - - The data of which to calculate the hash value - The calculated hash - - - - Checks for signs of a corrupt profile. - - This is not an absolute proof of validity but should weed out most corrupt data. - True if the profile is valid; False otherwise - - - - Converts this instance to a byte array. - - The - - - - Contains all values of an ICC profile header. - - - - - Gets or sets the profile size in bytes (will be ignored when writing a profile). - - - - - Gets or sets the preferred CMM (Color Management Module) type. - - - - - Gets or sets the profiles version number. - - - - - Gets or sets the type of the profile. - - - - - Gets or sets the data colorspace. - - - - - Gets or sets the profile connection space. - - - - - Gets or sets the date and time this profile was created. - - - - - Gets or sets the file signature. Should always be "acsp". - Value will be ignored when writing a profile. - - - - - Gets or sets the primary platform this profile as created for - - - - - Gets or sets the profile flags to indicate various options for the CMM - such as distributed processing and caching options. - - - - - Gets or sets the device manufacturer of the device for which this profile is created. - - - - - Gets or sets the model of the device for which this profile is created. - - - - - Gets or sets the device attributes unique to the particular device setup such as media type. - - - - - Gets or sets the rendering Intent. - - - - - Gets or sets The normalized XYZ values of the illuminant of the PCS. - - - - - Gets or sets profile creator signature. - - - - - Gets or sets the profile ID (hash). - - - - - Reads and parses ICC data from a byte array - - - - - Reads an ICC profile - - The raw ICC data - The read ICC profile - - - - Reads an ICC profile header - - The raw ICC data - The read ICC profile header - - - - Reads the ICC profile tag data - - The raw ICC data - The read ICC profile tag data - - - - The data of an ICC tag entry - - - - - Initializes a new instance of the class. - TagSignature will be - - Type Signature - - - - Initializes a new instance of the class. - - Type Signature - Tag Signature - - - - Gets the type Signature - - - - - Gets or sets the tag Signature - - - - - - - - - - - - - - Contains methods for writing ICC profiles. - - - - - Writes the ICC profile into a byte array - - The ICC profile to write - The ICC profile as a byte array - - - - A placeholder (might be used for future ICC versions) - - - - - Initializes a new instance of the class. - - Number of input channels - Number of output channels - - - - - - - A CLUT (color lookup table) element to process data - - - - - Initializes a new instance of the class. - - The color lookup table of this element - - - - Gets the color lookup table of this element - - - - - - - - - - - A set of curves to process data - - - - - Initializes a new instance of the class. - - An array with one dimensional curves - - - - Gets an array of one dimensional curves - - - - - - - - - - - A placeholder (might be used for future ICC versions) - - - - - Initializes a new instance of the class. - - Number of input channels - Number of output channels - - - - - - - A matrix element to process data - - - - - Initializes a new instance of the class. - - Two dimensional matrix with size of Input-Channels x Output-Channels - One dimensional matrix with size of Output-Channels x 1 - - - - Gets the two dimensional matrix with size of Input-Channels x Output-Channels - - - - - Gets the one dimensional matrix with size of Output-Channels x 1 - - - - - - - - - - - An element to process data - - - - - Initializes a new instance of the class. - - The signature of this element - Number of input channels - Number of output channels - - - - Gets the signature of this element, - - - - - Gets the number of input channels - - - - - Gets the number of output channels. - - - - - - - - The chromaticity tag type provides basic chromaticity data - and type of phosphors or colorants of a monitor to applications and utilities. - - - - - Initializes a new instance of the class. - - Colorant Type - - - - Initializes a new instance of the class. - - Values per channel - - - - Initializes a new instance of the class. - - Colorant Type - Tag Signature - - - - Initializes a new instance of the class. - - Values per channel - Tag Signature - - - - Gets the number of channels - - - - - Gets the colorant type - - - - - Gets the values per channel - - - - - - - - - - - - - - - - - This tag specifies the laydown order in which colorants - will be printed on an n-colorant device. - - - - - Initializes a new instance of the class. - - Colorant order numbers - - - - Initializes a new instance of the class. - - Colorant order numbers - Tag Signature - - - - Gets the colorant order numbers - - - - - - - - - - - - - - - - - The purpose of this tag is to identify the colorants used in - the profile by a unique name and set of PCSXYZ or PCSLAB values - to give the colorant an unambiguous value. - - - - - Initializes a new instance of the class. - - Colorant Data - - - - Initializes a new instance of the class. - - Colorant Data - Tag Signature - - - - Gets the colorant data - - - - - - - - - - - - - - - - - This type contains the PostScript product name to which this profile - corresponds and the names of the companion CRDs - - - - - Initializes a new instance of the class. - - the PostScript product name - the rendering intent 0 CRD name - the rendering intent 1 CRD name - the rendering intent 2 CRD name - the rendering intent 3 CRD name - - - - Initializes a new instance of the class. - - the PostScript product name - the rendering intent 0 CRD name - the rendering intent 1 CRD name - the rendering intent 2 CRD name - the rendering intent 3 CRD name - Tag Signature - - - - Gets the PostScript product name - - - - - Gets the rendering intent 0 CRD name - - - - - Gets the rendering intent 1 CRD name - - - - - Gets the rendering intent 2 CRD name - - - - - Gets the rendering intent 3 CRD name - - - - - - - - - - - - - - - - - The type contains a one-dimensional table of double values. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - Gamma value - - - - Initializes a new instance of the class. - - Curve Data - - - - Initializes a new instance of the class. - - Tag Signature - - - - Initializes a new instance of the class. - - Gamma value - Tag Signature - - - - Initializes a new instance of the class. - - Curve Data - Tag Signature - - - - Gets the curve data - - - - - Gets the gamma value. - Only valid if is true - - - - - Gets a value indicating whether the curve maps input directly to output. - - - - - Gets a value indicating whether the curve is a gamma curve. - - - - - - - - - - - - - - - - - The dataType is a simple data structure that contains - either 7-bit ASCII or binary data, i.e. textType data or transparent bytes. - - - - - Initializes a new instance of the class. - - The raw data - - - - Initializes a new instance of the class. - - The raw data - True if the given data is 7bit ASCII encoded text - - - - Initializes a new instance of the class. - - The raw data - True if the given data is 7bit ASCII encoded text - Tag Signature - - - - Gets the raw Data - - - - - Gets a value indicating whether the represents 7bit ASCII encoded text - - - - - Gets the decoded as 7bit ASCII. - If is false, returns null - - - - - - - - - - - - - - - - - This type is a representation of the time and date. - - - - - Initializes a new instance of the class. - - The DateTime value - - - - Initializes a new instance of the class. - - The DateTime value - Tag Signature - - - - Gets the date and time value - - - - - - - - - - - - - - - - - This type represents an array of doubles (from 32bit fixed point values). - - - - - Initializes a new instance of the class. - - The array data - - - - Initializes a new instance of the class. - - The array data - Tag Signature - - - - Gets the array data - - - - - - - - - - - - - - - - - This structure represents a color transform using tables - with 16-bit precision. - - - - - Initializes a new instance of the class. - - Input LUT - CLUT - Output LUT - - - - Initializes a new instance of the class. - - Input LUT - CLUT - Output LUT - Tag Signature - - - - Initializes a new instance of the class. - - Conversion matrix (must be 3x3) - Input LUT - CLUT - Output LUT - - - - Initializes a new instance of the class. - - Conversion matrix (must be 3x3) - Input LUT - CLUT - Output LUT - Tag Signature - - - - Gets the number of input channels - - - - - Gets the number of output channels - - - - - Gets the conversion matrix - - - - - Gets the input lookup table - - - - - Gets the color lookup table - - - - - Gets the output lookup table - - - - - - - - - - - - - - - - - This structure represents a color transform using tables - with 8-bit precision. - - - - - Initializes a new instance of the class. - - Input LUT - CLUT - Output LUT - - - - Initializes a new instance of the class. - - Input LUT - CLUT - Output LUT - Tag Signature - - - - Initializes a new instance of the class. - - Conversion matrix (must be 3x3) - Input LUT - CLUT - Output LUT - - - - Initializes a new instance of the class. - - Conversion matrix (must be 3x3) - Input LUT - CLUT - Output LUT - Tag Signature - - - - Gets the number of input channels - - - - - Gets the number of output channels - - - - - Gets the conversion matrix - - - - - Gets the input lookup table - - - - - Gets the color lookup table - - - - - Gets the output lookup table - - - - - - - - - - - - - - - - - This structure represents a color transform. - - - - - Initializes a new instance of the class. - - B Curve - Two dimensional conversion matrix (3x3) - One dimensional conversion matrix (3x1) - M Curve - CLUT - A Curve - - - - Initializes a new instance of the class. - - B Curve - Two dimensional conversion matrix (3x3) - One dimensional conversion matrix (3x1) - M Curve - CLUT - A Curve - Tag Signature - - - - Gets the number of input channels - - - - - Gets the number of output channels - - - - - Gets the two dimensional conversion matrix (3x3) - - - - - Gets the one dimensional conversion matrix (3x1) - - - - - Gets the color lookup table - - - - - Gets the B Curve - - - - - Gets the M Curve - - - - - Gets the A Curve - - - - - - - - - - - - - - - - - This structure represents a color transform. - - - - - Initializes a new instance of the class. - - B Curve - Two dimensional conversion matrix (3x3) - One dimensional conversion matrix (3x1) - M Curve - CLUT - A Curve - - - - Initializes a new instance of the class. - - B Curve - Two dimensional conversion matrix (3x3) - One dimensional conversion matrix (3x1) - M Curve - CLUT - A Curve - Tag Signature - - - - Gets the number of input channels - - - - - Gets the number of output channels - - - - - Gets the two dimensional conversion matrix (3x3) - - - - - Gets the one dimensional conversion matrix (3x1) - - - - - Gets the color lookup table - - - - - Gets the B Curve - - - - - Gets the M Curve - - - - - Gets the A Curve - - - - - - - - - - - - - - - - - The measurementType information refers only to the internal - profile data and is meant to provide profile makers an alternative - to the default measurement specifications. - - - - - Initializes a new instance of the class. - - Observer - XYZ Backing values - Geometry - Flare - Illuminant - - - - Initializes a new instance of the class. - - Observer - XYZ Backing values - Geometry - Flare - Illuminant - Tag Signature - - - - Gets the observer - - - - - Gets the XYZ Backing values - - - - - Gets the geometry - - - - - Gets the flare - - - - - Gets the illuminant - - - - - - - - - - - - - - - - - This tag structure contains a set of records each referencing - a multilingual string associated with a profile. - - - - - Initializes a new instance of the class. - - Localized Text - - - - Initializes a new instance of the class. - - Localized Text - Tag Signature - - - - Gets the localized texts - - - - - - - - - - - - - - - - - This structure represents a color transform, containing - a sequence of processing elements. - - - - - Initializes a new instance of the class. - - Processing elements - - - - Initializes a new instance of the class. - - Processing elements - Tag Signature - - - - Gets the number of input channels - - - - - Gets the number of output channels - - - - - Gets the processing elements - - - - - - - - - - - - - - - - - The namedColor2Type is a count value and array of structures - that provide color coordinates for color names. - - - - - Initializes a new instance of the class. - - The named colors - - - - Initializes a new instance of the class. - - Prefix - Suffix - /// The named colors - - - - Initializes a new instance of the class. - - Vendor specific flags - Prefix - Suffix - The named colors - - - - Initializes a new instance of the class. - - The named colors - Tag Signature - - - - Initializes a new instance of the class. - - Prefix - Suffix - The named colors - Tag Signature - - - - Initializes a new instance of the class. - - Vendor specific flags - Prefix - Suffix - The named colors - Tag Signature - - - - Gets the number of coordinates - - - - - Gets the prefix - - - - - Gets the suffix - - - - - Gets the vendor specific flags - - - - - Gets the named colors - - - - - - - - - - - - - - - - - The parametricCurveType describes a one-dimensional curve by - specifying one of a predefined set of functions using the parameters. - - - - - Initializes a new instance of the class. - - The Curve - - - - Initializes a new instance of the class. - - The Curve - Tag Signature - - - - Gets the Curve - - - - - - - - - - - - - - - - - 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. - - - - - Initializes a new instance of the class. - - Profile Descriptions - - - - Initializes a new instance of the class. - - Profile Descriptions - Tag Signature - - - - Gets the profile descriptions - - - - - - - - - - - - - - - - - This type is an array of structures, each of which contains information - for identification of a profile used in a sequence. - - - - - Initializes a new instance of the class. - - Profile Identifiers - - - - Initializes a new instance of the class. - - Profile Identifiers - Tag Signature - - - - Gets the profile identifiers - - - - - - - - - - - - - - - - - The purpose of this tag type is to provide a mechanism to relate physical - colorant amounts with the normalized device codes produced by lut8Type, lut16Type, - lutAToBType, lutBToAType or multiProcessElementsType tags so that corrections can - be made for variation in the device without having to produce a new profile. - - - - - Initializes a new instance of the class. - - The Curves - - - - Initializes a new instance of the class. - - The Curves - Tag Signature - - - - Gets the number of channels - - - - - Gets the curves - - - - - - - - - - - - - - - - - This type describes various screening parameters including - screen frequency, screening angle, and spot shape. - - - - - Initializes a new instance of the class. - - Screening flags - Channel information - - - - Initializes a new instance of the class. - - Screening flags - Channel information - Tag Signature - - - - Gets the screening flags - - - - - Gets the channel information - - - - - - - - - - - - - - - - - Typically this type is used for registered tags that can - be displayed on many development systems as a sequence of four characters. - - - - - Initializes a new instance of the class. - - The Signature - - - - Initializes a new instance of the class. - - The Signature - Tag Signature - - - - Gets the signature data - - - - - - - - - - - - - - - - - The TextDescriptionType contains three types of text description. - - - - - Initializes a new instance of the class. - - ASCII text - Unicode text - ScriptCode text - Unicode Language-Code - ScriptCode Code - - - - Initializes a new instance of the class. - - ASCII text - Unicode text - ScriptCode text - Unicode Language-Code - ScriptCode Code - Tag Signature - - - - Gets the ASCII text - - - - - Gets the Unicode text - - - - - Gets the ScriptCode text - - - - - Gets the Unicode Language-Code - - - - - Gets the ScriptCode Code - - - - - Performs an explicit conversion from - to . - - The entry to convert - The converted entry - - - - - - - - - - - - - - - - This is a simple text structure that contains a text string. - - - - - Initializes a new instance of the class. - - The Text - - - - Initializes a new instance of the class. - - The Text - Tag Signature - - - - Gets the Text - - - - - - - - - - - - - - - - - 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 and BG. - - - - - Initializes a new instance of the class. - - UCR (under color removal) curve values - BG (black generation) curve values - Description of the used UCR and BG method - - - - Initializes a new instance of the class. - - UCR (under color removal) curve values - BG (black generation) curve values - Description of the used UCR and BG method - Tag Signature - - - - Gets the UCR (under color removal) curve values - - - - - Gets the BG (black generation) curve values - - - - - Gets a description of the used UCR and BG method - - - - - - - - - - - - - - - - - This type represents an array of doubles (from 32bit values). - - - - - Initializes a new instance of the class. - - The array data - - - - Initializes a new instance of the class. - - The array data - Tag Signature - - - - Gets the array data. - - - - - - - - - - - - - - - - - This type represents an array of unsigned shorts. - - - - - Initializes a new instance of the class. - - The array data - - - - Initializes a new instance of the class. - - The array data - Tag Signature - - - - Gets the array data - - - - - - - - - - - - - - - - - This type represents an array of unsigned 32bit integers. - - - - - Initializes a new instance of the class. - - The array data - - - - Initializes a new instance of the class. - - The array data - Tag Signature - - - - Gets the array data - - - - - - - - - - - - - - - - - This type represents an array of unsigned 64bit integers. - - - - - Initializes a new instance of the class. - - The array data - - - - Initializes a new instance of the class. - - The array data - Tag Signature - - - - Gets the array data - - - - - - - - - - - - - - - - - This type represents an array of bytes. - - - - - Initializes a new instance of the class. - - The array data - - - - Initializes a new instance of the class. - - The array data - Tag Signature - - - - Gets the array data. - - - - - - - - - - - - - - - - - This tag stores data of an unknown tag data entry - - - - - Initializes a new instance of the class. - - The raw data of the entry - - - - Initializes a new instance of the class. - - The raw data of the entry - Tag Signature - - - - Gets the raw data of the entry. - - - - - - - - - - - - - - - - - This type represents a set of viewing condition parameters. - - - - - Initializes a new instance of the class. - - XYZ values of Illuminant - XYZ values of Surrounding - Illuminant - - - - Initializes a new instance of the class. - - XYZ values of Illuminant - XYZ values of Surrounding - Illuminant - Tag Signature - - - - Gets the XYZ values of illuminant. - - - - - Gets the XYZ values of Surrounding - - - - - Gets the illuminant. - - - - - - - - - - - - - - - - - The XYZType contains an array of XYZ values. - - - - - Initializes a new instance of the class. - - The XYZ numbers. - - - - Initializes a new instance of the class. - - The XYZ numbers - Tag Signature - - - - Gets the XYZ numbers. - - - - - - - - - - - Color Lookup Table - - - - - Initializes a new instance of the class. - - The CLUT values - The gridpoint count - The data type of this CLUT - - - - Initializes a new instance of the class. - - The CLUT values - The gridpoint count - - - - Initializes a new instance of the class. - - The CLUT values - The gridpoint count - - - - Gets the values that make up this table - - - - - Gets the CLUT data type (important when writing a profile) - - - - - Gets the number of input channels - - - - - Gets the number of output channels - - - - - Gets the number of grid points per input channel - - - - - - - - - - - - - - Entry of ICC colorant table - - - - - Initializes a new instance of the struct. - - Name of the colorant - - - - Initializes a new instance of the struct. - - Name of the colorant - First PCS value - Second PCS value - Third PCS value - - - - Gets the colorant name. - - - - - Gets the first PCS value. - - - - - Gets the second PCS value. - - - - - Gets the third PCS value. - - - - - Compares two objects for equality. - - - The on the left side of the operand. - - - The on the right side of the operand. - - - True if the parameter is equal to the parameter; otherwise, false. - - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is not equal to the parameter; otherwise, false. - - - - - - - - - - - - - - - - - A string with a specific locale. - - - - - Initializes a new instance of the struct. - The culture will be - - The text value of this string - - - - Initializes a new instance of the struct. - The culture will be - - The culture of this string - The text value of this string - - - - Gets the text value. - - - - - Gets the culture of text. - - - - - - - - - - - Lookup Table - - - - - Initializes a new instance of the struct. - - The LUT values - - - - Initializes a new instance of the struct. - - The LUT values - - - - Initializes a new instance of the struct. - - The LUT values - - - - Gets the values that make up this table - - - - - - - - A specific color with a name - - - - - Initializes a new instance of the struct. - - Name of the color - Coordinates of the color in the profiles PCS - Coordinates of the color in the profiles Device-Space - - - - Gets the name of the color - - - - - Gets the coordinates of the color in the profiles PCS - - - - - Gets the coordinates of the color in the profiles Device-Space - - - - - Compares two objects for equality. - - - The on the left side of the operand. - - - The on the right side of the operand. - - - True if the parameter is equal to the parameter; otherwise, false. - - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is not equal to the parameter; otherwise, false. - - - - - - - - - - - - - - - - - Position of an object within an ICC profile - - - - - Initializes a new instance of the struct. - - Offset in bytes - Size in bytes - - - - Gets the offset in bytes - - - - - Gets the size in bytes - - - - - Compares two objects for equality. - - - The on the left side of the operand. - - - The on the right side of the operand. - - - True if the parameter is equal to the parameter; otherwise, false. - - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is not equal to the parameter; otherwise, false. - - - - - - - - - - - - - - - - - ICC Profile description - - - - - Initializes a new instance of the struct. - - Device Manufacturer - Device Model - Device Attributes - Technology Information - Device Manufacturer Info - Device Model Info - - - - Gets the device manufacturer. - - - - - Gets the device model. - - - - - Gets the device attributes. - - - - - Gets the technology information. - - - - - Gets the device manufacturer info. - - - - - Gets the device model info. - - - - - - - - - - - - - - ICC Profile ID - - - - - A profile ID with all values set to zero - - - - - Initializes a new instance of the struct. - - Part 1 of the ID - Part 2 of the ID - Part 3 of the ID - Part 4 of the ID - - - - Gets the first part of the ID. - - - - - Gets the second part of the ID. - - - - - Gets the third part of the ID. - - - - - Gets the fourth part of the ID. - - - - - Gets a value indicating whether the ID is set or just consists of zeros. - - - - - Compares two objects for equality. - - - The on the left side of the operand. - - - The on the right side of the operand. - - - True if the parameter is equal to the parameter; otherwise, false. - - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is not equal to the parameter; otherwise, false. - - - - - - - - - - - - - - - - - Description of a profile within a sequence. - - - - - Initializes a new instance of the struct. - - ID of the profile - Description of the profile - - - - Gets the ID of the profile. - - - - - Gets the description of the profile. - - - - - - - - - - - - - - Associates a normalized device code with a measurement value - - - - - Initializes a new instance of the struct. - - Device Code - Measurement Value - - - - Gets the device code - - - - - Gets the measurement value - - - - - Compares two objects for equality. - - - The on the left side of the operand. - - - The on the right side of the operand. - - - True if the parameter is equal to the parameter; otherwise, false. - - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is not equal to the parameter; otherwise, false. - - - - - - - - - - - - - - - - - A single channel of a - - - - - Initializes a new instance of the struct. - - Screen frequency - Angle in degrees - Spot shape - - - - Gets the screen frequency. - - - - - Gets the angle in degrees. - - - - - Gets the spot shape - - - - - Compares two objects for equality. - - - The on the left side of the operand. - - - The on the right side of the operand. - - - True if the parameter is equal to the parameter; otherwise, false. - - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is not equal to the parameter; otherwise, false. - - - - - - - - - - - - - - - - - Entry of ICC tag table - - - - - Initializes a new instance of the struct. - - Signature of the tag - Offset of entry in bytes - Size of entry in bytes - - - - Gets the signature of the tag. - - - - - Gets the offset of entry in bytes. - - - - - Gets the size of entry in bytes. - - - - - Compares two objects for equality. - - - The on the left side of the operand. - - - The on the right side of the operand. - - - True if the parameter is equal to the parameter; otherwise, false. - - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is not equal to the parameter; otherwise, false. - - - - - - - - - - - - - - - - - Represents the ICC profile version number. - - - - - Initializes a new instance of the struct. - - The major version number. - The minor version number. - The patch version number. - - - - Gets the major version number. - - - - - Gets the minor version number. - - - - - Gets the patch number. - - - - - - - - - - - Represents an IPTC profile providing access to the collection of values. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The byte array to read the iptc profile from. - - - - Initializes a new instance of the class - by making a copy from another IPTC profile. - - The other IPTC profile, from which the clone should be made from. - - - - Gets the byte data of the IPTC profile. - - - - - Gets the values of this iptc profile. - - - - - - - - Returns all values with the specified tag. - - The tag of the iptc value. - The values found with the specified tag. - - - - Removes all values with the specified tag. - - The tag of the iptc value to remove. - True when the value was found and removed. - - - - Removes values with the specified tag and value. - - The tag of the iptc value to remove. - The value of the iptc item to remove. - True when the value was found and removed. - - - - Changes the encoding for all the values. - - The encoding to use when storing the bytes. - - - - Sets the value for the specified tag. - - The tag of the iptc value. - The encoding to use when storing the bytes. - The value. - - Indicates if length restrictions from the specification should be followed strictly. - Defaults to true. - - - - - Makes sure the datetime is formatted according to the iptc specification. - - A date will be formatted as CCYYMMDD, e.g. "19890317" for 17 March 1989. - A time value will be formatted as HHMMSS±HHMM, e.g. "090000+0200" for 9 o'clock Berlin time, - two hours ahead of UTC. - - - The tag of the iptc value. - The datetime. - - - - Sets the value of the specified tag. - - The tag of the iptc value. - The value. - - Indicates if length restrictions from the specification should be followed strictly. - Defaults to true. - - - - - Updates the data of the profile. - - - - - Provides enumeration of all IPTC tags relevant for images. - - - - - Unknown. - - - - - Record version identifying the version of the Information Interchange Model. - Not repeatable. Max length is 2. - - - - - Object type, not repeatable. Max Length is 67. - - - - - Object attribute. Max length is 68. - - - - - Object Name, not repeatable. Max length is 64. - - - - - Edit status, not repeatable. Max length is 64. - - - - - Editorial update, not repeatable. Max length is 2. - - - - - Urgency, not repeatable. Max length is 2. - - - - - Subject Reference. Max length is 236. - - - - - Category, not repeatable. Max length is 3. - - - - - Supplemental categories. Max length is 32. - - - - - Fixture identifier, not repeatable. Max length is 32. - - - - - Keywords. Max length is 64. - - - - - Location code. Max length is 3. - - - - - Location name. Max length is 64. - - - - - Release date. Format should be CCYYMMDD. - Not repeatable, max length is 8. - - A date will be formatted as CCYYMMDD, e.g. "19890317" for 17 March 1989. - - - - - - Release time. Format should be HHMMSS±HHMM. - Not repeatable, max length is 11. - - A time value will be formatted as HHMMSS±HHMM, e.g. "090000+0200" for 9 o'clock Berlin time, - two hours ahead of UTC. - - - - - - Expiration date. Format should be CCYYMMDD. - Not repeatable, max length is 8. - - A date will be formatted as CCYYMMDD, e.g. "19890317" for 17 March 1989. - - - - - - Expiration time. Format should be HHMMSS±HHMM. - Not repeatable, max length is 11. - - A time value will be formatted as HHMMSS±HHMM, e.g. "090000+0200" for 9 o'clock Berlin time, - two hours ahead of UTC. - - - - - - Special instructions, not repeatable. Max length is 256. - - - - - Action advised, not repeatable. Max length is 2. - - - - - Reference service. Max length is 10. - - - - - Reference date. Format should be CCYYMMDD. - Not repeatable, max length is 8. - - A date will be formatted as CCYYMMDD, e.g. "19890317" for 17 March 1989. - - - - - - ReferenceNumber. Max length is 8. - - - - - Created date. Format should be CCYYMMDD. - Not repeatable, max length is 8. - - A date will be formatted as CCYYMMDD, e.g. "19890317" for 17 March 1989. - - - - - - Created time. Format should be HHMMSS±HHMM. - Not repeatable, max length is 11. - - A time value will be formatted as HHMMSS±HHMM, e.g. "090000+0200" for 9 o'clock Berlin time, - two hours ahead of UTC. - - - - - - Digital creation date. Format should be CCYYMMDD. - Not repeatable, max length is 8. - - A date will be formatted as CCYYMMDD, e.g. "19890317" for 17 March 1989. - - - - - - Digital creation time. Format should be HHMMSS±HHMM. - Not repeatable, max length is 11. - - A time value will be formatted as HHMMSS±HHMM, e.g. "090000+0200" for 9 o'clock Berlin time, - two hours ahead of UTC. - - - - - - Originating program, not repeatable. Max length is 32. - - - - - Program version, not repeatable. Max length is 10. - - - - - Object cycle, not repeatable. Max length is 1. - - - - - Byline. Max length is 32. - - - - - Byline title. Max length is 32. - - - - - City, not repeatable. Max length is 32. - - - - - Sub location, not repeatable. Max length is 32. - - - - - Province/State, not repeatable. Max length is 32. - - - - - Country code, not repeatable. Max length is 3. - - - - - Country, not repeatable. Max length is 64. - - - - - Original transmission reference, not repeatable. Max length is 32. - - - - - Headline, not repeatable. Max length is 256. - - - - - Credit, not repeatable. Max length is 32. - - - - - Source, not repeatable. Max length is 32. - - - - - Copyright notice, not repeatable. Max length is 128. - - - - - Contact. Max length 128. - - - - - Caption, not repeatable. Max length is 2000. - - - - - Local caption. - - - - - Caption writer. Max length is 32. - - - - - Image type, not repeatable. Max length is 2. - - - - - Image orientation, not repeatable. Max length is 1. - - - - - Custom field 1 - - - - - Custom field 2 - - - - - Custom field 3 - - - - - Custom field 4 - - - - - Custom field 5 - - - - - Custom field 6 - - - - - Custom field 7 - - - - - Custom field 8 - - - - - Custom field 9 - - - - - Custom field 10 - - - - - Custom field 11 - - - - - Custom field 12 - - - - - Custom field 13 - - - - - Custom field 14 - - - - - Custom field 15 - - - - - Custom field 16 - - - - - Custom field 17 - - - - - Custom field 18 - - - - - Custom field 19 - - - - - Custom field 20 - - - - - Extension methods for IPTC tags. - - - - - Maximum length of the IPTC value with the given tag according to the specification. - - The tag to check the max length for. - The maximum length. - - - - Determines if the given tag can be repeated according to the specification. - - The tag to check. - True, if the tag can occur multiple times. - - - - Determines if the tag is a datetime tag which needs to be formatted as CCYYMMDD. - - The tag to check. - True, if its a datetime tag. - - - - Determines if the tag is a time tag which need to be formatted as HHMMSS±HHMM. - - The tag to check. - True, if its a time tag. - - - - Represents a single value of the IPTC profile. - - - - - Gets or sets the encoding to use for the Value. - - - - - Gets the tag of the iptc value. - - - - - Gets or sets a value indicating whether to be enforce value length restrictions according - to the specification. - - - - - Gets or sets the value. - - - - - Gets the length of the value. - - - - - - - - Determines whether the specified object is equal to the current . - - The object to compare this with. - True when the specified object is equal to the current . - - - - Determines whether the specified iptc value is equal to the current . - - The iptc value to compare this with. - True when the specified iptc value is equal to the current . - - - - Serves as a hash of this type. - - A hash code for the current instance. - - - - Converts this instance to a byte array. - - A array. - - - - Returns a string that represents the current value. - - A string that represents the current value. - - - - Returns a string that represents the current value with the specified encoding. - - The encoding to use. - A string that represents the current value with the specified encoding. - - - - Helper methods for packing and unpacking floating point values - - - - - Packs a into an - - The float to pack - The - - - - Packs an into a - - The integer to pack. - The - - - - Unpacks a into a . - - The value. - The . - - - - Maps the position of number types in memory - - - - - The float. - - - - - The integer. - - - - - The unsigned integer. - - - - - This interface exists for ensuring signature compatibility to MonoGame and XNA packed color types. - - - The packed format. uint, long, float. - - - - Gets or sets the packed representation of the value. - - - - - An interface that represents a generic pixel type. - The naming convention of each pixel format is to order the color components from least significant to most significant, reading from left to right. - For example in the pixel format the R component is the least significant byte, and the A component is the most significant. - - The type implementing this interface - - - - Creates a instance for this pixel type. - This method is not intended to be consumed directly. Use instead. - - The instance. - - - - A base interface for all pixels, defining the mandatory operations to be implemented by a pixel type. - - - - - Initializes the pixel instance from a generic ("scaled") . - - The vector to load the pixel from. - - - - Expands the pixel into a generic ("scaled") representation - with values scaled and clamped between 0 and 1. - The vector components are typically expanded in least to greatest significance order. - - The . - - - - Initializes the pixel instance from a which is specific to the current pixel type. - - The vector to load the pixel from. - - - - Expands the pixel into a which is specific to the current pixel type. - The vector components are typically expanded in least to greatest significance order. - - The . - - - - Initializes the pixel instance from an value. - - The value. - - - - Initializes the pixel instance from an value. - - The value. - - - - Initializes the pixel instance from an value. - - The value. - - - - Initializes the pixel instance from an value. - - The value. - - - - Initializes the pixel instance from an value. - - The value. - - - - Initializes the pixel instance from an value. - - The value. - - - - Initializes the pixel instance from an value. - - The value. - - - - Initializes the pixel instance from an value. - - The value. - - - - Initializes the pixel instance from an value. - - The value. - - - - Initializes the pixel instance from an value. - - The value. - - - - Convert the pixel instance into representation. - - The reference to the destination pixel - - - - Initializes the pixel instance from an value. - - The value. - - - - Initializes the pixel instance from an value. - - The value. - - - - Enumerates the various alpha composition modes. - - - - - Returns the destination over the source. - - - - - Returns the source colors. - - - - - Returns the source over the destination. - - - - - The source where the destination and source overlap. - - - - - The destination where the destination and source overlap. - - - - - The destination where the source does not overlap it. - - - - - The source where they don't overlap otherwise dest in overlapping parts. - - - - - The destination over the source. - - - - - The destination where the destination and source overlap. - - - - - The source where the destination and source overlap. - - - - - The clear. - - - - - Clear where they overlap. - - - - - Provides enumeration of the alpha value transparency behavior of a pixel format. - - - - - Indicates that the pixel format does not contain an alpha channel. - - - - - Indicates that the transparency behavior is premultiplied. - Each color is first scaled by the alpha value. The alpha value itself is the same - in both straight and premultiplied alpha. Typically, no color channel value is - greater than the alpha channel value. - If a color channel value in a premultiplied format is greater than the alpha - channel, the standard source-over blending math results in an additive blend. - - - - - Indicates that the transparency behavior is not premultiplied. - The alpha channel indicates the transparency of the color. - - - - - Collection of Porter Duff alpha blending functions applying different composition models. - - - These functions are designed to be a general solution for all color cases, - that is, they take in account the alpha value of both the backdrop - and source, and there's no need to alpha-premultiply neither the backdrop - nor the source. - Note there are faster functions for when the backdrop color is known - to be opaque - - - - - A pixel blender that implements the "NormalSrc" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "MultiplySrc" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "AddSrc" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "SubtractSrc" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "ScreenSrc" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "DarkenSrc" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "LightenSrc" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "OverlaySrc" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "HardLightSrc" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "NormalSrcAtop" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "MultiplySrcAtop" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "AddSrcAtop" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "SubtractSrcAtop" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "ScreenSrcAtop" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "DarkenSrcAtop" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "LightenSrcAtop" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "OverlaySrcAtop" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "HardLightSrcAtop" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "NormalSrcOver" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "MultiplySrcOver" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "AddSrcOver" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "SubtractSrcOver" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "ScreenSrcOver" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "DarkenSrcOver" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "LightenSrcOver" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "OverlaySrcOver" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "HardLightSrcOver" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "NormalSrcIn" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "MultiplySrcIn" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "AddSrcIn" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "SubtractSrcIn" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "ScreenSrcIn" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "DarkenSrcIn" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "LightenSrcIn" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "OverlaySrcIn" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "HardLightSrcIn" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "NormalSrcOut" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "MultiplySrcOut" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "AddSrcOut" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "SubtractSrcOut" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "ScreenSrcOut" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "DarkenSrcOut" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "LightenSrcOut" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "OverlaySrcOut" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "HardLightSrcOut" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "NormalDest" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "MultiplyDest" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "AddDest" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "SubtractDest" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "ScreenDest" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "DarkenDest" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "LightenDest" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "OverlayDest" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "HardLightDest" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "NormalDestAtop" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "MultiplyDestAtop" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "AddDestAtop" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "SubtractDestAtop" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "ScreenDestAtop" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "DarkenDestAtop" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "LightenDestAtop" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "OverlayDestAtop" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "HardLightDestAtop" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "NormalDestOver" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "MultiplyDestOver" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "AddDestOver" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "SubtractDestOver" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "ScreenDestOver" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "DarkenDestOver" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "LightenDestOver" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "OverlayDestOver" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "HardLightDestOver" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "NormalDestIn" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "MultiplyDestIn" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "AddDestIn" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "SubtractDestIn" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "ScreenDestIn" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "DarkenDestIn" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "LightenDestIn" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "OverlayDestIn" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "HardLightDestIn" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "NormalDestOut" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "MultiplyDestOut" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "AddDestOut" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "SubtractDestOut" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "ScreenDestOut" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "DarkenDestOut" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "LightenDestOut" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "OverlayDestOut" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "HardLightDestOut" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "NormalClear" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "MultiplyClear" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "AddClear" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "SubtractClear" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "ScreenClear" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "DarkenClear" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "LightenClear" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "OverlayClear" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "HardLightClear" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "NormalXor" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "MultiplyXor" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "AddXor" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "SubtractXor" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "ScreenXor" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "DarkenXor" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "LightenXor" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "OverlayXor" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - A pixel blender that implements the "HardLightXor" composition equation. - - - - - Gets the static instance of this blender. - - - - - - - - - - - - - - Collection of Porter Duff Color Blending and Alpha Composition Functions. - - - These functions are designed to be a general solution for all color cases, - that is, they take in account the alpha value of both the backdrop - and source, and there's no need to alpha-premultiply neither the backdrop - nor the source. - Note there are faster functions for when the backdrop color is known - to be opaque - - - - - Returns the result of the "Normal" compositing equation. - - The backdrop vector. - The source vector. - The . - - - - Returns the result of the "Multiply" compositing equation. - - The backdrop vector. - The source vector. - The . - - - - Returns the result of the "Add" compositing equation. - - The backdrop vector. - The source vector. - The . - - - - Returns the result of the "Subtract" compositing equation. - - The backdrop vector. - The source vector. - The . - - - - Returns the result of the "Screen" compositing equation. - - The backdrop vector. - The source vector. - The . - - - - Returns the result of the "Darken" compositing equation. - - The backdrop vector. - The source vector. - The . - - - - Returns the result of the "Lighten" compositing equation. - - The backdrop vector. - The source vector. - The . - - - - Returns the result of the "Overlay" compositing equation. - - The backdrop vector. - The source vector. - The . - - - - Returns the result of the "HardLight" compositing equation. - - The backdrop vector. - The source vector. - The . - - - - Helper function for Overlay andHardLight modes - - Backdrop color element - Source color element - Overlay value - - - - Returns the result of the "Over" compositing equation. - - The destination vector. - The source vector. - The amount to blend. Range 0..1 - The . - - - - Returns the result of the "Atop" compositing equation. - - The destination vector. - The source vector. - The amount to blend. Range 0..1 - The . - - - - Returns the result of the "In" compositing equation. - - The destination vector. - The source vector. - The . - - - - Returns the result of the "Out" compositing equation. - - The destination vector. - The source vector. - The . - - - - Returns the result of the "XOr" compositing equation. - - The destination vector. - The source vector. - The . - - - - Returns the result of the "NormalSrc" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "NormalSrcAtop" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "NormalSrcOver" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "NormalSrcIn" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "NormalSrcOut" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "NormalDest" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "NormalDestAtop" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "NormalDestOver" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "NormalDestIn" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "NormalDestOut" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "NormalXor" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "NormalClear" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "NormalSrc" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "NormalSrcAtop" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "NormalSrcOver" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "NormalSrcIn" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "NormalSrcOut" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "NormalDest" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "NormalDestAtop" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "NormalDestOver" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "NormalDestIn" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "NormalDestOut" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "NormalClear" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "NormalXor" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "MultiplySrc" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "MultiplySrcAtop" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "MultiplySrcOver" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "MultiplySrcIn" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "MultiplySrcOut" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "MultiplyDest" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "MultiplyDestAtop" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "MultiplyDestOver" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "MultiplyDestIn" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "MultiplyDestOut" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "MultiplyXor" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "MultiplyClear" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "MultiplySrc" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "MultiplySrcAtop" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "MultiplySrcOver" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "MultiplySrcIn" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "MultiplySrcOut" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "MultiplyDest" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "MultiplyDestAtop" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "MultiplyDestOver" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "MultiplyDestIn" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "MultiplyDestOut" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "MultiplyClear" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "MultiplyXor" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "AddSrc" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "AddSrcAtop" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "AddSrcOver" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "AddSrcIn" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "AddSrcOut" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "AddDest" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "AddDestAtop" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "AddDestOver" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "AddDestIn" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "AddDestOut" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "AddXor" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "AddClear" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "AddSrc" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "AddSrcAtop" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "AddSrcOver" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "AddSrcIn" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "AddSrcOut" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "AddDest" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "AddDestAtop" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "AddDestOver" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "AddDestIn" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "AddDestOut" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "AddClear" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "AddXor" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "SubtractSrc" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "SubtractSrcAtop" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "SubtractSrcOver" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "SubtractSrcIn" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "SubtractSrcOut" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "SubtractDest" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "SubtractDestAtop" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "SubtractDestOver" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "SubtractDestIn" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "SubtractDestOut" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "SubtractXor" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "SubtractClear" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "SubtractSrc" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "SubtractSrcAtop" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "SubtractSrcOver" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "SubtractSrcIn" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "SubtractSrcOut" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "SubtractDest" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "SubtractDestAtop" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "SubtractDestOver" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "SubtractDestIn" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "SubtractDestOut" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "SubtractClear" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "SubtractXor" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "ScreenSrc" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "ScreenSrcAtop" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "ScreenSrcOver" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "ScreenSrcIn" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "ScreenSrcOut" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "ScreenDest" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "ScreenDestAtop" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "ScreenDestOver" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "ScreenDestIn" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "ScreenDestOut" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "ScreenXor" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "ScreenClear" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "ScreenSrc" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "ScreenSrcAtop" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "ScreenSrcOver" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "ScreenSrcIn" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "ScreenSrcOut" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "ScreenDest" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "ScreenDestAtop" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "ScreenDestOver" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "ScreenDestIn" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "ScreenDestOut" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "ScreenClear" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "ScreenXor" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "DarkenSrc" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "DarkenSrcAtop" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "DarkenSrcOver" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "DarkenSrcIn" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "DarkenSrcOut" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "DarkenDest" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "DarkenDestAtop" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "DarkenDestOver" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "DarkenDestIn" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "DarkenDestOut" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "DarkenXor" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "DarkenClear" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "DarkenSrc" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "DarkenSrcAtop" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "DarkenSrcOver" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "DarkenSrcIn" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "DarkenSrcOut" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "DarkenDest" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "DarkenDestAtop" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "DarkenDestOver" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "DarkenDestIn" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "DarkenDestOut" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "DarkenClear" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "DarkenXor" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "LightenSrc" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "LightenSrcAtop" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "LightenSrcOver" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "LightenSrcIn" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "LightenSrcOut" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "LightenDest" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "LightenDestAtop" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "LightenDestOver" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "LightenDestIn" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "LightenDestOut" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "LightenXor" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "LightenClear" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "LightenSrc" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "LightenSrcAtop" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "LightenSrcOver" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "LightenSrcIn" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "LightenSrcOut" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "LightenDest" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "LightenDestAtop" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "LightenDestOver" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "LightenDestIn" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "LightenDestOut" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "LightenClear" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "LightenXor" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "OverlaySrc" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "OverlaySrcAtop" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "OverlaySrcOver" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "OverlaySrcIn" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "OverlaySrcOut" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "OverlayDest" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "OverlayDestAtop" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "OverlayDestOver" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "OverlayDestIn" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "OverlayDestOut" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "OverlayXor" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "OverlayClear" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "OverlaySrc" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "OverlaySrcAtop" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "OverlaySrcOver" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "OverlaySrcIn" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "OverlaySrcOut" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "OverlayDest" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "OverlayDestAtop" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "OverlayDestOver" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "OverlayDestIn" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "OverlayDestOut" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "OverlayClear" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "OverlayXor" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "HardLightSrc" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "HardLightSrcAtop" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "HardLightSrcOver" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "HardLightSrcIn" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "HardLightSrcOut" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "HardLightDest" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "HardLightDestAtop" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "HardLightDestOver" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "HardLightDestIn" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "HardLightDestOut" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "HardLightXor" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "HardLightClear" compositing equation. - - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "HardLightSrc" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "HardLightSrcAtop" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "HardLightSrcOver" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "HardLightSrcIn" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "HardLightSrcOut" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "HardLightDest" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "HardLightDestAtop" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "HardLightDestOver" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "HardLightDestIn" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "HardLightDestOut" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "HardLightClear" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Returns the result of the "HardLightXor" compositing equation. - - The pixel format. - The backdrop vector. - The source vector. - The source opacity. Range 0..1 - The . - - - - Abstract base class for calling pixel composition functions - - The type of the pixel - - - - Blend 2 pixels together. - - The background color. - The source color. - - A value between 0 and 1 indicating the weight of the second source vector. - At amount = 0, "background" is returned, at amount = 1, "source" is returned. - - The final pixel value after composition. - - - - Blends 2 rows together - - the pixel format of the source span - to use internally - the destination span - the background span - the source span - - A value between 0 and 1 indicating the weight of the second source vector. - At amount = 0, "background" is returned, at amount = 1, "source" is returned. - - - - - Blends 2 rows together - - to use internally - the destination span - the background span - the source span - - A span with values between 0 and 1 indicating the weight of the second source vector. - At amount = 0, "background" is returned, at amount = 1, "source" is returned. - - - - - Blends 2 rows together - - the pixel format of the source span - to use internally - the destination span - the background span - the source span - - A span with values between 0 and 1 indicating the weight of the second source vector. - At amount = 0, "background" is returned, at amount = 1, "source" is returned. - - - - - Blend 2 rows together. - - destination span - the background span - the source span - - A value between 0 and 1 indicating the weight of the second source vector. - At amount = 0, "background" is returned, at amount = 1, "source" is returned. - - - - - Blend 2 rows together. - - destination span - the background span - the source span - - A span with values between 0 and 1 indicating the weight of the second source vector. - At amount = 0, "background" is returned, at amount = 1, "source" is returned. - - - - - Enumerates the various color blending modes. - - - - - Default blending mode, also known as "Normal" or "Alpha Blending" - - - - - Blends the 2 values by multiplication. - - - - - Blends the 2 values by addition. - - - - - Blends the 2 values by subtraction. - - - - - Multiplies the complements of the backdrop and source values, then complements the result. - - - - - Selects the minimum of the backdrop and source values. - - - - - Selects the max of the backdrop and source values. - - - - - Multiplies or screens the values, depending on the backdrop vector values. - - - - - Multiplies or screens the colors, depending on the source value. - - - - - Flags responsible to select additional operations which could be efficiently applied in - - or - - knowing the pixel type. - - - - - No special operation is selected - - - - - Select and instead the standard (non scaled) variants. - - - - - Enable alpha premultiplication / unpremultiplication - - - - - Enable SRGB companding (defined in ). - - - - - Extension and utility methods for . - - - - - Applies the union of and , - if is true, returns unmodified otherwise. - - - and - should be always used together! - - - - - Packed pixel type containing a single 8-bit normalized alpha value. - - Ranges from [0, 0, 0, 0] to [0, 0, 0, 1] in vector form. - - - - Provides optimized overrides for bulk operations. - - - - - Initializes a new instance of the struct. - - The alpha component. - - - - Initializes a new instance of the struct. - - The alpha component. - - - - - - - Compares two objects for equality. - - - The on the left side of the operand. - - - The on the right side of the operand. - - - True if the parameter is equal to the parameter; otherwise, false. - - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is not equal to the parameter; otherwise, false. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Compares an object with the packed vector. - - The object to compare. - True if the object is equal to the packed vector. - - - - Compares another A8 packed vector with the packed vector. - - The A8 packed vector to compare. - True if the packed vectors are equal. - - - - Gets a string representation of the packed vector. - - A string representation of the packed vector. - - - - - - - Packs a into a byte. - - The float containing the value to pack. - The containing the packed values. - - - - Provides optimized overrides for bulk operations. - - - - - - - - Packed pixel type containing four 8-bit unsigned normalized values ranging from 0 to 255. - The color components are stored in alpha, red, green, and blue order (least significant to most significant byte). - - Ranges from [0, 0, 0, 0] to [1, 1, 1, 1] in vector form. - - - - This struct is fully mutable. This is done (against the guidelines) for the sake of performance, - as it avoids the need to create new values for modification operations. - - - Provides optimized overrides for bulk operations. - - - Provides optimized overrides for bulk operations. - - - - - Gets or sets the alpha component. - - - - - Gets or sets the red component. - - - - - Gets or sets the green component. - - - - - Gets or sets the blue component. - - - - - The maximum byte value. - - - - - The half vector value. - - - - - Initializes a new instance of the struct. - - The red component. - The green component. - The blue component. - - - - Initializes a new instance of the struct. - - The red component. - The green component. - The blue component. - The alpha component. - - - - Initializes a new instance of the struct. - - The red component. - The green component. - The blue component. - The alpha component. - - - - Initializes a new instance of the struct. - - - The vector containing the components for the packed vector. - - - - - Initializes a new instance of the struct. - - - The vector containing the components for the packed vector. - - - - - Initializes a new instance of the struct. - - - The packed value. - - - - - Gets or sets the packed representation of the Argb32 struct. - - - - - - - - Converts an to . - - The . - The . - - - - Converts a to . - - The . - The . - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is equal to the parameter; otherwise, false. - - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is not equal to the parameter; otherwise, false. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Gets a string representation of the packed vector. - - A string representation of the packed vector. - - - - - - - Packs the four floats into a color. - - The x-component - The y-component - The z-component - The w-component - - - - Packs a into a uint. - - The vector containing the values to pack. - - - - Packs a into a color. - - The vector containing the values to pack. - - - - Provides optimized overrides for bulk operations. - - - Provides optimized overrides for bulk operations. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Pixel type containing three 8-bit unsigned normalized values ranging from 0 to 255. - The color components are stored in blue, green, red order (least significant to most significant byte). - - Ranges from [0, 0, 0, 1] to [1, 1, 1, 1] in vector form. - - - - Provides optimized overrides for bulk operations. - - - Provides optimized overrides for bulk operations. - - - - - The blue component. - - - - - The green component. - - - - - The red component. - - - - - Initializes a new instance of the struct. - - The red component. - The green component. - The blue component. - - - - Converts an to . - - The . - The . - - - - Converts a to . - - The . - The . - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is equal to the parameter; otherwise, false. - - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is not equal to the parameter; otherwise, false. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Provides optimized overrides for bulk operations. - - - Provides optimized overrides for bulk operations. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Packed pixel type containing unsigned normalized values ranging from 0 to 1. - The x and z components use 5 bits, and the y component uses 6 bits. - - Ranges from [0, 0, 0, 1] to [1, 1, 1, 1] in vector form. - - - - Provides optimized overrides for bulk operations. - - - - - Initializes a new instance of the struct. - - The x-component - The y-component - The z-component - - - - Initializes a new instance of the struct. - - - The vector containing the components for the packed value. - - - - - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is equal to the parameter; otherwise, false. - - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is not equal to the parameter; otherwise, false. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Expands the packed representation into a . - The vector components are typically expanded in least to greatest significance order. - - The . - - - - - - - - - - - - - - - - Provides optimized overrides for bulk operations. - - - - - - - - Packed pixel type containing four 8-bit unsigned normalized values ranging from 0 to 255. - The color components are stored in blue, green, red, and alpha order (least significant to most significant byte). - The format is binary compatible with System.Drawing.Imaging.PixelFormat.Format32bppArgb - - Ranges from [0, 0, 0, 0] to [1, 1, 1, 1] in vector form. - - - - Provides optimized overrides for bulk operations. - - - Provides optimized overrides for bulk operations. - - - - - Gets or sets the blue component. - - - - - Gets or sets the green component. - - - - - Gets or sets the red component. - - - - - Gets or sets the alpha component. - - - - - The maximum byte value. - - - - - The half vector value. - - - - - Initializes a new instance of the struct. - - The red component. - The green component. - The blue component. - - - - Initializes a new instance of the struct. - - The red component. - The green component. - The blue component. - The alpha component. - - - - Gets or sets the packed representation of the Bgra32 struct. - - - - - - - - Converts an to . - - The . - The . - - - - Converts a to . - - The . - The . - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is equal to the parameter; otherwise, false. - - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is not equal to the parameter; otherwise, false. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Packs a into a color. - - The vector containing the values to pack. - - - - Provides optimized overrides for bulk operations. - - - Provides optimized overrides for bulk operations. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Packed pixel type containing unsigned normalized values, ranging from 0 to 1, using 4 bits each for x, y, z, and w. - - Ranges from [0, 0, 0, 0] to [1, 1, 1, 1] in vector form. - - - - Provides optimized overrides for bulk operations. - - - - - Initializes a new instance of the struct. - - The x-component - The y-component - The z-component - The w-component - - - - Initializes a new instance of the struct. - - The vector containing the components for the packed vector. - - - - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is equal to the parameter; otherwise, false. - - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is not equal to the parameter; otherwise, false. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Provides optimized overrides for bulk operations. - - - - - - - - Packed pixel type containing unsigned normalized values ranging from 0 to 1. - The x , y and z components use 5 bits, and the w component uses 1 bit. - - Ranges from [0, 0, 0, 0] to [1, 1, 1, 1] in vector form. - - - - Provides optimized overrides for bulk operations. - - - Provides optimized overrides for bulk operations. - - - - - Initializes a new instance of the struct. - - The x-component - The y-component - The z-component - The w-component - - - - Initializes a new instance of the struct. - - - The vector containing the components for the packed vector. - - - - - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is equal to the parameter; otherwise, false. - - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is not equal to the parameter; otherwise, false. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Provides optimized overrides for bulk operations. - - - Provides optimized overrides for bulk operations. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Packed pixel type containing four 8-bit unsigned integer values, ranging from 0 to 255. - - Ranges from [0, 0, 0, 0] to [255, 255, 255, 255] in vector form. - - - - Provides optimized overrides for bulk operations. - - - - - Initializes a new instance of the struct. - - - A vector containing the initial values for the components of the Byte4 structure. - - - - - Initializes a new instance of the struct. - - The x-component - The y-component - The z-component - The w-component - - - - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is equal to the parameter; otherwise, false. - - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is not equal to the parameter; otherwise, false. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Packs a vector into a uint. - - The vector containing the values to pack. - The containing the packed values. - - - - Provides optimized overrides for bulk operations. - - - - - - - - Packed pixel type containing a single 16 bit floating point value. - - Ranges from [-1, 0, 0, 1] to [1, 0, 0, 1] in vector form. - - - - Provides optimized overrides for bulk operations. - - - - - Initializes a new instance of the struct. - - The single component. - - - - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is equal to the parameter; otherwise, false. - - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is not equal to the parameter; otherwise, false. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Expands the packed representation into a . - - The . - - - - - - - - - - - - - - - - Provides optimized overrides for bulk operations. - - - - - - - - Packed pixel type containing two 16-bit floating-point values. - - Ranges from [-1, -1, 0, 1] to [1, 1, 0, 1] in vector form. - - - - Provides optimized overrides for bulk operations. - - - - - Initializes a new instance of the struct. - - The x-component. - The y-component. - - - - Initializes a new instance of the struct. - - A vector containing the initial values for the components. - - - - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is equal to the parameter; otherwise, false. - - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is not equal to the parameter; otherwise, false. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Expands the packed representation into a . - - The . - - - - - - - - - - - - - - - - Provides optimized overrides for bulk operations. - - - - - - - - Packed pixel type containing four 16-bit floating-point values. - - Ranges from [-1, -1, -1, -1] to [1, 1, 1, 1] in vector form. - - - - Provides optimized overrides for bulk operations. - - - - - Initializes a new instance of the struct. - - The x-component. - The y-component. - The z-component. - The w-component. - - - - Initializes a new instance of the struct. - - A vector containing the initial values for the components - - - - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is equal to the parameter; otherwise, false. - - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is not equal to the parameter; otherwise, false. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Packs a into a . - - The vector containing the values to pack. - The containing the packed values. - - - - Provides optimized overrides for bulk operations. - - - - - - - - Packed pixel type containing a single 16-bit normalized luminance value. - - Ranges from [0, 0, 0, 1] to [1, 1, 1, 1] in vector form. - - - - Provides optimized overrides for bulk operations. - - - Provides optimized overrides for bulk operations. - - - - - Initializes a new instance of the struct. - - The luminance component - - - - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is equal to the parameter; otherwise, false. - - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is not equal to the parameter; otherwise, false. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Provides optimized overrides for bulk operations. - - - Provides optimized overrides for bulk operations. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Packed pixel type containing a single 8-bit normalized luminance value. - - Ranges from [0, 0, 0, 1] to [1, 1, 1, 1] in vector form. - - - - Provides optimized overrides for bulk operations. - - - Provides optimized overrides for bulk operations. - - - - - Initializes a new instance of the struct. - - The luminance component. - - - - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is equal to the parameter; otherwise, false. - - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is not equal to the parameter; otherwise, false. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Provides optimized overrides for bulk operations. - - - Provides optimized overrides for bulk operations. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Packed pixel type containing two 8-bit normalized values representing luminance and alpha. - - Ranges from [0, 0, 0, 0] to [1, 1, 1, 1] in vector form. - - - - Provides optimized overrides for bulk operations. - - - Provides optimized overrides for bulk operations. - - - - - Gets or sets the luminance component. - - - - - Gets or sets the alpha component. - - - - - Initializes a new instance of the struct. - - The luminance component. - The alpha componant. - - - - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is equal to the parameter; otherwise, false. - - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is not equal to the parameter; otherwise, false. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Provides optimized overrides for bulk operations. - - - Provides optimized overrides for bulk operations. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Packed pixel type containing two 16-bit normalized values representing luminance and alpha. - - Ranges from [0, 0, 0, 0] to [1, 1, 1, 1] in vector form. - - - - Provides optimized overrides for bulk operations. - - - Provides optimized overrides for bulk operations. - - - - - Gets or sets the luminance component. - - - - - Gets or sets the alpha component. - - - - - Initializes a new instance of the struct. - - The luminance component. - The alpha componant. - - - - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is equal to the parameter; otherwise, false. - - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is not equal to the parameter; otherwise, false. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Provides optimized overrides for bulk operations. - - - Provides optimized overrides for bulk operations. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Packed pixel type containing two 8-bit signed normalized values, ranging from −1 to 1. - - Ranges from [-1, -1, 0, 1] to [1, 1, 0, 1] in vector form. - - - - Provides optimized overrides for bulk operations. - - - - - Initializes a new instance of the struct. - - The x-component. - The y-component. - - - - Initializes a new instance of the struct. - - The vector containing the component values. - - - - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is equal to the parameter; otherwise, false. - - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is not equal to the parameter; otherwise, false. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Expands the packed representation into a . - The vector components are typically expanded in least to greatest significance order. - - The . - - - - - - - - - - - - - - - - Provides optimized overrides for bulk operations. - - - - - - - - Packed pixel type containing four 8-bit signed normalized values, ranging from −1 to 1. - - Ranges from [-1, -1, -1, -1] to [1, 1, 1, 1] in vector form. - - - - Provides optimized overrides for bulk operations. - - - - - Initializes a new instance of the struct. - - The x-component. - The y-component. - The z-component. - The w-component. - - - - Initializes a new instance of the struct. - - The vector containing the component values. - - - - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is equal to the parameter; otherwise, false. - - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is not equal to the parameter; otherwise, false. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Provides optimized overrides for bulk operations. - - - - - - - - Packed pixel type containing two 16-bit signed normalized values, ranging from −1 to 1. - - Ranges from [-1, -1, 0, 1] to [1, 1, 0, 1] in vector form. - - - - Provides optimized overrides for bulk operations. - - - - - Initializes a new instance of the struct. - - The x-component. - The y-component. - - - - Initializes a new instance of the struct. - - The vector containing the component values. - - - - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is equal to the parameter; otherwise, false. - - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is not equal to the parameter; otherwise, false. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Expands the packed representation into a . - The vector components are typically expanded in least to greatest significance order. - - The . - - - - - - - - - - - - - - - - Provides optimized overrides for bulk operations. - - - - - - - - Packed pixel type containing four 16-bit signed normalized values, ranging from −1 to 1. - - Ranges from [-1, -1, -1, -1] to [1, 1, 1, 1] in vector form. - - - - Provides optimized overrides for bulk operations. - - - - - Initializes a new instance of the struct. - - The x-component. - The y-component. - The z-component. - The w-component. - - - - Initializes a new instance of the struct. - - The vector containing the component values. - - - - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is equal to the parameter; otherwise, false. - - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is not equal to the parameter; otherwise, false. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Provides optimized overrides for bulk operations. - - - - - - - - Provides optimized overrides for bulk operations. - - - Provides optimized overrides for bulk operations. - - - Pixel type containing three 8-bit unsigned normalized values ranging from 0 to 255. - The color components are stored in red, green, blue order (least significant to most significant byte). - - Ranges from [0, 0, 0, 1] to [1, 1, 1, 1] in vector form. - - - - - - Provides optimized overrides for bulk operations. - - - Provides optimized overrides for bulk operations. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - The red component. - - - - - The green component. - - - - - The blue component. - - - - - Initializes a new instance of the struct. - - The red component. - The green component. - The blue component. - - - - Converts an to . - - The . - The . - - - - Converts a to . - - The . - The . - - - - Allows the implicit conversion of an instance of to a - . - - The instance of to convert. - An instance of . - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is equal to the parameter; otherwise, false. - - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is not equal to the parameter; otherwise, false. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Packs a into a color. - - The vector containing the values to pack. - - - - Provides optimized overrides for bulk operations. - - - Provides optimized overrides for bulk operations. - - - Packed pixel type containing three 16-bit unsigned normalized values ranging from 0 to 635535. - - Ranges from [0, 0, 0, 1] to [1, 1, 1, 1] in vector form. - - - - - - Provides optimized overrides for bulk operations. - - - Provides optimized overrides for bulk operations. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Gets or sets the red component. - - - - - Gets or sets the green component. - - - - - Gets or sets the blue component. - - - - - Initializes a new instance of the struct. - - The red component. - The green component. - The blue component. - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is equal to the parameter; otherwise, false. - - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is not equal to the parameter; otherwise, false. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Provides optimized overrides for bulk operations. - - - Provides optimized overrides for bulk operations. - - - Packed pixel type containing four 8-bit unsigned normalized values ranging from 0 to 255. - The color components are stored in red, green, blue, and alpha order (least significant to most significant byte). - - Ranges from [0, 0, 0, 0] to [1, 1, 1, 1] in vector form. - - - - This struct is fully mutable. This is done (against the guidelines) for the sake of performance, - as it avoids the need to create new values for modification operations. - - - - - Provides optimized overrides for bulk operations. - - - implementation optimized for . - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Gets or sets the red component. - - - - - Gets or sets the green component. - - - - - Gets or sets the blue component. - - - - - Gets or sets the alpha component. - - - - - Initializes a new instance of the struct. - - The red component. - The green component. - The blue component. - - - - Initializes a new instance of the struct. - - The red component. - The green component. - The blue component. - The alpha component. - - - - Initializes a new instance of the struct. - - The red component. - The green component. - The blue component. - The alpha component. - - - - Initializes a new instance of the struct. - - - The vector containing the components for the packed vector. - - - - - Initializes a new instance of the struct. - - - The vector containing the components for the packed vector. - - - - - Initializes a new instance of the struct. - - - The packed value. - - - - - Gets or sets the packed representation of the Rgba32 struct. - - - - - Gets or sets the RGB components of this struct as - - - - - Gets or sets the RGB components of this struct as reverting the component order. - - - - - - - - Converts an to . - - The . - The . - - - - Converts a to . - - The . - The . - - - - Allows the implicit conversion of an instance of to a - . - - The instance of to convert. - An instance of . - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is equal to the parameter; otherwise, false. - - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is not equal to the parameter; otherwise, false. - - - - - Creates a new instance of the struct - from the given hexadecimal string. - - - The hexadecimal representation of the combined color components arranged - in rgb, rgba, rrggbb, or rrggbbaa format to match web syntax. - - - The . - - - - - Attempts to creates a new instance of the struct - from the given hexadecimal string. - - - The hexadecimal representation of the combined color components arranged - in rgb, rgba, rrggbb, or rrggbbaa format to match web syntax. - - When this method returns, contains the equivalent of the hexadecimal input. - - The . - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Converts the value of this instance to a hexadecimal string. - - A hexadecimal string representation of the value. - - - - - - - - - - - - - - - - Packs a into a color returning a new instance as a result. - - The vector containing the values to pack. - The - - - - Packs the four floats into a color. - - The x-component - The y-component - The z-component - The w-component - - - - Packs a into a uint. - - The vector containing the values to pack. - - - - Packs a into a color. - - The vector containing the values to pack. - - - - Converts the specified hex value to an rrggbbaa hex value. - - The hex value to convert. - - A rrggbbaa hex value. - - - - - Provides optimized overrides for bulk operations. - - - Provides optimized overrides for bulk operations. - - - Packed pixel type containing four 16-bit unsigned normalized values ranging from 0 to 65535. - - Ranges from [0, 0, 0, 0] to [1, 1, 1, 1] in vector form. - - - - - - Provides optimized overrides for bulk operations. - - - Provides optimized overrides for bulk operations. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Gets or sets the red component. - - - - - Gets or sets the green component. - - - - - Gets or sets the blue component. - - - - - Gets or sets the alpha component. - - - - - Initializes a new instance of the struct. - - The red component. - The green component. - The blue component. - The alpha component. - - - - Initializes a new instance of the struct. - - A structure of 4 bytes in RGBA byte order. - - - - Initializes a new instance of the struct. - - A structure of 4 bytes in BGRA byte order. - - - - Initializes a new instance of the struct. - - A structure of 4 bytes in ARGB byte order. - - - - Initializes a new instance of the struct. - - A structure of 3 bytes in RGB byte order. - - - - Initializes a new instance of the struct. - - A structure of 3 bytes in BGR byte order. - - - - Initializes a new instance of the struct. - - The . - - - - Gets or sets the RGB components of this struct as . - - - - - - - - Converts an to . - - The . - The . - - - - Converts a to . - - The . - The . - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is equal to the parameter; otherwise, false. - - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is not equal to the parameter; otherwise, false. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Convert to . - - The . - - - - Convert to . - - The . - - - - Convert to . - - The . - - - - Convert to . - - The . - - - - Convert to . - - The . - - - - - - - - - - - - - - - - Provides optimized overrides for bulk operations. - - - Packed pixel type containing two 16-bit unsigned normalized values ranging from 0 to 1. - - Ranges from [0, 0, 0, 1] to [1, 1, 0, 1] in vector form. - - - - - - Provides optimized overrides for bulk operations. - - - - - - - - Initializes a new instance of the struct. - - The x-component - The y-component - - - - Initializes a new instance of the struct. - - The vector containing the component values. - - - - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is equal to the parameter; otherwise, false. - - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is not equal to the parameter; otherwise, false. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Expands the packed representation into a . - The vector components are typically expanded in least to greatest significance order. - - The . - - - - - - - - - - - - - - - - Provides optimized overrides for bulk operations. - - - Packed vector type containing unsigned normalized values ranging from 0 to 1. - The x, y and z components use 10 bits, and the w component uses 2 bits. - - Ranges from [0, 0, 0, 0] to [1, 1, 1, 1] in vector form. - - - - - - Provides optimized overrides for bulk operations. - - - - - - - - Initializes a new instance of the struct. - - The x-component - The y-component - The z-component - The w-component - - - - Initializes a new instance of the struct. - - The vector containing the component values. - - - - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is equal to the parameter; otherwise, false. - - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is not equal to the parameter; otherwise, false. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Provides optimized overrides for bulk operations. - - - Unpacked pixel type containing four 32-bit floating-point values typically ranging from 0 to 1. - The color components are stored in red, green, blue, and alpha order. - - Ranges from [0, 0, 0, 0] to [1, 1, 1, 1] in vector form. - - - - This struct is fully mutable. This is done (against the guidelines) for the sake of performance, - as it avoids the need to create new values for modification operations. - - - - - implementation optimized for . - - - - - - - - - - - - - - - - - Gets or sets the red component. - - - - - Gets or sets the green component. - - - - - Gets or sets the blue component. - - - - - Gets or sets the alpha component. - - - - - Initializes a new instance of the struct. - - The red component. - The green component. - The blue component. - The alpha component. - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is equal to the parameter; otherwise, false. - - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is not equal to the parameter; otherwise, false. - - - - - Creates a new instance of the struct. - - - The hexadecimal representation of the combined color components arranged - in rgb, rgba, rrggbb, or rrggbbaa format to match web syntax. - - - The . - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Converts the value of this instance to a hexadecimal string. - - A hexadecimal string representation of the value. - - - - - - - - - - - - - - - - Provides optimized overrides for bulk operations. - - - Packed pixel type containing two 16-bit signed integer values. - - Ranges from [-32767, -32767, 0, 1] to [32767, 32767, 0, 1] in vector form. - - - - - - Provides optimized overrides for bulk operations. - - - - - - - - Initializes a new instance of the struct. - - The x-component. - The y-component. - - - - Initializes a new instance of the struct. - - The vector containing the component values. - - - - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is not equal to the parameter; otherwise, false. - - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is not equal to the parameter; otherwise, false. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Expands the packed representation into a . - The vector components are typically expanded in least to greatest significance order. - - The . - - - - - - - - - - - - - - - - Provides optimized overrides for bulk operations. - - - Packed pixel type containing four 16-bit signed integer values. - - Ranges from [-37267, -37267, -37267, -37267] to [37267, 37267, 37267, 37267] in vector form. - - - - - - Provides optimized overrides for bulk operations. - - - - - - - - Initializes a new instance of the struct. - - The x-component. - The y-component. - The z-component. - The w-component. - - - - Initializes a new instance of the struct. - - A vector containing the initial values for the components. - - - - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is not equal to the parameter; otherwise, false. - - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the parameter is not equal to the parameter; otherwise, false. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Gets the hash code for the current instance. - - Hash code for the instance. - - - - - - - A stateless class implementing Strategy Pattern for batched pixel-data conversion operations - for pixel buffers of type . - - The pixel format. - - Provides access to pixel blenders - - - - - Gets the global instance for the pixel type - - - - - Gets the pixel type info for the given . - - The . - - - - Bulk version of converting 'sourceVectors.Length' pixels into 'destinationColors'. - The method is DESTRUCTIVE altering the contents of . - - - The destructive behavior is a design choice for performance reasons. - In a typical use case the contents of are abandoned after the conversion. - - A to configure internal operations - The to the source vectors. - The to the destination colors. - The to apply during the conversion - - - - Bulk version of converting 'sourceVectors.Length' pixels into 'destinationColors'. - The method is DESTRUCTIVE altering the contents of . - - - The destructive behavior is a design choice for performance reasons. - In a typical use case the contents of are abandoned after the conversion. - - A to configure internal operations - The to the source vectors. - The to the destination colors. - - - - Bulk version of converting 'sourceColors.Length' pixels into 'destinationVectors'. - - A to configure internal operations - The to the source colors. - The to the destination vectors. - The to apply during the conversion - - - - Bulk version of converting 'sourceColors.Length' pixels into 'destinationVectors'. - - A to configure internal operations - The to the source colors. - The to the destination vectors. - - - - Bulk operation that copies the to in - format. - - The destination pixel type. - A to configure internal operations. - The to the source pixels. - The to the destination pixels. - - - - Bulk operation that copies the to in - format. - - The destination pixel type. - A to configure internal operations. - The to the source pixels. - The to the destination pixels. - - - - Bulk operation that packs 3 seperate RGB channels to . - The destination must have a padding of 3. - - A to configure internal operations. - A to the red values. - A to the green values. - A to the blue values. - A to the destination pixels. - - - - Converts all pixels in 'source` span of into a span of -s. - - A to configure internal operations. - The source of data. - The to the destination pixels. - - - - A helper for that expects a byte span. - The layout of the data in 'sourceBytes' must be compatible with layout. - - A to configure internal operations. - The to the source bytes. - The to the destination pixels. - The number of pixels to convert. - - - - Converts all pixels of the 'sourcePixels` span to a span of -s. - - A to configure internal operations - The span of source pixels - The destination span of data. - - - - A helper for that expects a byte span as destination. - The layout of the data in 'destBytes' must be compatible with layout. - - A to configure internal operations - The to the source pixels. - The to the destination bytes. - The number of pixels to convert. - - - - Converts all pixels in 'source` span of into a span of -s. - - A to configure internal operations. - The source of data. - The to the destination pixels. - - - - A helper for that expects a byte span. - The layout of the data in 'sourceBytes' must be compatible with layout. - - A to configure internal operations. - The to the source bytes. - The to the destination pixels. - The number of pixels to convert. - - - - Converts all pixels of the 'sourcePixels` span to a span of -s. - - A to configure internal operations - The span of source pixels - The destination span of data. - - - - A helper for that expects a byte span as destination. - The layout of the data in 'destBytes' must be compatible with layout. - - A to configure internal operations - The to the source pixels. - The to the destination bytes. - The number of pixels to convert. - - - - Converts all pixels in 'source` span of into a span of -s. - - A to configure internal operations. - The source of data. - The to the destination pixels. - - - - A helper for that expects a byte span. - The layout of the data in 'sourceBytes' must be compatible with layout. - - A to configure internal operations. - The to the source bytes. - The to the destination pixels. - The number of pixels to convert. - - - - Converts all pixels of the 'sourcePixels` span to a span of -s. - - A to configure internal operations - The span of source pixels - The destination span of data. - - - - A helper for that expects a byte span as destination. - The layout of the data in 'destBytes' must be compatible with layout. - - A to configure internal operations - The to the source pixels. - The to the destination bytes. - The number of pixels to convert. - - - - Converts all pixels in 'source` span of into a span of -s. - - A to configure internal operations. - The source of data. - The to the destination pixels. - - - - A helper for that expects a byte span. - The layout of the data in 'sourceBytes' must be compatible with layout. - - A to configure internal operations. - The to the source bytes. - The to the destination pixels. - The number of pixels to convert. - - - - Converts all pixels of the 'sourcePixels` span to a span of -s. - - A to configure internal operations - The span of source pixels - The destination span of data. - - - - A helper for that expects a byte span as destination. - The layout of the data in 'destBytes' must be compatible with layout. - - A to configure internal operations - The to the source pixels. - The to the destination bytes. - The number of pixels to convert. - - - - Converts all pixels in 'source` span of into a span of -s. - - A to configure internal operations. - The source of data. - The to the destination pixels. - - - - A helper for that expects a byte span. - The layout of the data in 'sourceBytes' must be compatible with layout. - - A to configure internal operations. - The to the source bytes. - The to the destination pixels. - The number of pixels to convert. - - - - Converts all pixels of the 'sourcePixels` span to a span of -s. - - A to configure internal operations - The span of source pixels - The destination span of data. - - - - A helper for that expects a byte span as destination. - The layout of the data in 'destBytes' must be compatible with layout. - - A to configure internal operations - The to the source pixels. - The to the destination bytes. - The number of pixels to convert. - - - - Converts all pixels in 'source` span of into a span of -s. - - A to configure internal operations. - The source of data. - The to the destination pixels. - - - - A helper for that expects a byte span. - The layout of the data in 'sourceBytes' must be compatible with layout. - - A to configure internal operations. - The to the source bytes. - The to the destination pixels. - The number of pixels to convert. - - - - Converts all pixels of the 'sourcePixels` span to a span of -s. - - A to configure internal operations - The span of source pixels - The destination span of data. - - - - A helper for that expects a byte span as destination. - The layout of the data in 'destBytes' must be compatible with layout. - - A to configure internal operations - The to the source pixels. - The to the destination bytes. - The number of pixels to convert. - - - - Converts all pixels in 'source` span of into a span of -s. - - A to configure internal operations. - The source of data. - The to the destination pixels. - - - - A helper for that expects a byte span. - The layout of the data in 'sourceBytes' must be compatible with layout. - - A to configure internal operations. - The to the source bytes. - The to the destination pixels. - The number of pixels to convert. - - - - Converts all pixels of the 'sourcePixels` span to a span of -s. - - A to configure internal operations - The span of source pixels - The destination span of data. - - - - A helper for that expects a byte span as destination. - The layout of the data in 'destBytes' must be compatible with layout. - - A to configure internal operations - The to the source pixels. - The to the destination bytes. - The number of pixels to convert. - - - - Converts all pixels in 'source` span of into a span of -s. - - A to configure internal operations. - The source of data. - The to the destination pixels. - - - - A helper for that expects a byte span. - The layout of the data in 'sourceBytes' must be compatible with layout. - - A to configure internal operations. - The to the source bytes. - The to the destination pixels. - The number of pixels to convert. - - - - Converts all pixels of the 'sourcePixels` span to a span of -s. - - A to configure internal operations - The span of source pixels - The destination span of data. - - - - A helper for that expects a byte span as destination. - The layout of the data in 'destBytes' must be compatible with layout. - - A to configure internal operations - The to the source pixels. - The to the destination bytes. - The number of pixels to convert. - - - - Converts all pixels in 'source` span of into a span of -s. - - A to configure internal operations. - The source of data. - The to the destination pixels. - - - - A helper for that expects a byte span. - The layout of the data in 'sourceBytes' must be compatible with layout. - - A to configure internal operations. - The to the source bytes. - The to the destination pixels. - The number of pixels to convert. - - - - Converts all pixels of the 'sourcePixels` span to a span of -s. - - A to configure internal operations - The span of source pixels - The destination span of data. - - - - A helper for that expects a byte span as destination. - The layout of the data in 'destBytes' must be compatible with layout. - - A to configure internal operations - The to the source pixels. - The to the destination bytes. - The number of pixels to convert. - - - - Converts all pixels in 'source` span of into a span of -s. - - A to configure internal operations. - The source of data. - The to the destination pixels. - - - - A helper for that expects a byte span. - The layout of the data in 'sourceBytes' must be compatible with layout. - - A to configure internal operations. - The to the source bytes. - The to the destination pixels. - The number of pixels to convert. - - - - Converts all pixels of the 'sourcePixels` span to a span of -s. - - A to configure internal operations - The span of source pixels - The destination span of data. - - - - A helper for that expects a byte span as destination. - The layout of the data in 'destBytes' must be compatible with layout. - - A to configure internal operations - The to the source pixels. - The to the destination bytes. - The number of pixels to convert. - - - - Converts all pixels in 'source` span of into a span of -s. - - A to configure internal operations. - The source of data. - The to the destination pixels. - - - - A helper for that expects a byte span. - The layout of the data in 'sourceBytes' must be compatible with layout. - - A to configure internal operations. - The to the source bytes. - The to the destination pixels. - The number of pixels to convert. - - - - Converts all pixels of the 'sourcePixels` span to a span of -s. - - A to configure internal operations - The span of source pixels - The destination span of data. - - - - A helper for that expects a byte span as destination. - The layout of the data in 'destBytes' must be compatible with layout. - - A to configure internal operations - The to the source pixels. - The to the destination bytes. - The number of pixels to convert. - - - - Converts all pixels in 'source` span of into a span of -s. - - A to configure internal operations. - The source of data. - The to the destination pixels. - - - - A helper for that expects a byte span. - The layout of the data in 'sourceBytes' must be compatible with layout. - - A to configure internal operations. - The to the source bytes. - The to the destination pixels. - The number of pixels to convert. - - - - Converts all pixels of the 'sourcePixels` span to a span of -s. - - A to configure internal operations - The span of source pixels - The destination span of data. - - - - A helper for that expects a byte span as destination. - The layout of the data in 'destBytes' must be compatible with layout. - - A to configure internal operations - The to the source pixels. - The to the destination bytes. - The number of pixels to convert. - - - - Find an instance of the pixel blender. - - the blending and composition to apply - A . - - - - Find an instance of the pixel blender. - - The color blending mode to apply - The alpha composition mode to apply - A . - - - - Contains optimized implementations for conversion between pixel formats. - - - Implementations are based on ideas in: - https://github.com/dotnet/coreclr/blob/master/src/System.Private.CoreLib/shared/System/Buffers/Binary/Reader.cs#L84 - The JIT can detect and optimize rotation idioms ROTL (Rotate Left) - and ROTR (Rotate Right) emitting efficient CPU instructions: - https://github.com/dotnet/coreclr/pull/1830 - - - - - Converts a representing a collection of - pixels to a representing - a collection of pixels. - - - - - Converts a representing a collection of - pixels to a representing - a collection of pixels. - - - - - Converts a representing a collection of - pixels to a representing - a collection of pixels. - - - - - Converts a representing a collection of - pixels to a representing - a collection of pixels. - - - - - Converts a representing a collection of - pixels to a representing - a collection of pixels. - - - - - Converts a representing a collection of - pixels to a representing - a collection of pixels. - - - - - Converts a representing a collection of - pixels to a representing - a collection of pixels. - - - - - Converts a representing a collection of - pixels to a representing - a collection of pixels. - - - - - Converts a representing a collection of - pixels to a representing - a collection of pixels. - - - - - Converts a representing a collection of - pixels to a representing - a collection of pixels. - - - - - Converts a representing a collection of - pixels to a representing - a collection of pixels. - - - - - Converts a representing a collection of - pixels to a representing - a collection of pixels. - - - - - Converts a representing a collection of - pixels to a representing - a collection of pixels. - - - - - Converts a representing a collection of - pixels to a representing - a collection of pixels. - - - - - Converts a representing a collection of - pixels to a representing - a collection of pixels. - - - - - Converts a representing a collection of - pixels to a representing - a collection of pixels. - - - - - Converts a representing a collection of - pixels to a representing - a collection of pixels. - - - - - Converts a representing a collection of - pixels to a representing - a collection of pixels. - - - - - Converts a representing a collection of - pixels to a representing - a collection of pixels. - - - - - Converts a representing a collection of - pixels to a representing - a collection of pixels. - - - - - Helper class for (bulk) conversion of buffers to/from other buffer types. - - - Contains - - - - - Apply modifiers used requested by ToVector4() conversion. - - - - - Apply modifiers used requested by FromVector4() conversion. - - - - - Provides default implementations for batched to/from conversion. - WARNING: The methods prefixed with "Unsafe" are operating without bounds checking and input validation! - Input validation is the responsibility of the caller! - - - - - Provides efficient implementations for batched to/from conversion. - which is applicable for -compatible pixel types where - returns the same scaled result as . - The method is works by internally converting to a therefore it's not applicable for that type! - - - - - It's not worth to bother the transitive pixel conversion method below this limit. - The value depends on the actual gain brought by the SIMD characteristics of the executing CPU and JIT. - - - - - Provides an efficient default implementation for - The method works by internally converting to a therefore it's not applicable for that type! - - - - - Provides an efficient default implementation for - The method is works by internally converting to a therefore it's not applicable for that type! - - - - - Enumerates the RGBA (red, green, blue, alpha) color components. - - - - - The red component. - - - - - The green component. - - - - - The blue component. - - - - - The alpha component. - - - - - A structure encapsulating a 5x4 matrix used for transforming the color and alpha components of an image. - - - - - Value at row 1, column 1 of the matrix. - - - - - Value at row 1, column 2 of the matrix. - - - - - Value at row 1, column 3 of the matrix. - - - - - Value at row 1, column 4 of the matrix. - - - - - Value at row 2, column 1 of the matrix. - - - - - Value at row 2, column 2 of the matrix. - - - - - Value at row 2, column 3 of the matrix. - - - - - Value at row 2, column 4 of the matrix. - - - - - Value at row 3, column 1 of the matrix. - - - - - Value at row 3, column 2 of the matrix. - - - - - Value at row 3, column 3 of the matrix. - - - - - Value at row 3, column 4 of the matrix. - - - - - Value at row 4, column 1 of the matrix. - - - - - Value at row 4, column 2 of the matrix. - - - - - Value at row 4, column 3 of the matrix. - - - - - Value at row 4, column 4 of the matrix. - - - - - Value at row 5, column 1 of the matrix. - - - - - Value at row 5, column 2 of the matrix. - - - - - Value at row 5, column 3 of the matrix. - - - - - Value at row 5, column 4 of the matrix. - - - - - Initializes a new instance of the struct. - - The value at row 1, column 1 of the matrix. - The value at row 1, column 2 of the matrix. - The value at row 1, column 3 of the matrix. - The value at row 1, column 4 of the matrix. - The value at row 2, column 1 of the matrix. - The value at row 2, column 2 of the matrix. - The value at row 2, column 3 of the matrix. - The value at row 2, column 4 of the matrix. - The value at row 3, column 1 of the matrix. - The value at row 3, column 2 of the matrix. - The value at row 3, column 3 of the matrix. - The value at row 3, column 4 of the matrix. - The value at row 4, column 1 of the matrix. - The value at row 4, column 2 of the matrix. - The value at row 4, column 3 of the matrix. - The value at row 4, column 4 of the matrix. - The value at row 5, column 1 of the matrix. - The value at row 5, column 2 of the matrix. - The value at row 5, column 3 of the matrix. - The value at row 5, column 4 of the matrix. - - - - Gets the multiplicative identity matrix. - - - - - Gets a value indicating whether the matrix is the identity matrix. - - - - - Adds two matrices together. - - The first source matrix. - The second source matrix. - The resulting matrix. - - - - Subtracts the second matrix from the first. - - The first source matrix. - The second source matrix. - The result of the subtraction. - - - - Returns a new matrix with the negated elements of the given matrix. - - The source matrix. - The negated matrix. - - - - Multiplies a matrix by another matrix. - - The first source matrix. - The second source matrix. - The result of the multiplication. - - - - Multiplies a matrix by a scalar value. - - The source matrix. - The scaling factor. - The scaled matrix. - - - - Returns a boolean indicating whether the given two matrices are equal. - - The first matrix to compare. - The second matrix to compare. - True if the given matrices are equal; False otherwise. - - - - Returns a boolean indicating whether the given two matrices are not equal. - - The first matrix to compare. - The second matrix to compare. - True if the given matrices are equal; False otherwise. - - - - - - - - - - - - - - - - Represents a complex number, where the real and imaginary parts are stored as values. - - - This is a more efficient version of the type. - - - - - The real part of the complex number - - - - - The imaginary part of the complex number - - - - - Initializes a new instance of the struct. - - The real part in the complex number. - The imaginary part in the complex number. - - - - Performs the multiplication operation between a instance and a scalar. - - The value to multiply. - The scalar to use to multiply the value. - The result - - - - Performs the multiplication operation between a instance and a . - - The value to multiply. - The instance to use to multiply the value. - The result - - - - Performs the multiplication operation between a instance and a . - - The value to multiply. - The instance to use to multiply the value. - The result - - - - - - - - - - - - - - - - A vector with 4 values of type . - - - - - The real part of the complex vector - - - - - The imaginary part of the complex number - - - - - Sums the values in the input to the current instance - - The input to sum - - - - Performs a weighted sum on the current instance according to the given parameters - - The 'a' parameter, for the real component - The 'b' parameter, for the imaginary component - The resulting value - - - - - - - - - - - - - Represents a dense matrix with arbitrary elements. - Components that are adjacent in a column of the matrix are adjacent in the storage array. - The components are said to be stored in column major order. - - The type of elements in the matrix. - - - - The 1D representation of the dense matrix. - - - - - Gets the number of columns in the dense matrix. - - - - - Gets the number of rows in the dense matrix. - - - - - Gets the size of the dense matrix. - - - - - Gets the number of items in the array. - - - - - Initializes a new instance of the struct. - - The length of each side in the matrix. - - - - Initializes a new instance of the struct. - - The number of columns. - The number of rows. - - - - Initializes a new instance of the struct. - - The 2D array to provide access to. - - - - Gets a span wrapping the . - - - - - Gets or sets the item at the specified position. - - The row-coordinate of the item. Must be greater than or equal to zero and less than the height of the array. - The column-coordinate of the item. Must be greater than or equal to zero and less than the width of the array. - The at the specified position. - - - - Performs an implicit conversion from a to a . - - The source array. - - The representation on the source data. - - - - - Performs an implicit conversion from a to a . - - The source array. - - The representation on the source data. - - - - - Compares the two instances to determine whether they are unequal. - - The first source instance. - The second source instance. - The . - - - - Compares the two instances to determine whether they are equal. - - The first source instance. - The second source instance. - The . - - - - Transposes the rows and columns of the dense matrix. - - The . - - - - Fills the matrix with the given value - - The value to fill each item with - - - - Clears the matrix setting each value to the default value for the element type - - - - - Checks the coordinates to ensure they are within bounds. - - The y-coordinate of the item. Must be greater than zero and smaller than the height of the matrix. - The x-coordinate of the item. Must be greater than zero and smaller than the width of the matrix. - - Thrown if the coordinates are not within the bounds of the array. - - - - - - - - - - - - - - Represents a number that can be expressed as a fraction. - - - This is a very simplified implementation of a rational number designed for use with metadata only. - - - - - Initializes a new instance of the struct. - - - The number above the line in a vulgar fraction showing how many of the parts - indicated by the denominator are taken. - - - The number below the line in a vulgar fraction; a divisor. - - - - - Gets the numerator of a number. - - - - - Gets the denominator of a number. - - - - - Gets a value indicating whether this instance is indeterminate. - - - - - Gets a value indicating whether this instance is an integer (n, 1) - - - - - Gets a value indicating whether this instance is equal to negative infinity (-1, 0) - - - - - Gets a value indicating whether this instance is equal to positive infinity (1, 0) - - - - - Gets a value indicating whether this instance is equal to 0 (0, 1) - - - - - - - - - - - - - - Converts the numeric value of this instance to its equivalent string representation using - the specified culture-specific format information. - - - An object that supplies culture-specific formatting information. - - The - - - - Create a new instance of the struct from a double value. - - The to create the instance from. - Whether to use the best possible precision when parsing the value. - - - - Finds the greatest common divisor of two values. - - The first value - The second value - The - - - - Simplifies the - - - - - Extension methods for the struct. - - - - - Creates a translation matrix from the given vector. - - The translation position. - A translation matrix. - - - - Creates a scale matrix that is offset by a given center point. - - Value to scale by on the X-axis. - Value to scale by on the Y-axis. - The center point. - A scaling matrix. - - - - Creates a scale matrix from the given vector scale. - - The scale to use. - A scaling matrix. - - - - Creates a scale matrix from the given vector scale with an offset from the given center point. - - The scale to use. - The center offset. - A scaling matrix. - - - - Creates a scale matrix that scales uniformly with the given scale with an offset from the given center. - - The uniform scale to use. - The center offset. - A scaling matrix. - - - - Creates a skew matrix from the given angles in degrees. - - The X angle, in degrees. - The Y angle, in degrees. - A skew matrix. - - - - Creates a skew matrix from the given angles in radians and a center point. - - The X angle, in radians. - The Y angle, in radians. - The center point. - A skew matrix. - - - - Creates a skew matrix from the given angles in degrees and a center point. - - The X angle, in degrees. - The Y angle, in degrees. - The center point. - A skew matrix. - - - - Creates a rotation matrix using the given rotation in degrees. - - The amount of rotation, in degrees. - A rotation matrix. - - - - Creates a rotation matrix using the given rotation in radians and a center point. - - The amount of rotation, in radians. - The center point. - A rotation matrix. - - - - Creates a rotation matrix using the given rotation in degrees and a center point. - - The amount of rotation, in degrees. - The center point. - A rotation matrix. - - - - Represents an integral number. - - - - - Initializes a new instance of the struct. - - The value of the number. - - - - Initializes a new instance of the struct. - - The value of the number. - - - - Converts the specified to an instance of this type. - - The value. - - - - Converts the specified to an instance of this type. - - The value. - - - - Converts the specified to an instance of this type. - - The value. - - - - Converts the specified to a . - - The to convert. - - - - Converts the specified to a . - - The to convert. - - - - Converts the specified to a . - - The to convert. - - - - Determines whether the specified instances are considered equal. - - The first to compare. - The second to compare. - - - - Determines whether the specified instances are not considered equal. - - The first to compare. - The second to compare. - - - - Determines whether the first is more than the second . - - The first to compare. - The second to compare. - - - - Determines whether the first is less than the second . - - The first to compare. - The second to compare. - - - - Determines whether the first is more than or equal to the second . - - The first to compare. - The second to compare. - - - - Determines whether the first is less than or equal to the second . - - The first to compare. - The second to compare. - - - - - - - - - - - - - - - - - - - Converts the numeric value of this instance to its equivalent string representation using the specified culture-specific format information. - - An object that supplies culture-specific formatting information. - The string representation of the value of this instance, which consists of a sequence of digits ranging from 0 to 9, without a sign or leading zeros. - - - - Represents an ordered pair of integer x- and y-coordinates that defines a point in - a two-dimensional plane. - - - This struct is fully mutable. This is done (against the guidelines) for the sake of performance, - as it avoids the need to create new values for modification operations. - - - - - Represents a that has X and Y values set to zero. - - - - - Initializes a new instance of the struct. - - The horizontal and vertical position of the point. - - - - Initializes a new instance of the struct. - - The horizontal position of the point. - The vertical position of the point. - - - - Initializes a new instance of the struct from the given . - - The size. - - - - Gets or sets the x-coordinate of this . - - - - - Gets or sets the y-coordinate of this . - - - - - Gets a value indicating whether this is empty. - - - - - Creates a with the coordinates of the specified . - - The point. - - - - Creates a with the coordinates of the specified . - - The point. - - - - Creates a with the coordinates of the specified . - - The point. - - - - Negates the given point by multiplying all values by -1. - - The source point. - The negated point. - - - - Translates a by a given . - - The point on the left hand of the operand. - The size on the right hand of the operand. - - The . - - - - - Translates a by the negative of a given . - - The point on the left hand of the operand. - The size on the right hand of the operand. - The . - - - - Multiplies by a producing . - - Multiplier of type . - Multiplicand of type . - Product of type . - - - - Multiplies by a producing . - - Multiplicand of type . - Multiplier of type . - Product of type . - - - - Divides by a producing . - - Dividend of type . - Divisor of type . - Result of type . - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the current left is equal to the parameter; otherwise, false. - - - - - Compares two objects for inequality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the current left is unequal to the parameter; otherwise, false. - - - - - Translates a by the negative of a given . - - The point on the left hand of the operand. - The size on the right hand of the operand. - The . - - - - Translates a by the negative of a given value. - - The point on the left hand of the operand. - The value on the right hand of the operand. - The . - - - - Translates a by the negative of a given . - - The point on the left hand of the operand. - The size on the right hand of the operand. - The . - - - - Converts a to a by performing a ceiling operation on all the coordinates. - - The point. - The . - - - - Converts a to a by performing a round operation on all the coordinates. - - The point. - The . - - - - Converts a to a by performing a round operation on all the coordinates. - - The vector. - The . - - - - Converts a to a by performing a truncate operation on all the coordinates. - - The point. - The . - - - - Transforms a point by a specified 3x2 matrix. - - The point to transform. - The transformation matrix used. - The transformed . - - - - Deconstructs this point into two integers. - - The out value for X. - The out value for Y. - - - - Translates this by the specified amount. - - The amount to offset the x-coordinate. - The amount to offset the y-coordinate. - - - - Translates this by the specified amount. - - The used offset this . - - - - - - - - - - - - - - - - Represents an ordered pair of single precision floating point x- and y-coordinates that defines a point in - a two-dimensional plane. - - - This struct is fully mutable. This is done (against the guidelines) for the sake of performance, - as it avoids the need to create new values for modification operations. - - - - - Represents a that has X and Y values set to zero. - - - - - Initializes a new instance of the struct. - - The horizontal position of the point. - The vertical position of the point. - - - - Initializes a new instance of the struct from the given . - - The size. - - - - Gets or sets the x-coordinate of this . - - - - - Gets or sets the y-coordinate of this . - - - - - Gets a value indicating whether this is empty. - - - - - Creates a with the coordinates of the specified . - - The vector. - - The . - - - - - Creates a with the coordinates of the specified . - - The point. - - The . - - - - - Creates a with the coordinates of the specified by truncating each of the coordinates. - - The point. - - The . - - - - - Negates the given point by multiplying all values by -1. - - The source point. - The negated point. - - - - Translates a by a given . - - The point on the left hand of the operand. - The size on the right hand of the operand. - - The . - - - - - Translates a by the negative of a given . - - The point on the left hand of the operand. - The size on the right hand of the operand. - The . - - - - Translates a by a given . - - The point on the left hand of the operand. - The size on the right hand of the operand. - - The . - - - - - Translates a by the negative of a given . - - The point on the left hand of the operand. - The size on the right hand of the operand. - The . - - - - Multiplies by a producing . - - Multiplier of type . - Multiplicand of type . - Product of type . - - - - Multiplies by a producing . - - Multiplicand of type . - Multiplier of type . - Product of type . - - - - Divides by a producing . - - Dividend of type . - Divisor of type . - Result of type . - - - - Compares two objects for equality. - - - The on the left side of the operand. - - - The on the right side of the operand. - - - True if the current left is equal to the parameter; otherwise, false. - - - - - Compares two objects for inequality. - - - The on the left side of the operand. - - - The on the right side of the operand. - - - True if the current left is unequal to the parameter; otherwise, false. - - - - - Translates a by the given . - - The point on the left hand of the operand. - The size on the right hand of the operand. - The . - - - - Translates a by the given . - - The point on the left hand of the operand. - The point on the right hand of the operand. - The . - - - - Translates a by the negative of a given . - - The point on the left hand of the operand. - The size on the right hand of the operand. - The . - - - - Translates a by the negative of a given . - - The point on the left hand of the operand. - The point on the right hand of the operand. - The . - - - - Translates a by the multiplying the X and Y by the given value. - - The point on the left hand of the operand. - The value on the right hand of the operand. - The . - - - - Transforms a point by a specified 3x2 matrix. - - The point to transform. - The transformation matrix used. - The transformed . - - - - Deconstructs this point into two floats. - - The out value for X. - The out value for Y. - - - - Translates this by the specified amount. - - The amount to offset the x-coordinate. - The amount to offset the y-coordinate. - - - - Translates this by the specified amount. - - The used offset this . - - - - - - - - - - - - - - - - Represents a number that can be expressed as a fraction. - - - This is a very simplified implementation of a rational number designed for use with metadata only. - - - - - Initializes a new instance of the struct. - - The to create the rational from. - - - - Initializes a new instance of the struct. - - The number above the line in a vulgar fraction showing how many of the parts indicated by the denominator are taken. - The number below the line in a vulgar fraction; a divisor. - - - - Initializes a new instance of the struct. - - The number above the line in a vulgar fraction showing how many of the parts indicated by the denominator are taken. - The number below the line in a vulgar fraction; a divisor. - Specified if the rational should be simplified. - - - - Initializes a new instance of the struct. - - The to create the instance from. - - - - Initializes a new instance of the struct. - - The to create the instance from. - Whether to use the best possible precision when parsing the value. - - - - Gets the numerator of a number. - - - - - Gets the denominator of a number. - - - - - Determines whether the specified instances are considered equal. - - The first to compare. - The second to compare. - The - - - - Determines whether the specified instances are not considered equal. - - The first to compare. - The second to compare. - The - - - - Converts the specified to an instance of this type. - - The to convert to an instance of this type. - - The . - - - - - Converts the specified to an instance of this type. - - The to convert to an instance of this type. - Whether to use the best possible precision when parsing the value. - - The . - - - - - - - - - - - - - - Converts a rational number to the nearest . - - - The . - - - - - - - - Converts the numeric value of this instance to its equivalent string representation using - the specified culture-specific format information. - - - An object that supplies culture-specific formatting information. - - The - - - - Stores a set of four integers that represent the location and size of a rectangle. - - - This struct is fully mutable. This is done (against the guidelines) for the sake of performance, - as it avoids the need to create new values for modification operations. - - - - - Represents a that has X, Y, Width, and Height values set to zero. - - - - - Initializes a new instance of the struct. - - The horizontal position of the rectangle. - The vertical position of the rectangle. - The width of the rectangle. - The height of the rectangle. - - - - Initializes a new instance of the struct. - - - The which specifies the rectangles point in a two-dimensional plane. - - - The which specifies the rectangles height and width. - - - - - Gets or sets the x-coordinate of this . - - - - - Gets or sets the y-coordinate of this . - - - - - Gets or sets the width of this . - - - - - Gets or sets the height of this . - - - - - Gets or sets the coordinates of the upper-left corner of the rectangular region represented by this . - - - - - Gets or sets the size of this . - - - - - Gets a value indicating whether this is empty. - - - - - Gets the y-coordinate of the top edge of this . - - - - - Gets the x-coordinate of the right edge of this . - - - - - Gets the y-coordinate of the bottom edge of this . - - - - - Gets the x-coordinate of the left edge of this . - - - - - Creates a with the coordinates of the specified . - - The rectangle. - - - - Creates a with the coordinates of the specified . - - The rectangle. - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the current left is equal to the parameter; otherwise, false. - - - - - Compares two objects for inequality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the current left is unequal to the parameter; otherwise, false. - - - - - Creates a new with the specified location and size. - The left coordinate of the rectangle. - The top coordinate of the rectangle. - The right coordinate of the rectangle. - The bottom coordinate of the rectangle. - The . - - - - Returns the center point of the given . - - The rectangle. - The . - - - - Creates a rectangle that represents the intersection between and - . If there is no intersection, an empty rectangle is returned. - - The first rectangle. - The second rectangle. - The . - - - - Creates a that is inflated by the specified amount. - - The rectangle. - The amount to inflate the width by. - The amount to inflate the height by. - A new . - - - - Converts a to a by performing a ceiling operation on all the coordinates. - - The rectangle. - The . - - - - Transforms a rectangle by the given matrix. - - The source rectangle. - The transformation matrix. - A transformed rectangle. - - - - Converts a to a by performing a truncate operation on all the coordinates. - - The rectangle. - The . - - - - Converts a to a by performing a round operation on all the coordinates. - - The rectangle. - The . - - - - Creates a rectangle that represents the union between and . - - The first rectangle. - The second rectangle. - The . - - - - Deconstructs this rectangle into four integers. - - The out value for X. - The out value for Y. - The out value for the width. - The out value for the height. - - - - Creates a Rectangle that represents the intersection between this Rectangle and the . - - The rectangle. - - - - Inflates this by the specified amount. - - The width. - The height. - - - - Inflates this by the specified amount. - - The size. - - - - Determines if the specfied point is contained within the rectangular region defined by - this . - - The x-coordinate of the given point. - The y-coordinate of the given point. - The . - - - - Determines if the specified point is contained within the rectangular region defined by this . - - The point. - The . - - - - Determines if the rectangular region represented by is entirely contained - within the rectangular region represented by this . - - The rectangle. - The . - - - - Determines if the specfied intersects the rectangular region defined by - this . - - The other Rectange. - The . - - - - Adjusts the location of this rectangle by the specified amount. - - The point. - - - - Adjusts the location of this rectangle by the specified amount. - - The amount to offset the x-coordinate. - The amount to offset the y-coordinate. - - - - - - - - - - - - - - - - Stores a set of four single precision floating points that represent the location and size of a rectangle. - - - This struct is fully mutable. This is done (against the guidelines) for the sake of performance, - as it avoids the need to create new values for modification operations. - - - - - Represents a that has X, Y, Width, and Height values set to zero. - - - - - Initializes a new instance of the struct. - - The horizontal position of the rectangle. - The vertical position of the rectangle. - The width of the rectangle. - The height of the rectangle. - - - - Initializes a new instance of the struct. - - - The which specifies the rectangles point in a two-dimensional plane. - - - The which specifies the rectangles height and width. - - - - - Gets or sets the x-coordinate of this . - - - - - Gets or sets the y-coordinate of this . - - - - - Gets or sets the width of this . - - - - - Gets or sets the height of this . - - - - - Gets or sets the coordinates of the upper-left corner of the rectangular region represented by this . - - - - - Gets or sets the size of this . - - - - - Gets a value indicating whether this is empty. - - - - - Gets the y-coordinate of the top edge of this . - - - - - Gets the x-coordinate of the right edge of this . - - - - - Gets the y-coordinate of the bottom edge of this . - - - - - Gets the x-coordinate of the left edge of this . - - - - - Creates a with the coordinates of the specified by truncating each coordinate. - - The rectangle. - - - - Compares two objects for equality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the current left is equal to the parameter; otherwise, false. - - - - - Compares two objects for inequality. - - The on the left side of the operand. - The on the right side of the operand. - - True if the current left is unequal to the parameter; otherwise, false. - - - - - Creates a new with the specified location and size. - The left coordinate of the rectangle. - The top coordinate of the rectangle. - The right coordinate of the rectangle. - The bottom coordinate of the rectangle. - The . - - - - Returns the center point of the given . - - The rectangle. - The . - - - - Creates a rectangle that represents the intersection between and - . If there is no intersection, an empty rectangle is returned. - - The first rectangle. - The second rectangle. - The . - - - - Creates a that is inflated by the specified amount. - - The rectangle. - The amount to inflate the width by. - The amount to inflate the height by. - A new . - - - - Transforms a rectangle by the given matrix. - - The source rectangle. - The transformation matrix. - A transformed . - - - - Creates a rectangle that represents the union between and . - - The first rectangle. - The second rectangle. - The . - - - - Deconstructs this rectangle into four floats. - - The out value for X. - The out value for Y. - The out value for the width. - The out value for the height. - - - - Creates a RectangleF that represents the intersection between this RectangleF and the . - - The rectangle. - - - - Inflates this by the specified amount. - - The width. - The height. - - - - Inflates this by the specified amount. - - The size. - - - - Determines if the specfied point is contained within the rectangular region defined by - this . - - The x-coordinate of the given point. - The y-coordinate of the given point. - The . - - - - Determines if the specified point is contained within the rectangular region defined by this . - - The point. - The . - - - - Determines if the rectangular region represented by is entirely contained - within the rectangular region represented by this . - - The rectangle. - The . - - - - Determines if the specfied intersects the rectangular region defined by - this . - - The other Rectange. - The . - - - - Adjusts the location of this rectangle by the specified amount. - - The point. - - - - Adjusts the location of this rectangle by the specified amount. - - The amount to offset the x-coordinate. - The amount to offset the y-coordinate. - - - - - - - - - - - - - - - - Represents a number that can be expressed as a fraction. - - - This is a very simplified implementation of a rational number designed for use with metadata only. - - - - - Initializes a new instance of the struct. - - The to create the rational from. - - - - Initializes a new instance of the struct. - - The number above the line in a vulgar fraction showing how many of the parts indicated by the denominator are taken. - The number below the line in a vulgar fraction; a divisor. - - - - Initializes a new instance of the struct. - - The number above the line in a vulgar fraction showing how many of the parts indicated by the denominator are taken. - The number below the line in a vulgar fraction; a divisor. - Specified if the rational should be simplified. - - - - Initializes a new instance of the struct. - - The to create the instance from. - - - - Initializes a new instance of the struct. - - The to create the instance from. - Whether to use the best possible precision when parsing the value. - - - - Gets the numerator of a number. - - - - - Gets the denominator of a number. - - - - - Determines whether the specified instances are considered equal. - - The first to compare. - The second to compare. - The - - - - Determines whether the specified instances are not considered equal. - - The first to compare. - The second to compare. - The - - - - Converts the specified to an instance of this type. - - The to convert to an instance of this type. - - The . - - - - - Converts the specified to an instance of this type. - - The to convert to an instance of this type. - Whether to use the best possible precision when parsing the value. - - The . - - - - - - - - - - - - - - Converts a rational number to the nearest . - - - The . - - - - - - - - Converts the numeric value of this instance to its equivalent string representation using - the specified culture-specific format information. - - - An object that supplies culture-specific formatting information. - - The - - - - Stores an ordered pair of integers, which specify a height and width. - - - This struct is fully mutable. This is done (against the guidelines) for the sake of performance, - as it avoids the need to create new values for modification operations. - - - - - Represents a that has Width and Height values set to zero. - - - - - Initializes a new instance of the struct. - - The width and height of the size. - - - - Initializes a new instance of the struct. - - The width of the size. - The height of the size. - - - - Initializes a new instance of the struct. - - The size. - - - - Initializes a new instance of the struct from the given . - - The point. - - - - Gets or sets the width of this . - - - - - Gets or sets the height of this . - - - - - Gets a value indicating whether this is empty. - - - - - Creates a with the dimensions of the specified . - - The point. - - - - Converts the given into a . - - The size. - - - - Computes the sum of adding two sizes. - - The size on the left hand of the operand. - The size on the right hand of the operand. - - The . - - - - - Computes the difference left by subtracting one size from another. - - The size on the left hand of the operand. - The size on the right hand of the operand. - - The . - - - - - Multiplies a by an producing . - - Multiplier of type . - Multiplicand of type . - Product of type . - - - - Multiplies by an producing . - - Multiplicand of type . - Multiplier of type . - Product of type . - - - - Divides by an producing . - - Dividend of type . - Divisor of type . - Result of type . - - - - Multiplies by a producing . - - Multiplier of type . - Multiplicand of type . - Product of type . - - - - Multiplies by a producing . - - Multiplicand of type . - Multiplier of type . - Product of type . - - - - Divides by a producing . - - Dividend of type . - Divisor of type . - Result of type . - - - - Compares two objects for equality. - - - The on the left side of the operand. - - - The on the right side of the operand. - - - True if the current left is equal to the parameter; otherwise, false. - - - - - Compares two objects for inequality. - - - The on the left side of the operand. - - - The on the right side of the operand. - - - True if the current left is unequal to the parameter; otherwise, false. - - - - - Performs vector addition of two objects. - - The size on the left hand of the operand. - The size on the right hand of the operand. - The . - - - - Contracts a by another . - - The size on the left hand of the operand. - The size on the right hand of the operand. - The . - - - - Converts a to a by performing a ceiling operation on all the dimensions. - - The size. - The . - - - - Converts a to a by performing a round operation on all the dimensions. - - The size. - The . - - - - Transforms a size by the given matrix. - - The source size. - The transformation matrix. - A transformed size. - - - - Converts a to a by performing a round operation on all the dimensions. - - The size. - The . - - - - Deconstructs this size into two integers. - - The out value for the width. - The out value for the height. - - - - - - - - - - - - - - - - Multiplies by an producing . - - Multiplicand of type . - Multiplier of type . - Product of type . - - - - Multiplies by a producing . - - Multiplicand of type . - Multiplier of type . - Product of type SizeF. - - - - Stores an ordered pair of single precision floating points, which specify a height and width. - - - This struct is fully mutable. This is done (against the guidelines) for the sake of performance, - as it avoids the need to create new values for modification operations. - - - - - Represents a that has Width and Height values set to zero. - - - - - Initializes a new instance of the struct. - - The width of the size. - The height of the size. - - - - Initializes a new instance of the struct. - - The size. - - - - Initializes a new instance of the struct from the given . - - The point. - - - - Gets or sets the width of this . - - - - - Gets or sets the height of this . - - - - - Gets a value indicating whether this is empty. - - - - - Creates a with the coordinates of the specified . - - The point. - - The . - - - - - Creates a with the dimensions of the specified by truncating each of the dimensions. - - The size. - - The . - - - - - Converts the given into a . - - The size. - - - - Computes the sum of adding two sizes. - - The size on the left hand of the operand. - The size on the right hand of the operand. - - The . - - - - - Computes the difference left by subtracting one size from another. - - The size on the left hand of the operand. - The size on the right hand of the operand. - - The . - - - - - Multiplies by a producing . - - Multiplier of type . - Multiplicand of type . - Product of type . - - - - Multiplies by a producing . - - Multiplicand of type . - Multiplier of type . - Product of type . - - - - Divides by a producing . - - Dividend of type . - Divisor of type . - Result of type . - - - - Compares two objects for equality. - - The size on the left hand of the operand. - The size on the right hand of the operand. - - True if the current left is equal to the parameter; otherwise, false. - - - - - Compares two objects for inequality. - - The size on the left hand of the operand. - The size on the right hand of the operand. - - True if the current left is unequal to the parameter; otherwise, false. - - - - - Performs vector addition of two objects. - - The size on the left hand of the operand. - The size on the right hand of the operand. - The . - - - - Contracts a by another . - - The size on the left hand of the operand. - The size on the right hand of the operand. - The . - - - - Transforms a size by the given matrix. - - The source size. - The transformation matrix. - A transformed size. - - - - Deconstructs this size into two floats. - - The out value for the width. - The out value for the height. - - - - - - - - - - - - - - - - Multiplies by a producing . - - Multiplicand of type . - Multiplier of type . - Product of type SizeF. - - - - Represents a value in relation to a value on the image. - - - - - Initializes a new instance of the struct. - - The value. - The type. - - - - Enumerates the different value types. - - - - - The value is the final return value. - - - - - The value is a percentage of the image width. - - - - - The value is a percentage of the images height. - - - - - Gets the value. - - - - - Gets the type. - - - - - Implicitly converts a float into an absolute value. - - the value to use as the absolute figure. - - - - Create a new ValueSize with as a PercentageOfWidth type with value set to percentage. - - The percentage. - a Values size with type PercentageOfWidth - - - - Create a new ValueSize with as a PercentageOfHeight type with value set to percentage. - - The percentage. - a Values size with type PercentageOfHeight - - - - Create a new ValueSize with as a Absolute type with value set to value. - - The value. - a Values size with type Absolute. - - - - Calculates the specified size. - - The size. - The calculated value. - - - - - - - - - - - - - - - - Extensions to perform AdaptiveThreshold through Mutator. - - - - - Applies Bradley Adaptive Threshold to the image. - - The image this method extends. - The . - - - - Applies Bradley Adaptive Threshold to the image. - - The image this method extends. - Threshold limit (0.0-1.0) to consider for binarization. - The . - - - - Applies Bradley Adaptive Threshold to the image. - - The image this method extends. - Upper (white) color for thresholding. - Lower (black) color for thresholding. - The . - - - - Applies Bradley Adaptive Threshold to the image. - - The image this method extends. - Upper (white) color for thresholding. - Lower (black) color for thresholding. - Threshold limit (0.0-1.0) to consider for binarization. - The . - - - - Applies Bradley Adaptive Threshold to the image. - - The image this method extends. - Upper (white) color for thresholding. - Lower (black) color for thresholding. - Rectangle region to apply the processor on. - The . - - - - Applies Bradley Adaptive Threshold to the image. - - The image this method extends. - Upper (white) color for thresholding. - Lower (black) color for thresholding. - Threshold limit (0.0-1.0) to consider for binarization. - Rectangle region to apply the processor on. - The . - - - - A helper class for constructing instances for use in affine transforms. - - - - - Prepends a rotation matrix using the given rotation angle in degrees - and the image center point as rotation center. - - The amount of rotation, in degrees. - The . - - - - Prepends a rotation matrix using the given rotation angle in radians - and the image center point as rotation center. - - The amount of rotation, in radians. - The . - - - - Prepends a rotation matrix using the given rotation in degrees at the given origin. - - The amount of rotation, in degrees. - The rotation origin point. - The . - - - - Prepends a rotation matrix using the given rotation in radians at the given origin. - - The amount of rotation, in radians. - The rotation origin point. - The . - - - - Appends a rotation matrix using the given rotation angle in degrees - and the image center point as rotation center. - - The amount of rotation, in degrees. - The . - - - - Appends a rotation matrix using the given rotation angle in radians - and the image center point as rotation center. - - The amount of rotation, in radians. - The . - - - - Appends a rotation matrix using the given rotation in degrees at the given origin. - - The amount of rotation, in degrees. - The rotation origin point. - The . - - - - Appends a rotation matrix using the given rotation in radians at the given origin. - - The amount of rotation, in radians. - The rotation origin point. - The . - - - - Prepends a scale matrix from the given uniform scale. - - The uniform scale. - The . - - - - Prepends a scale matrix from the given vector scale. - - The horizontal and vertical scale. - The . - - - - Prepends a scale matrix from the given vector scale. - - The horizontal and vertical scale. - The . - - - - Appends a scale matrix from the given uniform scale. - - The uniform scale. - The . - - - - Appends a scale matrix from the given vector scale. - - The horizontal and vertical scale. - The . - - - - Appends a scale matrix from the given vector scale. - - The horizontal and vertical scale. - The . - - - - Prepends a centered skew matrix from the give angles in degrees. - - The X angle, in degrees. - The Y angle, in degrees. - The . - - - - Prepends a centered skew matrix from the give angles in radians. - - The X angle, in radians. - The Y angle, in radians. - The . - - - - Prepends a skew matrix using the given angles in degrees at the given origin. - - The X angle, in degrees. - The Y angle, in degrees. - The skew origin point. - The . - - - - Prepends a skew matrix using the given angles in radians at the given origin. - - The X angle, in radians. - The Y angle, in radians. - The skew origin point. - The . - - - - Appends a centered skew matrix from the give angles in degrees. - - The X angle, in degrees. - The Y angle, in degrees. - The . - - - - Appends a centered skew matrix from the give angles in radians. - - The X angle, in radians. - The Y angle, in radians. - The . - - - - Appends a skew matrix using the given angles in degrees at the given origin. - - The X angle, in degrees. - The Y angle, in degrees. - The skew origin point. - The . - - - - Appends a skew matrix using the given angles in radians at the given origin. - - The X angle, in radians. - The Y angle, in radians. - The skew origin point. - The . - - - - Prepends a translation matrix from the given vector. - - The translation position. - The . - - - - Prepends a translation matrix from the given vector. - - The translation position. - The . - - - - Appends a translation matrix from the given vector. - - The translation position. - The . - - - - Appends a translation matrix from the given vector. - - The translation position. - The . - - - - Prepends a raw matrix. - - The matrix to prepend. - - The resultant matrix is degenerate containing one or more values equivalent - to or a zero determinant and therefore cannot be used - for linear transforms. - - The . - - - - Appends a raw matrix. - - The matrix to append. - - The resultant matrix is degenerate containing one or more values equivalent - to or a zero determinant and therefore cannot be used - for linear transforms. - - The . - - - - Returns the combined matrix for a given source size. - - The source image size. - The . - - - - Returns the combined matrix for a given source rectangle. - - The rectangle in the source image. - - The resultant matrix is degenerate containing one or more values equivalent - to or a zero determinant and therefore cannot be used - for linear transforms. - - The . - - - - Enumerated anchor positions to apply to resized images. - - - - - Anchors the position of the image to the center of it's bounding container. - - - - - Anchors the position of the image to the top of it's bounding container. - - - - - Anchors the position of the image to the bottom of it's bounding container. - - - - - Anchors the position of the image to the left of it's bounding container. - - - - - Anchors the position of the image to the right of it's bounding container. - - - - - Anchors the position of the image to the top left side of it's bounding container. - - - - - Anchors the position of the image to the top right side of it's bounding container. - - - - - Anchors the position of the image to the bottom right side of it's bounding container. - - - - - Anchors the position of the image to the bottom left side of it's bounding container. - - - - - Selects the value to be compared to threshold. - - - - - Compare the color luminance (according to ITU-R Recommendation BT.709). - - - - - Compare the HSL saturation of the color. - - - - - Compare the maximum of YCbCr chroma value, i.e. Cb and Cr distance from achromatic value. - - - - - Enumerates the various types of defined color blindness filters. - - - - - Partial color desensitivity. - - - - - Complete color desensitivity (Monochrome) - - - - - Green weak - - - - - Green blind - - - - - Red weak - - - - - Red blind - - - - - Blue weak - - - - - Blue blind - - - - - Performs processor application operations on the source image - - The pixel format - - - - Initializes a new instance of the class. - - The configuration which allows altering default behaviour or extending the library. - The source image. - Whether to mutate the image. - - - - - - - - - - - - - - - - - - - - - - Defines extensions to apply binary dithering on an - using Mutate/Clone. - - - - - Dithers the image reducing it to two colors using ordered dithering. - - The image this method extends. - The ordered ditherer. - The to allow chaining of operations. - - - - Dithers the image reducing it to two colors using ordered dithering. - - The image this method extends. - The ordered ditherer. - The color to use for pixels that are above the threshold. - The color to use for pixels that are below the threshold - The to allow chaining of operations. - - - - Dithers the image reducing it to two colors using ordered dithering. - - The image this method extends. - The ordered ditherer. - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Dithers the image reducing it to two colors using ordered dithering. - - The image this method extends. - The ordered ditherer. - The color to use for pixels that are above the threshold. - The color to use for pixels that are below the threshold - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Defines extension methods to apply binary thresholding on an - using Mutate/Clone. - - - - - Applies binarization to the image splitting the pixels at the given threshold with - Luminance as the color component to be compared to threshold. - - The image this method extends. - The threshold to apply binarization of the image. Must be between 0 and 1. - The to allow chaining of operations. - - - - Applies binarization to the image splitting the pixels at the given threshold. - - The image this method extends. - The threshold to apply binarization of the image. Must be between 0 and 1. - Selects the value to be compared to threshold. - The to allow chaining of operations. - - - - Applies binarization to the image splitting the pixels at the given threshold with - Luminance as the color component to be compared to threshold. - - The image this method extends. - The threshold to apply binarization of the image. Must be between 0 and 1. - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Applies binarization to the image splitting the pixels at the given threshold. - - The image this method extends. - The threshold to apply binarization of the image. Must be between 0 and 1. - Selects the value to be compared to threshold. - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Applies binarization to the image splitting the pixels at the given threshold with - Luminance as the color component to be compared to threshold. - - The image this method extends. - The threshold to apply binarization of the image. Must be between 0 and 1. - The color to use for pixels that are above the threshold. - The color to use for pixels that are below the threshold - The to allow chaining of operations. - - - - Applies binarization to the image splitting the pixels at the given threshold. - - The image this method extends. - The threshold to apply binarization of the image. Must be between 0 and 1. - The color to use for pixels that are above the threshold. - The color to use for pixels that are below the threshold - Selects the value to be compared to threshold. - The to allow chaining of operations. - - - - Applies binarization to the image splitting the pixels at the given threshold with - Luminance as the color component to be compared to threshold. - - The image this method extends. - The threshold to apply binarization of the image. Must be between 0 and 1. - The color to use for pixels that are above the threshold. - The color to use for pixels that are below the threshold - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Applies binarization to the image splitting the pixels at the given threshold. - - The image this method extends. - The threshold to apply binarization of the image. Must be between 0 and 1. - The color to use for pixels that are above the threshold. - The color to use for pixels that are below the threshold - Selects the value to be compared to threshold. - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Adds bokeh blurring extensions to the type. - - - - - Applies a bokeh blur to the image. - - The image this method extends. - The to allow chaining of operations. - - - - Applies a bokeh blur to the image. - - The image this method extends. - The 'radius' value representing the size of the area to sample. - The 'components' value representing the number of kernels to use to approximate the bokeh effect. - The gamma highlight factor to use to emphasize bright spots in the source image - The to allow chaining of operations. - - - - Applies a bokeh blur to the image. - - The image this method extends. - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Applies a bokeh blur to the image. - - The image this method extends. - The 'radius' value representing the size of the area to sample. - The 'components' value representing the number of kernels to use to approximate the bokeh effect. - The gamma highlight factor to use to emphasize bright spots in the source image - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Defines extensions methods to apply box blurring to an - using Mutate/Clone. - - - - - Applies a box blur to the image. - - The image this method extends. - The to allow chaining of operations. - - - - Applies a box blur to the image. - - The image this method extends. - The 'radius' value representing the size of the area to sample. - The to allow chaining of operations. - - - - Applies a box blur to the image. - - The image this method extends. - The 'radius' value representing the size of the area to sample. - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Defines edge detection extensions applicable on an using Mutate/Clone. - - - - - Detects any edges within the image. - Uses the kernel operating in grayscale mode. - - The image this method extends. - The to allow chaining of operations. - - - - Detects any edges within the image. - Uses the kernel operating in grayscale mode. - - The image this method extends. - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Detects any edges within the image operating in grayscale mode. - - The image this method extends. - The 2D edge detector kernel. - The to allow chaining of operations. - - - - Detects any edges within the image using a . - - The image this method extends. - The 2D edge detector kernel. - - Whether to convert the image to grayscale before performing edge detection. - - The to allow chaining of operations. - - - - Detects any edges within the image operating in grayscale mode. - - The image this method extends. - The 2D edge detector kernel. - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Detects any edges within the image using a . - - The image this method extends. - The 2D edge detector kernel. - - Whether to convert the image to grayscale before performing edge detection. - - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Detects any edges within the image operating in grayscale mode. - - The image this method extends. - The edge detector kernel. - The to allow chaining of operations. - - - - Detects any edges within the image using a . - - The image this method extends. - The edge detector kernel. - - Whether to convert the image to grayscale before performing edge detection. - - The to allow chaining of operations. - - - - Detects any edges within the image operating in grayscale mode. - - The image this method extends. - The edge detector kernel. - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Detects any edges within the image using a . - - The image this method extends. - The edge detector kernel. - - Whether to convert the image to grayscale before performing edge detection. - - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Detects any edges within the image operating in grayscale mode. - - The image this method extends. - Thecompass edge detector kernel. - The to allow chaining of operations. - - - - Detects any edges within the image using a . - - The image this method extends. - Thecompass edge detector kernel. - - Whether to convert the image to grayscale before performing edge detection. - - The to allow chaining of operations. - - - - Detects any edges within the image operating in grayscale mode. - - The image this method extends. - Thecompass edge detector kernel. - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Detects any edges within the image using a . - - The image this method extends. - Thecompass edge detector kernel. - - Whether to convert the image to grayscale before performing edge detection. - - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Defines Gaussian blurring extensions to apply on an - using Mutate/Clone. - - - - - Applies a Gaussian blur to the image. - - The image this method extends. - The to allow chaining of operations. - - - - Applies a Gaussian blur to the image. - - The image this method extends. - The 'sigma' value representing the weight of the blur. - The to allow chaining of operations. - - - - Applies a Gaussian blur to the image. - - The image this method extends. - The 'sigma' value representing the weight of the blur. - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Defines Gaussian sharpening extensions to apply on an - using Mutate/Clone. - - - - - Applies a Gaussian sharpening filter to the image. - - The image this method extends. - The to allow chaining of operations. - - - - Applies a Gaussian sharpening filter to the image. - - The image this method extends. - The 'sigma' value representing the weight of the blur. - The to allow chaining of operations. - - - - Applies a Gaussian sharpening filter to the image. - - The image this method extends. - The 'sigma' value representing the weight of the blur. - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Defines dithering extensions to apply on an - using Mutate/Clone. - - - - - Dithers the image reducing it to a web-safe palette using . - - The image this method extends. - The to allow chaining of operations. - - - - Dithers the image reducing it to a web-safe palette using ordered dithering. - - The image this method extends. - The ordered ditherer. - The to allow chaining of operations. - - - - Dithers the image reducing it to a web-safe palette using ordered dithering. - - The image this method extends. - The ordered ditherer. - The dithering scale used to adjust the amount of dither. - The to allow chaining of operations. - - - - Dithers the image reducing it to the given palette using ordered dithering. - - The image this method extends. - The ordered ditherer. - The palette to select substitute colors from. - The to allow chaining of operations. - - - - Dithers the image reducing it to the given palette using ordered dithering. - - The image this method extends. - The ordered ditherer. - The dithering scale used to adjust the amount of dither. - The palette to select substitute colors from. - The to allow chaining of operations. - - - - Dithers the image reducing it to a web-safe palette using . - - The image this method extends. - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Dithers the image reducing it to a web-safe palette using ordered dithering. - - The image this method extends. - The ordered ditherer. - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Dithers the image reducing it to a web-safe palette using ordered dithering. - - The image this method extends. - The ordered ditherer. - The dithering scale used to adjust the amount of dither. - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Dithers the image reducing it to the given palette using ordered dithering. - - The image this method extends. - The ordered ditherer. - The palette to select substitute colors from. - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Dithers the image reducing it to the given palette using ordered dithering. - - The image this method extends. - The ordered ditherer. - The dithering scale used to adjust the amount of dither. - The palette to select substitute colors from. - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Adds extensions that allow the drawing of images to the type. - - - - - Draws the given image together with the current one by blending their pixels. - - The image this method extends. - The image to blend with the currently processing image. - The opacity of the image to blend. Must be between 0 and 1. - The . - - - - Draws the given image together with the current one by blending their pixels. - - The image this method extends. - The image to blend with the currently processing image. - The blending mode. - The opacity of the image to blend. Must be between 0 and 1. - The . - - - - Draws the given image together with the current one by blending their pixels. - - The image this method extends. - The image to blend with the currently processing image. - The color blending mode. - The alpha composition mode. - The opacity of the image to blend. Must be between 0 and 1. - The . - - - - Draws the given image together with the current one by blending their pixels. - - The image this method extends. - The image to blend with the currently processing image. - The options, including the blending type and blending amount. - The . - - - - Draws the given image together with the current one by blending their pixels. - - The image this method extends. - The image to blend with the currently processing image. - The location to draw the blended image. - The opacity of the image to blend. Must be between 0 and 1. - The . - - - - Draws the given image together with the current one by blending their pixels. - - The image this method extends. - The image to blend with the currently processing image. - The location to draw the blended image. - The color blending to apply. - The opacity of the image to blend. Must be between 0 and 1. - The . - - - - Draws the given image together with the current one by blending their pixels. - - The image this method extends. - The image to blend with the currently processing image. - The location to draw the blended image. - The color blending to apply. - The alpha composition mode. - The opacity of the image to blend. Must be between 0 and 1. - The . - - - - Draws the given image together with the current one by blending their pixels. - - The image this method extends. - The image to blend with the currently processing image. - The location to draw the blended image. - The options containing the blend mode and opacity. - The . - - - - Defines oil painting effect extensions applicable on an - using Mutate/Clone. - - - - - Alters the colors of the image recreating an oil painting effect with levels and brushSize - set to 10 and 15 respectively. - - The image this method extends. - The to allow chaining of operations. - - - - Alters the colors of the image recreating an oil painting effect with levels and brushSize - set to 10 and 15 respectively. - - The image this method extends. - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Alters the colors of the image recreating an oil painting effect. - - The image this method extends. - The number of intensity levels. Higher values result in a broader range of color intensities forming part of the result image. - The number of neighboring pixels used in calculating each individual pixel value. - The to allow chaining of operations. - - - - Alters the colors of the image recreating an oil painting effect. - - The image this method extends. - The number of intensity levels. Higher values result in a broader range of color intensities forming part of the result image. - The number of neighboring pixels used in calculating each individual pixel value. - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Defines pixelation effect extensions applicable on an - using Mutate/Clone. - - - - - Pixelates an image with the given pixel size. - - The image this method extends. - The to allow chaining of operations. - - - - Pixelates an image with the given pixel size. - - The image this method extends. - The size of the pixels. - The to allow chaining of operations. - - - - Pixelates an image with the given pixel size. - - The image this method extends. - The size of the pixels. - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Defines extension methods that allow the application of user defined processing delegate to an . - - - - - Applies a user defined processing delegate to the image. - - The image this method extends. - The user defined processing delegate to use to modify image rows. - The to allow chaining of operations. - - - - Applies a user defined processing delegate to the image. - - The image this method extends. - The user defined processing delegate to use to modify image rows. - The to apply during the pixel conversions. - The to allow chaining of operations. - - - - Applies a user defined processing delegate to the image. - - The image this method extends. - The user defined processing delegate to use to modify image rows. - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Applies a user defined processing delegate to the image. - - The image this method extends. - The user defined processing delegate to use to modify image rows. - - The structure that specifies the portion of the image object to alter. - - The to apply during the pixel conversions. - The to allow chaining of operations. - - - - Applies a user defined processing delegate to the image. - - The image this method extends. - The user defined processing delegate to use to modify image rows. - The to allow chaining of operations. - - - - Applies a user defined processing delegate to the image. - - The image this method extends. - The user defined processing delegate to use to modify image rows. - The to apply during the pixel conversions. - The to allow chaining of operations. - - - - Applies a user defined processing delegate to the image. - - The image this method extends. - The user defined processing delegate to use to modify image rows. - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Applies a user defined processing delegate to the image. - - The image this method extends. - The user defined processing delegate to use to modify image rows. - - The structure that specifies the portion of the image object to alter. - - The to apply during the pixel conversions. - The to allow chaining of operations. - - - - Defines extension methods that allow the application of black and white toning to an - using Mutate/Clone. - - - - - Applies black and white toning to the image. - - The image this method extends. - The to allow chaining of operations. - - - - Applies black and white toning to the image. - - The image this method extends. - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Defines extensions that allow the alteration of the brightness component of an - using Mutate/Clone. - - - - - Alters the brightness component of the image. - - - A value of 0 will create an image that is completely black. A value of 1 leaves the input unchanged. - Other values are linear multipliers on the effect. Values of an amount over 1 are allowed, providing brighter results. - - The image this method extends. - The proportion of the conversion. Must be greater than or equal to 0. - The to allow chaining of operations. - - - - Alters the brightness component of the image. - - - A value of 0 will create an image that is completely black. A value of 1 leaves the input unchanged. - Other values are linear multipliers on the effect. Values of an amount over 1 are allowed, providing brighter results. - - The image this method extends. - The proportion of the conversion. Must be greater than or equal to 0. - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Defines extensions that simulate the effects of various color blindness disorders on an - using Mutate/Clone. - - - - - Applies the given colorblindness simulator to the image. - - The image this method extends. - The type of color blindness simulator to apply. - The to allow chaining of operations. - - - - Applies the given colorblindness simulator to the image. - - The image this method extends. - The type of color blindness simulator to apply. - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Defines extensions that allow the alteration of the contrast component of an - using Mutate/Clone. - - - - - Alters the contrast component of the image. - - - A value of 0 will create an image that is completely gray. A value of 1 leaves the input unchanged. - Other values are linear multipliers on the effect. Values of an amount over 1 are allowed, providing results with more contrast. - - The image this method extends. - The proportion of the conversion. Must be greater than or equal to 0. - The to allow chaining of operations. - - - - Alters the contrast component of the image. - - - A value of 0 will create an image that is completely gray. A value of 1 leaves the input unchanged. - Other values are linear multipliers on the effect. Values of an amount over 1 are allowed, providing results with more contrast. - - The image this method extends. - The proportion of the conversion. Must be greater than or equal to 0. - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Defines extensions that allow the application of composable filters to an - using Mutate/Clone. - - - - - Filters an image by the given color matrix - - The image this method extends. - The filter color matrix - The to allow chaining of operations. - - - - Filters an image by the given color matrix - - The image this method extends. - The filter color matrix - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Defines extensions that allow the application of grayscale toning to an - using Mutate/Clone. - - - - - Applies grayscale toning to the image. - - The image this method extends. - The . - - - - Applies grayscale toning to the image using the given amount. - - The image this method extends. - The proportion of the conversion. Must be between 0 and 1. - The . - - - - Applies grayscale toning to the image with the given . - - The image this method extends. - The formula to apply to perform the operation. - The . - - - - Applies grayscale toning to the image with the given using the given amount. - - The image this method extends. - The formula to apply to perform the operation. - The proportion of the conversion. Must be between 0 and 1. - The . - - - - Applies grayscale toning to the image. - - The image this method extends. - - The structure that specifies the portion of the image object to alter. - - The . - - - - Applies grayscale toning to the image using the given amount. - - The image this method extends. - The proportion of the conversion. Must be between 0 and 1. - - The structure that specifies the portion of the image object to alter. - - The . - - - - Applies grayscale toning to the image. - - The image this method extends. - The formula to apply to perform the operation. - - The structure that specifies the portion of the image object to alter. - - The . - - - - Applies grayscale toning to the image using the given amount. - - The image this method extends. - The formula to apply to perform the operation. - The proportion of the conversion. Must be between 0 and 1. - - The structure that specifies the portion of the image object to alter. - - The . - - - - Defines extensions that allow the alteration of the hue component of an - using Mutate/Clone. - - - - - Alters the hue component of the image. - - The image this method extends. - The rotation angle in degrees to adjust the hue. - The to allow chaining of operations. - - - - Alters the hue component of the image. - - The image this method extends. - The rotation angle in degrees to adjust the hue. - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Defines extensions that allow the inversion of colors of an - using Mutate/Clone. - - - - - Inverts the colors of the image. - - The image this method extends. - The to allow chaining of operations. - - - - Inverts the colors of the image. - - The image this method extends. - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Defines extensions that allow the recreation of an old Kodachrome camera effect on an - using Mutate/Clone. - - - - - Alters the colors of the image recreating an old Kodachrome camera effect. - - The image this method extends. - The to allow chaining of operations. - - - - Alters the colors of the image recreating an old Kodachrome camera effect. - - The image this method extends. - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Defines extensions that allow the alteration of the lightness component of an - using Mutate/Clone. - - - - - Alters the lightness component of the image. - - - A value of 0 will create an image that is completely black. A value of 1 leaves the input unchanged. - Other values are linear multipliers on the effect. Values of an amount over 1 are allowed, providing lighter results. - - The image this method extends. - The proportion of the conversion. Must be greater than or equal to 0. - The to allow chaining of operations. - - - - Alters the lightness component of the image. - - - A value of 0 will create an image that is completely black. A value of 1 leaves the input unchanged. - Other values are linear multipliers on the effect. Values of an amount over 1 are allowed, providing lighter results. - - The image this method extends. - The proportion of the conversion. Must be greater than or equal to 0. - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Defines extensions that allow the recreation of an old Lomograph camera effect on an - using Mutate/Clone. - - - - - Alters the colors of the image recreating an old Lomograph camera effect. - - The image this method extends. - The to allow chaining of operations. - - - - Alters the colors of the image recreating an old Lomograph camera effect. - - The image this method extends. - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Defines extensions that allow the alteration of the opacity component of an - using Mutate/Clone. - - - - - Multiplies the alpha component of the image. - - The image this method extends. - The proportion of the conversion. Must be between 0 and 1. - The to allow chaining of operations. - - - - Multiplies the alpha component of the image. - - The image this method extends. - The proportion of the conversion. Must be between 0 and 1. - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Defines extensions that allow the recreation of an old Polaroid camera effect on an - using Mutate/Clone. - - - - - Alters the colors of the image recreating an old Polaroid camera effect. - - The image this method extends. - The to allow chaining of operations. - - - - Alters the colors of the image recreating an old Polaroid camera effect. - - The image this method extends. - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Defines extensions that allow the alteration of the saturation component of an - using Mutate/Clone. - - - - - Alters the saturation component of the image. - - - A value of 0 is completely un-saturated. A value of 1 leaves the input unchanged. - Other values are linear multipliers on the effect. Values of amount over 1 are allowed, providing super-saturated results - - The image this method extends. - The proportion of the conversion. Must be greater than or equal to 0. - The to allow chaining of operations. - - - - Alters the saturation component of the image. - - - A value of 0 is completely un-saturated. A value of 1 leaves the input unchanged. - Other values are linear multipliers on the effect. Values of amount over 1 are allowed, providing super-saturated results - - The image this method extends. - The proportion of the conversion. Must be greater than or equal to 0. - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Defines extensions that allow the application of sepia toning on an - using Mutate/Clone. - - - - - Applies sepia toning to the image. - - The image this method extends. - The to allow chaining of operations. - - - - Applies sepia toning to the image using the given amount. - - The image this method extends. - The proportion of the conversion. Must be between 0 and 1. - The to allow chaining of operations. - - - - Applies sepia toning to the image. - - The image this method extends. - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Applies sepia toning to the image. - - The image this method extends. - The proportion of the conversion. Must be between 0 and 1. - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Defines extension that allow the adjustment of the contrast of an image via its histogram. - - - - - Equalizes the histogram of an image to increases the contrast. - - The image this method extends. - The to allow chaining of operations. - - - - Equalizes the histogram of an image to increases the contrast. - - The image this method extends. - The histogram equalization options to use. - The to allow chaining of operations. - - - - Defines extension methods to replace the background color of an - using Mutate/Clone. - - - - - Replaces the background color of image with the given one. - - The image this method extends. - The color to set as the background. - The to allow chaining of operations. - - - - Replaces the background color of image with the given one. - - The image this method extends. - The color to set as the background. - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Replaces the background color of image with the given one. - - The image this method extends. - The options effecting pixel blending. - The color to set as the background. - The to allow chaining of operations. - - - - Replaces the background color of image with the given one. - - The image this method extends. - The options effecting pixel blending. - The color to set as the background. - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Defines extensions that allow the application of a radial glow on an - using Mutate/Clone. - - - - - Applies a radial glow effect to an image. - - The image this method extends. - The to allow chaining of operations. - - - - Applies a radial glow effect to an image. - - The image this method extends. - The color to set as the glow. - The to allow chaining of operations. - - - - Applies a radial glow effect to an image. - - The image this method extends. - The the radius. - The to allow chaining of operations. - - - - Applies a radial glow effect to an image. - - The image this method extends. - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Applies a radial glow effect to an image. - - The image this method extends. - The color to set as the glow. - The the radius. - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Applies a radial glow effect to an image. - - The image this method extends. - The options effecting things like blending. - The to allow chaining of operations. - - - - Applies a radial glow effect to an image. - - The image this method extends. - The options effecting things like blending. - The color to set as the glow. - The to allow chaining of operations. - - - - Applies a radial glow effect to an image. - - The image this method extends. - The options effecting things like blending. - The the radius. - The to allow chaining of operations. - - - - Applies a radial glow effect to an image. - - The image this method extends. - The options effecting things like blending. - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Applies a radial glow effect to an image. - - The image this method extends. - The options effecting things like blending. - The color to set as the glow. - The the radius. - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Applies a radial glow effect to an image. - - The image this method extends. - The options effecting things like blending. - The color to set as the glow. - The the radius. - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Applies a radial glow effect to an image. - - The image this method extends. - The options effecting things like blending. - The color to set as the glow. - The the radius. - The to allow chaining of operations. - - - - Defines extensions that allow the application of a radial glow to an - using Mutate/Clone. - - - - - Applies a radial vignette effect to an image. - - The image this method extends. - The to allow chaining of operations. - - - - Applies a radial vignette effect to an image. - - The image this method extends. - The color to set as the vignette. - The to allow chaining of operations. - - - - Applies a radial vignette effect to an image. - - The image this method extends. - The the x-radius. - The the y-radius. - The to allow chaining of operations. - - - - Applies a radial vignette effect to an image. - - The image this method extends. - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Applies a radial vignette effect to an image. - - The image this method extends. - The color to set as the vignette. - The the x-radius. - The the y-radius. - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Applies a radial vignette effect to an image. - - The image this method extends. - The options effecting pixel blending. - The to allow chaining of operations. - - - - Applies a radial vignette effect to an image. - - The image this method extends. - The options effecting pixel blending. - The color to set as the vignette. - The to allow chaining of operations. - - - - Applies a radial vignette effect to an image. - - The image this method extends. - The options effecting pixel blending. - The the x-radius. - The the y-radius. - The to allow chaining of operations. - - - - Applies a radial vignette effect to an image. - - The image this method extends. - The options effecting pixel blending. - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Applies a radial vignette effect to an image. - - The image this method extends. - The options effecting pixel blending. - The color to set as the vignette. - The the x-radius. - The the y-radius. - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Adds extensions that allow the processing of images to the type. - - - - - Mutates the source image by applying the image operation to it. - - The image to mutate. - The operation to perform on the source. - The source is null. - The operation is null. - The source has been disposed. - The processing operation failed. - - - - Mutates the source image by applying the image operation to it. - - The image to mutate. - The configuration which allows altering default behaviour or extending the library. - The operation to perform on the source. - The configuration is null. - The source is null. - The operation is null. - The source has been disposed. - The processing operation failed. - - - - Mutates the source image by applying the image operation to it. - - The pixel format. - The image to mutate. - The operation to perform on the source. - The source is null. - The operation is null. - The source has been disposed. - The processing operation failed. - - - - Mutates the source image by applying the image operation to it. - - The pixel format. - The image to mutate. - The configuration which allows altering default behaviour or extending the library. - The operation to perform on the source. - The configuration is null. - The source is null. - The operation is null. - The source has been disposed. - The processing operation failed. - - - - Mutates the source image by applying the operations to it. - - The pixel format. - The image to mutate. - The operations to perform on the source. - The source is null. - The operations are null. - The source has been disposed. - The processing operation failed. - - - - Mutates the source image by applying the operations to it. - - The pixel format. - The image to mutate. - The configuration which allows altering default behaviour or extending the library. - The operations to perform on the source. - The configuration is null. - The source is null. - The operations are null. - The source has been disposed. - The processing operation failed. - - - - Creates a deep clone of the current image. The clone is then mutated by the given operation. - - The image to clone. - The operation to perform on the clone. - The new . - The source is null. - The operation is null. - The source has been disposed. - The processing operation failed. - - - - Creates a deep clone of the current image. The clone is then mutated by the given operation. - - The image to clone. - The configuration which allows altering default behaviour or extending the library. - The operation to perform on the clone. - The configuration is null. - The source is null. - The operation is null. - The source has been disposed. - The processing operation failed. - The new . - - - - Creates a deep clone of the current image. The clone is then mutated by the given operation. - - The pixel format. - The image to clone. - The operation to perform on the clone. - The source is null. - The operation is null. - The source has been disposed. - The processing operation failed. - The new . - - - - Creates a deep clone of the current image. The clone is then mutated by the given operation. - - The pixel format. - The image to clone. - The configuration which allows altering default behaviour or extending the library. - The operation to perform on the clone. - The configuration is null. - The source is null. - The operation is null. - The source has been disposed. - The processing operation failed. - The new - - - - Creates a deep clone of the current image. The clone is then mutated by the given operations. - - The pixel format. - The image to clone. - The operations to perform on the clone. - The source is null. - The operations are null. - The source has been disposed. - The processing operation failed. - The new - - - - Creates a deep clone of the current image. The clone is then mutated by the given operations. - - The pixel format. - The image to clone. - The configuration which allows altering default behaviour or extending the library. - The operations to perform on the clone. - The configuration is null. - The source is null. - The operations are null. - The source has been disposed. - The processing operation failed. - The new - - - - Applies the given collection against the context - - The image processing context. - The operations to perform on the source. - The processing operation failed. - The to allow chaining of operations. - - - - Defines extensions that allow the application of quantizing algorithms on an - using Mutate/Clone. - - - - - Applies quantization to the image using the . - - The image this method extends. - The to allow chaining of operations. - - - - Applies quantization to the image. - - The image this method extends. - The quantizer to apply to perform the operation. - The to allow chaining of operations. - - - - Applies quantization to the image using the . - - The image this method extends. - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Applies quantization to the image. - - The image this method extends. - The quantizer to apply to perform the operation. - - The structure that specifies the portion of the image object to alter. - - The to allow chaining of operations. - - - - Defines extensions that allow the application of auto-orientation operations to an - using Mutate/Clone. - - - - - Adjusts an image so that its orientation is suitable for viewing. Adjustments are based on EXIF metadata embedded in the image. - - The image to auto rotate. - The to allow chaining of operations. - - - - Defines extensions that allow the application of cropping operations on an - using Mutate/Clone. - - - - - Crops an image to the given width and height. - - The image to resize. - The target image width. - The target image height. - The to allow chaining of operations. - - - - Crops an image to the given rectangle. - - The image to crop. - - The structure that specifies the portion of the image object to retain. - - The to allow chaining of operations. - - - - Defines extensions that allow the application of entropy cropping operations on an - using Mutate/Clone. - - - - - Crops an image to the area of greatest entropy using a threshold for entropic density of .5F. - - The image to crop. - The to allow chaining of operations. - - - - Crops an image to the area of greatest entropy. - - The image to crop. - The threshold for entropic density. - The to allow chaining of operations. - - - - Defines extensions that allow the application of flipping operations on an - using Mutate/Clone. - - - - - Flips an image by the given instructions. - - The image to rotate, flip, or both. - The to perform the flip. - The to allow chaining of operations. - - - - Defines extensions that allow the application of padding operations on an - using Mutate/Clone. - - - - - Evenly pads an image to fit the new dimensions. - - The source image to pad. - The new width. - The new height. - The to allow chaining of operations. - - - - Evenly pads an image to fit the new dimensions with the given background color. - - The source image to pad. - The new width. - The new height. - The background color with which to pad the image. - The to allow chaining of operations. - - - - Defines extensions that allow the application of resize operations on an - using Mutate/Clone. - - - - - Resizes an image to the given . - - The image to resize. - The target image size. - The to allow chaining of operations. - Passing zero for one of height or width will automatically preserve the aspect ratio of the original image or the nearest possible ratio. - - - - Resizes an image to the given . - - The image to resize. - The target image size. - Whether to compress and expand the image color-space to gamma correct the image during processing. - The to allow chaining of operations. - Passing zero for one of height or width will automatically preserve the aspect ratio of the original image or the nearest possible ratio. - - - - Resizes an image to the given width and height. - - The image to resize. - The target image width. - The target image height. - The to allow chaining of operations. - Passing zero for one of height or width will automatically preserve the aspect ratio of the original image or the nearest possible ratio. - - - - Resizes an image to the given width and height. - - The image to resize. - The target image width. - The target image height. - Whether to compress and expand the image color-space to gamma correct the image during processing. - The to allow chaining of operations. - Passing zero for one of height or width will automatically preserve the aspect ratio of the original image or the nearest possible ratio. - - - - Resizes an image to the given width and height with the given sampler. - - The image to resize. - The target image width. - The target image height. - The to perform the resampling. - The to allow chaining of operations. - Passing zero for one of height or width will automatically preserve the aspect ratio of the original image or the nearest possible ratio. - - - - Resizes an image to the given width and height with the given sampler. - - The image to resize. - The target image size. - The to perform the resampling. - Whether to compress and expand the image color-space to gamma correct the image during processing. - The to allow chaining of operations. - Passing zero for one of height or width will automatically preserve the aspect ratio of the original image or the nearest possible ratio. - - - - Resizes an image to the given width and height with the given sampler. - - The image to resize. - The target image width. - The target image height. - The to perform the resampling. - Whether to compress and expand the image color-space to gamma correct the image during processing. - The to allow chaining of operations. - Passing zero for one of height or width will automatically preserve the aspect ratio of the original image or the nearest possible ratio. - - - - Resizes an image to the given width and height with the given sampler and - source rectangle. - - The image to resize. - The target image width. - The target image height. - The to perform the resampling. - - The structure that specifies the portion of the image object to draw. - - - The structure that specifies the portion of the target image object to draw to. - - Whether to compress and expand the image color-space to gamma correct the image during processing. - The to allow chaining of operations. - Passing zero for one of height or width will automatically preserve the aspect ratio of the original image or the nearest possible ratio. - - - - Resizes an image to the given width and height with the given sampler and source rectangle. - - The image to resize. - The target image width. - The target image height. - The to perform the resampling. - - The structure that specifies the portion of the target image object to draw to. - - Whether to compress and expand the image color-space to gamma correct the image during processing. - The to allow chaining of operations. - Passing zero for one of height or width will automatically preserve the aspect ratio of the original image or the nearest possible ratio. - - - - Resizes an image in accordance with the given . - - The image to resize. - The resize options. - The to allow chaining of operations. - Passing zero for one of height or width within the resize options will automatically preserve the aspect ratio of the original image or the nearest possible ratio. - - - - Defines extensions that allow the application of rotate operations on an - using Mutate/Clone. - - - - - Rotates and flips an image by the given instructions. - - The image to rotate. - The to perform the rotation. - The to allow chaining of operations. - - - - Rotates an image by the given angle in degrees. - - The image to rotate. - The angle in degrees to perform the rotation. - The to allow chaining of operations. - - - - Rotates an image by the given angle in degrees using the specified sampling algorithm. - - The image to rotate. - The angle in degrees to perform the rotation. - The to perform the resampling. - The to allow chaining of operations. - - - - Defines extensions that allow the application of rotate-flip operations on an - using Mutate/Clone. - - - - - Rotates and flips an image by the given instructions. - - The image to rotate, flip, or both. - The to perform the rotation. - The to perform the flip. - The to allow chaining of operations. - - - - Defines extensions that allow the application of skew operations on an - using Mutate/Clone. - - - - - Skews an image by the given angles in degrees. - - The image to skew. - The angle in degrees to perform the skew along the x-axis. - The angle in degrees to perform the skew along the y-axis. - The to allow chaining of operations. - - - - Skews an image by the given angles in degrees using the specified sampling algorithm. - - The image to skew. - The angle in degrees to perform the skew along the x-axis. - The angle in degrees to perform the skew along the y-axis. - The to perform the resampling. - The to allow chaining of operations. - - - - Defines extensions that allow the application of swizzle operations on an - - - - - Swizzles an image. - - The image to swizzle. - The swizzler function. - The swizzler function type. - The to allow chaining of operations. - - - - Defines extensions that allow the application of composable transform operations on an - using Mutate/Clone. - - - - - Performs an affine transform of an image. - - The image to transform. - The affine transform builder. - The - - - - Performs an affine transform of an image using the specified sampling algorithm. - - The . - The affine transform builder. - The to perform the resampling. - The to allow chaining of operations. - - - - Performs an affine transform of an image using the specified sampling algorithm. - - The . - The source rectangle - The affine transform builder. - The to perform the resampling. - The to allow chaining of operations. - - - - Performs an affine transform of an image using the specified sampling algorithm. - - The . - The source rectangle - The transformation matrix. - The size of the result image. - The to perform the resampling. - The to allow chaining of operations. - - - - Performs a projective transform of an image. - - The image to transform. - The affine transform builder. - The to allow chaining of operations. - - - - Performs a projective transform of an image using the specified sampling algorithm. - - The . - The projective transform builder. - The to perform the resampling. - The to allow chaining of operations. - - - - Performs a projective transform of an image using the specified sampling algorithm. - - The . - The source rectangle - The projective transform builder. - The to perform the resampling. - The to allow chaining of operations. - - - - Performs a projective transform of an image using the specified sampling algorithm. - - The . - The source rectangle - The transformation matrix. - The size of the result image. - The to perform the resampling. - The to allow chaining of operations. - - - - Provides enumeration over how a image should be flipped. - - - - - Don't flip the image. - - - - - Flip the image horizontally. - - - - - Flip the image vertically. - - - - - Enumerates the various types of defined grayscale filters. - - - - - ITU-R Recommendation BT.709 - - - - - ITU-R Recommendation BT.601 - - - - - A pixel-agnostic interface to queue up image operations to apply to an image. - - - - - Gets the configuration which allows altering default behaviour or extending the library. - - - - - Gets a set of properties for the Image Processing Context. - - This can be used for storing global settings and defaults to be accessable to processors. - - - - Gets the image dimensions at the current point in the processing pipeline. - - The . - - - - Adds the processor to the current set of image operations to be applied. - - The processor to apply. - The area to apply it to. - The current operations class to allow chaining of operations. - - - - Adds the processor to the current set of image operations to be applied. - - The processor to apply. - The current operations class to allow chaining of operations. - - - - Represents an interface that will create IInternalImageProcessingContext instances - - - - - Called during mutate operations to generate the image operations provider. - - The pixel format - The configuration which allows altering default behaviour or extending the library. - The source image. - A flag to determine whether image operations are allowed to mutate the source image. - A new - - - - The default implementation of - - - - - - - - An interface for internal operations we don't want to expose on . - - The pixel type. - - - - Returns the result image to return by - (and other overloads). - - The current image or a new image depending on whether it is requested to mutate the source image. - - - - Contains reusable static instances of known dithering algorithms. - - - - - Gets the order ditherer using the 2x2 Bayer dithering matrix - - - - - Gets the order ditherer using the 3x3 dithering matrix - - - - - Gets the order ditherer using the 4x4 Bayer dithering matrix - - - - - Gets the order ditherer using the 8x8 Bayer dithering matrix - - - - - Gets the error Dither that implements the Atkinson algorithm. - - - - - Gets the error Dither that implements the Burks algorithm. - - - - - Gets the error Dither that implements the Floyd-Steinberg algorithm. - - - - - Gets the error Dither that implements the Jarvis-Judice-Ninke algorithm. - - - - - Gets the error Dither that implements the Sierra-2 algorithm. - - - - - Gets the error Dither that implements the Sierra-3 algorithm. - - - - - Gets the error Dither that implements the Sierra-Lite algorithm. - - - - - Gets the error Dither that implements the Stevenson-Arce algorithm. - - - - - Gets the error Dither that implements the Stucki algorithm. - - - - - Contains reusable static instances of known edge detection kernels. - - - - - Gets the Kayyali edge detector kernel. - - - - - Gets the Kirsch edge detector kernel. - - - - - Gets the Laplacian 3x3 edge detector kernel. - - - - - Gets the Laplacian 5x5 edge detector kernel. - - - - - Gets the Laplacian of Gaussian edge detector kernel. - - - - - Gets the Prewitt edge detector kernel. - - - - - Gets the Roberts-Cross edge detector kernel. - - - - - Gets the Robinson edge detector kernel. - - - - - Gets the Scharr edge detector kernel. - - - - - Gets the Sobel edge detector kernel. - - - - - A collection of known values for composing filters - - - - - Gets a filter recreating Achromatomaly (Color desensitivity) color blindness - - - - - Gets a filter recreating Achromatopsia (Monochrome) color blindness. - - - - - Gets a filter recreating Deuteranomaly (Green-Weak) color blindness. - - - - - Gets a filter recreating Deuteranopia (Green-Blind) color blindness. - - - - - Gets a filter recreating Protanomaly (Red-Weak) color blindness. - - - - - Gets a filter recreating Protanopia (Red-Blind) color blindness. - - - - - Gets a filter recreating Tritanomaly (Blue-Weak) color blindness. - - - - - Gets a filter recreating Tritanopia (Blue-Blind) color blindness. - - - - - Gets an approximated black and white filter - - - - - Gets a filter recreating an old Kodachrome camera effect. - - - - - Gets a filter recreating an old Lomograph camera effect. - - - - - Gets a filter recreating an old Polaroid camera effect. - - - - - Create a brightness filter matrix using the given amount. - - - A value of 0 will create an image that is completely black. A value of 1 leaves the input unchanged. - Other values are linear multipliers on the effect. Values of an amount over 1 are allowed, providing brighter results. - - The proportion of the conversion. Must be greater than or equal to 0. - The - - - - Create a contrast filter matrix using the given amount. - - - A value of 0 will create an image that is completely gray. A value of 1 leaves the input unchanged. - Other values are linear multipliers on the effect. Values of an amount over 1 are allowed, providing results with more contrast. - - The proportion of the conversion. Must be greater than or equal to 0. - The - - - - Create a grayscale filter matrix using the given amount using the formula as specified by ITU-R Recommendation BT.601. - - - The proportion of the conversion. Must be between 0 and 1. - The - - - - Create a grayscale filter matrix using the given amount using the formula as specified by ITU-R Recommendation BT.709. - - - The proportion of the conversion. Must be between 0 and 1. - The - - - - Create a hue filter matrix using the given angle in degrees. - - The angle of rotation in degrees. - The - - - - Create an invert filter matrix using the given amount. - - The proportion of the conversion. Must be between 0 and 1. - The - - - - Create an opacity filter matrix using the given amount. - - The proportion of the conversion. Must be between 0 and 1. - The - - - - Create a saturation filter matrix using the given amount. - - - A value of 0 is completely un-saturated. A value of 1 leaves the input unchanged. - Other values are linear multipliers on the effect. Values of amount over 1 are allowed, providing super-saturated results - - The proportion of the conversion. Must be greater than or equal to 0. - The - - - - Create a lightness filter matrix using the given amount. - - - A value of 0 will create an image that is completely black. A value of 1 leaves the input unchanged. - Other values are linear multipliers on the effect. Values of an amount over 1 are allowed, providing lighter results. - - The proportion of the conversion. Must be greater than or equal to 0. - The - - - - Create a sepia filter matrix using the given amount. - The formula used matches the svg specification. - - The proportion of the conversion. Must be between 0 and 1. - The - - - - Contains reusable static instances of known quantizing algorithms - - - - - Gets the adaptive Octree quantizer. Fast with good quality. - - - - - Gets the Xiaolin Wu's Color Quantizer which generates high quality output. - - - - - Gets the palette based quantizer consisting of web safe colors as defined in the CSS Color Module Level 4. - - - - - Gets the palette based quantizer consisting of colors as defined in the original second edition of Werner’s Nomenclature of Colours 1821. - The hex codes were collected and defined by Nicholas Rougeux - - - - - Contains reusable static instances of known resampling algorithms - - - - - Gets the Bicubic sampler that implements the bicubic kernel algorithm W(x) - - - - - Gets the Box sampler that implements the box algorithm. Similar to nearest neighbor when upscaling. - When downscaling the pixels will average, merging pixels together. - - - - - Gets the Catmull-Rom sampler, a well known standard Cubic Filter often used as a interpolation function - - - - - Gets the Hermite sampler. A type of smoothed triangular interpolation filter that rounds off strong edges while - preserving flat 'color levels' in the original image. - - - - - Gets the Lanczos kernel sampler that implements smooth interpolation with a radius of 2 pixels. - This algorithm provides sharpened results when compared to others when downsampling. - - - - - Gets the Lanczos kernel sampler that implements smooth interpolation with a radius of 3 pixels - This algorithm provides sharpened results when compared to others when downsampling. - - - - - Gets the Lanczos kernel sampler that implements smooth interpolation with a radius of 5 pixels - This algorithm provides sharpened results when compared to others when downsampling. - - - - - Gets the Lanczos kernel sampler that implements smooth interpolation with a radius of 8 pixels - This algorithm provides sharpened results when compared to others when downsampling. - - - - - Gets the Mitchell-Netravali sampler. This seperable cubic algorithm yields a very good equilibrium between - detail preservation (sharpness) and smoothness. - - - - - Gets the Nearest-Neighbour sampler that implements the nearest neighbor algorithm. This uses a very fast, unscaled filter - which will select the closest pixel to the new pixels position. - - - - - Gets the Robidoux sampler. This algorithm developed by Nicolas Robidoux providing a very good equilibrium between - detail preservation (sharpness) and smoothness comparable to . - - - - - Gets the Robidoux Sharp sampler. A sharpened form of the sampler - - - - - Gets the Spline sampler. A separable cubic algorithm similar to but yielding smoother results. - - - - - Gets the Triangle sampler, otherwise known as Bilinear. This interpolation algorithm can be used where perfect image transformation - with pixel matching is impossible, so that one can calculate and assign appropriate intensity values to pixels - - - - - Gets the Welch sampler. A high speed algorithm that delivers very sharpened results. - - - - - Enumerates the available orientation values supplied by EXIF metadata. - - - - - Unknown rotation. - - - - - The 0th row at the top, the 0th column on the left. - - - - - The 0th row at the top, the 0th column on the right. - - - - - The 0th row at the bottom, the 0th column on the right. - - - - - The 0th row at the bottom, the 0th column on the left. - - - - - The 0th row on the left, the 0th column at the top. - - - - - The 0th row at the right, the 0th column at the top. - - - - - The 0th row on the right, the 0th column at the bottom. - - - - - The 0th row on the left, the 0th column at the bottom. - - - - - A representing a user defined processing delegate to use to modify image rows. - - The target row of pixels to process. - The , , , and fields map the RGBA channels respectively. - - - - A representing a user defined processing delegate to use to modify image rows. - - - The type of the parameter of the method that this delegate encapsulates. - This type parameter is contravariant.That is, you can use either the type you specified or any type that is less derived. - - The target row of pixels to process. - The parameter of the method that this delegate encapsulates. - The , , , and fields map the RGBA channels respectively. - - - - Performs Bradley Adaptive Threshold filter against an image. - - - Implements "Adaptive Thresholding Using the Integral Image", - see paper: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.420.7883&rep=rep1&type=pdf - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - Threshold limit. - - - - Initializes a new instance of the class. - - Color for upper threshold. - Color for lower threshold. - - - - Initializes a new instance of the class. - - Color for upper threshold. - Color for lower threshold. - Threshold limit. - - - - Gets or sets upper color limit for thresholding. - - - - - Gets or sets lower color limit for threshold. - - - - - Gets or sets the value for threshold limit. - - - - - - - - Performs Bradley Adaptive Threshold filter against an image. - - - - - Initializes a new instance of the class. - - The configuration which allows altering default behaviour or extending the library. - The defining the processor parameters. - The source for the current processor instance. - The source area to process for the current processor instance. - - - - - - - - - - Performs simple binary threshold filtering against an image. - - - - - Initializes a new instance of the class. - - The threshold to split the image. Must be between 0 and 1. - The color component to be compared to threshold. - - - - Initializes a new instance of the class with - Luminance as color component to be compared to threshold. - - The threshold to split the image. Must be between 0 and 1. - - - - Initializes a new instance of the class. - - The threshold to split the image. Must be between 0 and 1. - The color to use for pixels that are above the threshold. - The color to use for pixels that are below the threshold. - The color component to be compared to threshold. - - - - Initializes a new instance of the class with - Luminance as color component to be compared to threshold. - - The threshold to split the image. Must be between 0 and 1. - The color to use for pixels that are above the threshold. - The color to use for pixels that are below the threshold. - - - - Gets the threshold value. - - - - - Gets the color to use for pixels that are above the threshold. - - - - - Gets the color to use for pixels that fall below the threshold. - - - - - Gets the defining the value to be compared to threshold. - - - - - - - - Performs simple binary threshold filtering against an image. - - The pixel format. - - - - Initializes a new instance of the class. - - The configuration which allows altering default behaviour or extending the library. - The defining the processor parameters. - The source for the current processor instance. - The source area to process for the current processor instance. - - - - - - - A implementing the clone logic for . - - - - - - - - The base class for all cloning image processors. - - - - - - - - - - - The base class for all pixel specific cloning image processors. - Allows the application of processing algorithms to the image. - The image is cloned before operating upon and the buffers swapped upon completion. - - The pixel format. - - - - Initializes a new instance of the class. - - The configuration which allows altering default behaviour or extending the library. - The source for the current processor instance. - The source area to process for the current processor instance. - - - - Gets The source for the current processor instance. - - - - - Gets The source area to process for the current processor instance. - - - - - Gets the instance to use when performing operations. - - - - - - - - - - - - - - Gets the size of the destination image. - - The . - - - - This method is called before the process is applied to prepare the processor. - - The cloned/destination image. Cannot be null. - - - - This method is called before the process is applied to prepare the processor. - - The source image. Cannot be null. - The cloned/destination image. Cannot be null. - - - - Applies the process to the specified portion of the specified at the specified location - and with the specified size. - - The source image. Cannot be null. - The cloned/destination image. Cannot be null. - - - - This method is called after the process is applied to prepare the processor. - - The source image. Cannot be null. - The cloned/destination image. Cannot be null. - - - - This method is called after the process is applied to prepare the processor. - - The cloned/destination image. Cannot be null. - - - - Disposes the object and frees resources for the Garbage Collector. - - Whether to dispose managed and unmanaged objects. - - - - Applies bokeh blur processing to the image. - - - - - The default radius used by the parameterless constructor. - - - - - The default component count used by the parameterless constructor. - - - - - The default gamma used by the parameterless constructor. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - - The 'radius' value representing the size of the area to sample. - - - The number of components to use to approximate the original 2D bokeh blur convolution kernel. - - - The gamma highlight factor to use to further process the image. - - - - - Gets the radius. - - - - - Gets the number of components. - - - - - Gets the gamma highlight factor to use when applying the effect. - - - - - - - - A implementing the horizontal convolution logic for . - - - This type is located in the non-generic class and not in , where - it is actually used, because it does not use any generic parameters internally. Defining in a non-generic class means that there will only - ever be a single instantiation of this type for the JIT/AOT compilers to process, instead of having duplicate versions for each pixel type. - - - - - - - - Applies bokeh blur processing to the image. - - The pixel format. - This processor is based on the code from Mike Pound, see
github.com/mikepound/convolve. - - - - The gamma highlight factor to use when applying the effect - - - - - The size of each complex convolution kernel. - - - - - The kernel parameters to use for the current instance (a: X, b: Y, A: Z, B: W) - - - - - The kernel components for the current instance - - - - - Initializes a new instance of the class. - - The configuration which allows altering default behaviour or extending the library. - The defining the processor parameters. - The source for the current processor instance. - The source area to process for the current processor instance. - - - - Gets the complex kernels to use to apply the blur for the current instance - - - - - Gets the kernel parameters used to compute the pixel values from each complex pixel - - - - - - - - Computes and aggregates the convolution for each complex kernel component in the processor. - - The source image. Cannot be null. - The structure that specifies the portion of the image object to draw. - The configuration. - The buffer with the raw pixel data to use to aggregate the results of each convolution. - - - - A implementing the vertical convolution logic for . - - - - - - - - A implementing the gamma exposure logic for . - - - - - - - - A implementing the 3F gamma exposure logic for . - - - - - - - - A implementing the inverse gamma exposure logic for . - - - - - - - - A implementing the inverse 3F gamma exposure logic for . - - - - - - - - Defines a box blur processor of a given radius. - - - - - The default radius used by the parameterless constructor. - - - - - Initializes a new instance of the class. - - - The 'radius' value representing the size of the area to sample. - - - - - Initializes a new instance of the class. - - - - - Gets the Radius. - - - - - - - - Applies box blur processing to the image. - - The pixel format. - - - - Initializes a new instance of the class. - - The configuration which allows altering default behaviour or extending the library. - The defining the processor parameters. - The source for the current processor instance. - The source area to process for the current processor instance. - - - - Gets the 1D convolution kernel. - - - - - - - - Create a 1 dimensional Box kernel. - - The maximum size of the kernel in either direction. - The . - - - - Defines a processor that uses two one-dimensional matrices to perform convolution against an image. - - The pixel format. - - - - Initializes a new instance of the class. - - The configuration which allows altering default behaviour or extending the library. - The horizontal gradient operator. - The vertical gradient operator. - Whether the convolution filter is applied to alpha as well as the color channels. - The source for the current processor instance. - The source area to process for the current processor instance. - - - - Gets the horizontal convolution kernel. - - - - - Gets the vertical convolution kernel. - - - - - Gets a value indicating whether the convolution filter is applied to alpha as well as the color channels. - - - - - - - - A implementing the logic for 2D convolution. - - - - - - - - A stack only struct used for reducing reference indirection during 2D convolution operations. - - - - - Defines a processor that uses two one-dimensional matrices to perform two-pass convolution against an image. - - The pixel format. - - - - Initializes a new instance of the class. - - The configuration which allows altering default behaviour or extending the library. - The 1D convolution kernel. - Whether the convolution filter is applied to alpha as well as the color channels. - The source for the current processor instance. - The source area to process for the current processor instance. - - - - Gets the convolution kernel. - - - - - Gets a value indicating whether the convolution filter is applied to alpha as well as the color channels. - - - - - - - - A implementing the logic for the horizontal 1D convolution. - - - - - - - - A implementing the logic for the vertical 1D convolution. - - - - - - - - Kernel radius is calculated using the minimum viable value. - See . - - - - - Create a 1 dimensional Gaussian kernel using the Gaussian G(x) function. - - The convolution kernel. - - - - Create a 1 dimensional Gaussian kernel using the Gaussian G(x) function - - The convolution kernel. - - - - Defines a processor that uses a 2 dimensional matrix to perform convolution against an image. - - The pixel format. - - - - Initializes a new instance of the class. - - The configuration which allows altering default behaviour or extending the library. - The 2d gradient operator. - Whether the convolution filter is applied to alpha as well as the color channels. - The source for the current processor instance. - The source area to process for the current processor instance. - - - - Gets the 2d convolution kernel. - - - - - Gets a value indicating whether the convolution filter is applied to alpha as well as the color channels. - - - - - - - - A implementing the convolution logic for . - - - - - - - - A stack only struct used for reducing reference indirection during convolution operations. - - - - - Defines edge detection using the two 1D gradient operators. - - - - - Initializes a new instance of the class. - - The 2D edge detector kernel. - - Whether to convert the image to grayscale before performing edge detection. - - - - - Gets the 2D edge detector kernel. - - - - - Gets a value indicating whether to convert the image to grayscale before performing - edge detection. - - - - - - - - Defines a processor that detects edges within an image using two one-dimensional matrices. - - The pixel format. - - - - Initializes a new instance of the class. - - The configuration which allows altering default behaviour or extending the library. - The defining the processor parameters. - The source for the current processor instance. - The source area to process for the current processor instance. - - - - - - - - - - Defines edge detection using eight gradient operators. - - - - - Initializes a new instance of the class. - - The edge detector kernel. - - Whether to convert the image to grayscale before performing edge detection. - - - - - Gets the edge detector kernel. - - - - - Gets a value indicating whether to convert the image to grayscale before performing - edge detection. - - - - - - - - Defines a processor that detects edges within an image using a eight two dimensional matrices. - - The pixel format. - - - - Initializes a new instance of the class. - - The configuration which allows altering default behaviour or extending the library. - The defining the processor parameters. - The source for the current processor instance. - The source area to process for the current processor instance. - - - - - - - - - - A implementing the convolution logic for . - - - - - - - - Defines edge detection using a single 2D gradient operator. - - - - - Initializes a new instance of the class. - - The edge detector kernel. - - Whether to convert the image to grayscale before performing edge detection. - - - - - Gets the edge detector kernel. - - - - - Gets a value indicating whether to convert the image to grayscale before performing - edge detection. - - - - - - - - Defines a processor that detects edges within an image using a single two dimensional matrix. - - The pixel format. - - - - Initializes a new instance of the class. - - The configuration which allows altering default behaviour or extending the library. - The defining the processor parameters. - The source for the current processor instance. - The target area to process for the current processor instance. - - - - - - - - - - Defines Gaussian blur by a (Sigma, Radius) pair. - - - - - The default value for . - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The 'sigma' value representing the weight of the blur. - - - - Initializes a new instance of the class. - - - The 'radius' value representing the size of the area to sample. - - - - - Initializes a new instance of the class. - - - The 'sigma' value representing the weight of the blur. - - - The 'radius' value representing the size of the area to sample. - This should be at least twice the sigma value. - - - - - Gets the sigma value representing the weight of the blur - - - - - Gets the radius defining the size of the area to sample. - - - - - - - - Applies Gaussian blur processing to an image. - - The pixel format. - - - - Initializes a new instance of the class. - - The configuration which allows altering default behaviour or extending the library. - The defining the processor parameters. - The source for the current processor instance. - The source area to process for the current processor instance. - - - - Gets the 1D convolution kernel. - - - - - - - - Defines Gaussian sharpening by a (Sigma, Radius) pair. - - - - - The default value for . - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The 'sigma' value representing the weight of the blur. - - - - Initializes a new instance of the class. - - - The 'radius' value representing the size of the area to sample. - - - - - Initializes a new instance of the class. - - - The 'sigma' value representing the weight of the blur. - - - The 'radius' value representing the size of the area to sample. - This should be at least twice the sigma value. - - - - - Gets the sigma value representing the weight of the blur - - - - - Gets the radius defining the size of the area to sample. - - - - - - - - Applies Gaussian sharpening processing to the image. - - The pixel format. - - - - Initializes a new instance of the class. - - The configuration which allows altering default behaviour or extending the library. - The defining the processor parameters. - The source for the current processor instance. - The source area to process for the current processor instance. - - - - Gets the 1D convolution kernel. - - - - - - - - Provides a map of the convolution kernel sampling offsets. - - - - - Initializes a new instance of the class. - - The memory allocator. - - - - Builds a map of the sampling offsets for the kernel clamped by the given bounds. - - The convolution kernel. - The source bounds. - - - - Builds a map of the sampling offsets for the kernel clamped by the given bounds. - - The height (number of rows) of the convolution kernel to use. - The width (number of columns) of the convolution kernel to use. - The source bounds. - - - - - - - Represents an edge detection convolution kernel consisting of two 1D gradient operators. - - - - - An edge detection kernel containing two Kayyali operators. - - - - - An edge detection kernel containing two Prewitt operators. - . - - - - - An edge detection kernel containing two Roberts-Cross operators. - . - - - - - An edge detection kernel containing two Scharr operators. - - - - - An edge detection kernel containing two Sobel operators. - . - - - - - Initializes a new instance of the struct. - - The horizontal gradient operator. - The vertical gradient operator. - - - - Gets the horizontal gradient operator. - - - - - Gets the vertical gradient operator. - - - - - Checks whether two structures are equal. - - The left hand operand. - The right hand operand. - - True if the parameter is equal to the parameter; - otherwise, false. - - - - - Checks whether two structures are equal. - - The left hand operand. - The right hand operand. - - True if the parameter is not equal to the parameter; - otherwise, false. - - - - - - - - - - - - - - Represents an edge detection convolution kernel consisting of eight gradient operators. - - - - - An edge detection kenel comprised of Kirsch gradient operators. - . - - - - - An edge detection kenel comprised of Robinson gradient operators. - - - - - - Initializes a new instance of the struct. - - The north gradient operator. - The north-west gradient operator. - The west gradient operator. - The south-west gradient operator. - The south gradient operator. - The south-east gradient operator. - The east gradient operator. - The north-east gradient operator. - - - - Gets the North gradient operator. - - - - - Gets the NorthWest gradient operator. - - - - - Gets the West gradient operator. - - - - - Gets the SouthWest gradient operator. - - - - - Gets the South gradient operator. - - - - - Gets the SouthEast gradient operator. - - - - - Gets the East gradient operator. - - - - - Gets the NorthEast gradient operator. - - - - - Checks whether two structures are equal. - - The left hand operand. - The right hand operand. - - True if the parameter is equal to the parameter; - otherwise, false. - - - - - Checks whether two structures are equal. - - The left hand operand. - The right hand operand. - - True if the parameter is not equal to the parameter; - otherwise, false. - - - - - - - - - - - - - - Represents an edge detection convolution kernel consisting of a single 2D gradient operator. - - - - - An edge detection kernel containing a 3x3 Laplacian operator. - - - - - - An edge detection kernel containing a 5x5 Laplacian operator. - - - - - - An edge detection kernel containing a Laplacian of Gaussian operator. - . - - - - - Initializes a new instance of the struct. - - The 2D gradient operator. - - - - Gets the 2D gradient operator. - - - - - Checks whether two structures are equal. - - The left hand operand. - The right hand operand. - - True if the parameter is equal to the parameter; - otherwise, false. - - - - - Checks whether two structures are equal. - - The left hand operand. - The right hand operand. - - True if the parameter is not equal to the parameter; - otherwise, false. - - - - - - - - - - - - - - Contains the kernels used for Kayyali edge detection - - - - - Gets the horizontal gradient operator. - - - - - Gets the vertical gradient operator. - - - - - Contains the eight matrices used for Kirsch edge detection. - . - - - - - Gets the North gradient operator - - - - - Gets the NorthWest gradient operator - - - - - Gets the West gradient operator - - - - - Gets the SouthWest gradient operator - - - - - Gets the South gradient operator - - - - - Gets the SouthEast gradient operator - - - - - Gets the East gradient operator - - - - - Gets the NorthEast gradient operator - - - - - A factory for creating Laplacian kernel matrices. - - - - - Creates a Laplacian matrix, 2nd derivative, of an arbitrary length. - - - The length of the matrix sides - The - - - - Contains Laplacian kernels of different sizes. - - . - - - - - Gets the 3x3 Laplacian kernel - - - - - Gets the 5x5 Laplacian kernel - - - - - Gets the Laplacian of Gaussian kernel. - - - - - Contains the kernels used for Prewitt edge detection - - - - - Gets the horizontal gradient operator. - - - - - Gets the vertical gradient operator. - - - - - Contains the kernels used for RobertsCross edge detection - - - - - Gets the horizontal gradient operator. - - - - - Gets the vertical gradient operator. - - - - - Contains the kernels used for Robinson edge detection. - - - - - - Gets the North gradient operator - - - - - Gets the NorthWest gradient operator - - - - - Gets the West gradient operator - - - - - Gets the SouthWest gradient operator - - - - - Gets the South gradient operator - - - - - Gets the SouthEast gradient operator - - - - - Gets the East gradient operator - - - - - Gets the NorthEast gradient operator - - - - - Contains the kernels used for Scharr edge detection - - - - - Gets the horizontal gradient operator. - - - - - Gets the vertical gradient operator. - - - - - Contains the kernels used for Sobel edge detection - - - - - Gets the horizontal gradient operator. - - - - - Gets the vertical gradient operator. - - - - - A that contains data about a set of bokeh blur kernels - - - - - The kernel parameters to use for the current set of complex kernels - - - - - The kernel components to apply the bokeh blur effect - - - - - Initializes a new instance of the struct. - - The kernel parameters - The complex kernel components - - - - Provides parameters to be used in the . - - - - - The mapping of initialized complex kernels and parameters, to speed up the initialization of new instances - - - - - Gets the kernel scales to adjust the component values in each kernel - - - - - Gets the available bokeh blur kernel parameters - - - - - Gets the bokeh blur kernel data for the specified parameters. - - The value representing the size of the area to sample. - The size of each kernel to compute. - The number of components to use to approximate the original 2D bokeh blur convolution kernel. - A instance with the kernel data for the current parameters. - - - - Gets the kernel parameters and scaling factor for the current count value in the current instance - - - - - Creates the collection of complex 1D kernels with the specified parameters - - The parameters to use to normalize the kernels - The value representing the size of the area to sample. - The size of each kernel to compute. - The scale factor for each kernel. - - - - Creates a complex 1D kernel with the specified parameters - - The value representing the size of the area to sample. - The size of each kernel to compute. - The scale factor for each kernel. - The exponential parameter for each complex component - The angle component for each complex component - - - - Normalizes the kernels with respect to A * real + B * imaginary - - The current convolution kernels to normalize - The parameters to use to normalize the kernels - - - - A that contains parameters to apply a bokeh blur filter - - - - - The size of the convolution kernel to use when applying the bokeh blur - - - - - The number of complex components to use to approximate the bokeh kernel - - - - - Initializes a new instance of the struct. - - The size of the kernel - The number of kernel components - - - - - - - - - - - - - A stack only, readonly, kernel matrix that can be indexed without - bounds checks when compiled in release mode. - - - - - An error diffusion dithering implementation. - - - An error diffusion dithering implementation. - - - - - - Applies error diffusion based dithering using the Atkinson image dithering algorithm. - - - - - Applies error diffusion based dithering using the Burks image dithering algorithm. - - - - - Applies error diffusion based dithering using the Floyd–Steinberg image dithering algorithm. - - - - - Applies error diffusion based dithering using the Jarvis, Judice, Ninke image dithering algorithm. - - - - - Applies error diffusion based dithering using the Sierra2 image dithering algorithm. - - - - - Applies error diffusion based dithering using the Sierra3 image dithering algorithm. - - - - - Applies error diffusion based dithering using the Sierra Lite image dithering algorithm. - - - - - Applies error diffusion based dithering using the Stevenson-Arce image dithering algorithm. - - - - - Applies error diffusion based dithering using the Stucki image dithering algorithm. - - - - - Initializes a new instance of the struct. - - The diffusion matrix. - The starting offset within the matrix. - - - - Compares the two instances to determine whether they are equal. - - The first source instance. - The second source instance. - The . - - - - Compares the two instances to determine whether they are unequal. - - The first source instance. - The second source instance. - The . - - - - Compares the two instances to determine whether they are equal. - - The first source instance. - The second source instance. - The . - - - - Compares the two instances to determine whether they are unequal. - - The first source instance. - The second source instance. - The . - - - - Compares the two instances to determine whether they are equal. - - The first source instance. - The second source instance. - The . - - - - Compares the two instances to determine whether they are unequal. - - The first source instance. - The second source instance. - The . - - - - - - - - - - - - - - - - - - - - - - Defines the contract for types that apply dithering to images. - - - - - Transforms the quantized image frame applying a dither matrix. - This method should be treated as destructive, altering the input pixels. - - The type of frame quantizer. - The pixel format. - The frame quantizer. - The source image. - The destination quantized frame. - The region of interest bounds. - - - - Transforms the image frame applying a dither matrix. - This method should be treated as destructive, altering the input pixels. - - The type of palette dithering processor. - The pixel format. - The palette dithering processor. - The source image. - The region of interest bounds. - - - - Implements an algorithm to alter the pixels of an image via palette dithering. - - The pixel format. - - - - Gets the configuration instance to use when performing operations. - - - - - Gets the dithering palette. - - - - - Gets the dithering scale used to adjust the amount of dither. Range 0..1. - - - - - Returns the color from the dithering palette corresponding to the given color. - - The color to match. - The match. - - - - An ordered dithering matrix with equal sides of arbitrary length - - - An ordered dithering matrix with equal sides of arbitrary length - - - - - Initializes a new instance of the struct. - - The length of the matrix sides - - - - Compares the two instances to determine whether they are equal. - - The first source instance. - The second source instance. - The . - - - - Compares the two instances to determine whether they are unequal. - - The first source instance. - The second source instance. - The . - - - - Compares the two instances to determine whether they are equal. - - The first source instance. - The second source instance. - The . - - - - Compares the two instances to determine whether they are unequal. - - The first source instance. - The second source instance. - The . - - - - Compares the two instances to determine whether they are equal. - - The first source instance. - The second source instance. - The . - - - - Compares the two instances to determine whether they are unequal. - - The first source instance. - The second source instance. - The . - - - - - - - - - - - - - - - - - - - - - - Applies order dithering using the 2x2 Bayer dithering matrix. - - - - - Applies order dithering using the 4x4 Bayer dithering matrix. - - - - - Applies order dithering using the 8x8 Bayer dithering matrix. - - - - - Applies order dithering using the 3x3 ordered dithering matrix. - - - - - A factory for creating ordered dither matrices. - - - - - Creates an ordered dithering matrix with equal sides of arbitrary length. - - - The length of the matrix sides - The - - - - Allows the consumption a palette to dither an image. - - - - - Initializes a new instance of the class. - - The ordered ditherer. - - - - Initializes a new instance of the class. - - The ordered ditherer. - The dithering scale used to adjust the amount of dither. - - - - Initializes a new instance of the class. - - The dithering algorithm. - The palette to select substitute colors from. - - - - Initializes a new instance of the class. - - The dithering algorithm. - The dithering scale used to adjust the amount of dither. - The palette to select substitute colors from. - - - - Gets the dithering algorithm to apply to the output image. - - - - - Gets the dithering scale used to adjust the amount of dither. Range 0..1. - - - - - Gets the palette to select substitute colors from. - - - - - - - - Allows the consumption a palette to dither an image. - - The pixel format. - - - - Initializes a new instance of the class. - - The configuration which allows altering default behaviour or extending the library. - The defining the processor parameters. - The source for the current processor instance. - The source area to process for the current processor instance. - - - - - - - - - - Used to allow inlining of calls to - . - - - - - Combines two images together by blending the pixels. - - - - - Initializes a new instance of the class. - - The image to blend. - The location to draw the blended image. - The blending mode to use when drawing the image. - The Alpha blending mode to use when drawing the image. - The opacity of the image to blend. - - - - Gets the image to blend. - - - - - Gets the location to draw the blended image. - - - - - Gets the blending mode to use when drawing the image. - - - - - Gets the Alpha blending mode to use when drawing the image. - - - - - Gets the opacity of the image to blend. - - - - - - - - Combines two images together by blending the pixels. - - The pixel format of destination image. - The pixel format of source image. - - - - Initializes a new instance of the class. - - The configuration which allows altering default behaviour or extending the library. - The foreground to blend with the currently processing image. - The source for the current processor instance. - The source area to process for the current processor instance. - The location to draw the blended image. - The blending mode to use when drawing the image. - The Alpha blending mode to use when drawing the image. - The opacity of the image to blend. Must be between 0 and 1. - - - - Gets the image to blend - - - - - Gets the opacity of the image to blend - - - - - Gets the pixel blender - - - - - Gets the location to draw the blended image - - - - - - - - A implementing the draw logic for . - - - - - - - - An used by the row delegates for a given instance - - - - - Applies the current pixel row delegate to a target row of preprocessed pixels. - - The target row of pixels to process. - The initial horizontal and vertical offset for the input pixels to process. - - - - Defines an oil painting effect. - - - - - Initializes a new instance of the class. - - - The number of intensity levels. Higher values result in a broader range of color intensities forming part of the result image. - - - The number of neighboring pixels used in calculating each individual pixel value. - - - - - Gets the number of intensity levels. - - - - - Gets the brush size. - - - - - - - - Applies oil painting effect processing to the image. - - Adapted from by Dewald Esterhuizen. - The pixel format. - - - - Initializes a new instance of the class. - - The configuration which allows altering default behaviour or extending the library. - The defining the processor parameters. - The source for the current processor instance. - The source area to process for the current processor instance. - - - - - - - A implementing the convolution logic for . - - - - - - - - Defines a pixelation effect of a given size. - - - - - Initializes a new instance of the class. - - The size of the pixels. Must be greater than 0. - - is less than 0 or equal to 0. - - - - - Gets or the pixel size. - - - - - - - - Applies a pixelation effect processing to the image. - - The pixel format. - - - - Initializes a new instance of the class. - - The configuration which allows altering default behaviour or extending the library. - The . - The source for the current processor instance. - The source area to process for the current processor instance. - - - - - - - Applies a user defined row processing delegate to the image. - - - - - Initializes a new instance of the class. - - The user defined, row processing delegate. - The to apply during the pixel conversions. - - - - Gets the user defined row processing delegate to the image. - - - - - Gets the to apply during the pixel conversions. - - - - - - - - A implementing the row processing logic for . - - - - - - - - The base class for all processors that accept a user defined row processing delegate. - - The pixel format. - The row processor type. - - - - The to apply during the pixel conversions. - - - - - Initializes a new instance of the class. - - The row processor to use to process each pixel row - The configuration which allows altering default behaviour or extending the library. - The to apply during the pixel conversions. - The source for the current processor instance. - The source area to process for the current processor instance. - - - - - - - A implementing the convolution logic for . - - - - - - - - Applies a user defined, position aware, row processing delegate to the image. - - - - - Initializes a new instance of the class. - - The user defined, position aware, row processing delegate. - The to apply during the pixel conversions. - - - - Gets the user defined, position aware, row processing delegate. - - - - - Gets the to apply during the pixel conversions. - - - - - - - - A implementing the row processing logic for . - - - - - - - - Converts the colors of the image recreating Achromatomaly (Color desensitivity) color blindness. - - - - - Initializes a new instance of the class. - - - - - Converts the colors of the image recreating Achromatopsia (Monochrome) color blindness. - - - - - Initializes a new instance of the class. - - - - - Applies a black and white filter matrix to the image. - - - - - Initializes a new instance of the class. - - - - - Applies a brightness filter matrix using the given amount. - - - - - Initializes a new instance of the class. - - - A value of 0 will create an image that is completely black. A value of 1 leaves the input unchanged. - Other values are linear multipliers on the effect. Values of an amount over 1 are allowed, providing brighter results. - - The proportion of the conversion. Must be greater than or equal to 0. - - - - Gets the proportion of the conversion - - - - - Applies a contrast filter matrix using the given amount. - - - - - Initializes a new instance of the class. - - - A value of 0 will create an image that is completely gray. A value of 1 leaves the input unchanged. - Other values are linear multipliers on the effect. Values of an amount over 1 are allowed, providing results with more contrast. - - The proportion of the conversion. Must be greater than or equal to 0. - - - - Gets the proportion of the conversion. - - - - - Converts the colors of the image recreating Deuteranomaly (Green-Weak) color blindness. - - - - - Initializes a new instance of the class. - - - - - Converts the colors of the image recreating Deuteranopia (Green-Blind) color blindness. - - - - - Initializes a new instance of the class. - - - - - Defines a free-form color filter by a . - - - - - Initializes a new instance of the class. - - The matrix used to apply the image filter - - - - Gets the used to apply the image filter. - - - - - - - - Provides methods that accept a matrix to apply free-form filters to images. - - The pixel format. - - - - Initializes a new instance of the class. - - The configuration which allows altering default behaviour or extending the library. - The . - The source for the current processor instance. - The source area to process for the current processor instance. - - - - - - - A implementing the convolution logic for . - - - - - - - - Applies a grayscale filter matrix using the given amount and the formula as specified by ITU-R Recommendation BT.601 - - - - - Initializes a new instance of the class. - - The proportion of the conversion. Must be between 0 and 1. - - - - Gets the proportion of the conversion - - - - - Applies a grayscale filter matrix using the given amount and the formula as specified by ITU-R Recommendation BT.709 - - - - - Initializes a new instance of the class. - - The proportion of the conversion. Must be between 0 and 1. - - - - Gets the proportion of the conversion. - - - - - Applies a hue filter matrix using the given angle of rotation in degrees - - - - - Initializes a new instance of the class. - - The angle of rotation in degrees - - - - Gets the angle of rotation in degrees - - - - - Applies a filter matrix that inverts the colors of an image - - - - - Initializes a new instance of the class. - - The proportion of the conversion. Must be between 0 and 1. - - - - Gets the proportion of the conversion - - - - - Applies a filter matrix recreating an old Kodachrome camera effect matrix to the image - - - - - Initializes a new instance of the class. - - - - - Applies a lightness filter matrix using the given amount. - - - - - Initializes a new instance of the class. - - - A value of 0 will create an image that is completely black. A value of 1 leaves the input unchanged. - Other values are linear multipliers on the effect. Values of an amount over 1 are allowed, providing lighter results. - - The proportion of the conversion. Must be greater than or equal to 0. - - - - Gets the proportion of the conversion - - - - - Converts the colors of the image recreating an old Lomograph effect. - - - - - Initializes a new instance of the class. - - Graphics options to use within the processor. - - - - Gets the options effecting blending and composition - - - - - - - - Converts the colors of the image recreating an old Lomograph effect. - - - - - Initializes a new instance of the class. - - The configuration which allows altering default behaviour or extending the library. - The defining the parameters. - The source for the current processor instance. - The source area to process for the current processor instance. - - - - - - - Applies an opacity filter matrix using the given amount. - - - - - Initializes a new instance of the class. - - The proportion of the conversion. Must be between 0 and 1. - - - - Gets the proportion of the conversion. - - - - - - - - Converts the colors of the image recreating an old Polaroid effect. - - - - - Initializes a new instance of the class. - - Graphics options to use within the processor. - - - - Gets the options effecting blending and composition - - - - - - - - Converts the colors of the image recreating an old Polaroid effect. - - - - - Initializes a new instance of the class. - - The configuration which allows altering default behaviour or extending the library. - The defining the parameters. - The source for the current processor instance. - The source area to process for the current processor instance. - - - - - - - Converts the colors of the image recreating Protanomaly (Red-Weak) color blindness. - - - - - Initializes a new instance of the class. - - - - - Converts the colors of the image recreating Protanopia (Red-Blind) color blindness. - - - - - Initializes a new instance of the class. - - - - - Applies a saturation filter matrix using the given amount. - - - - - Initializes a new instance of the class. - - - A value of 0 is completely un-saturated. A value of 1 leaves the input unchanged. - Other values are linear multipliers on the effect. Values of amount over 1 are allowed, providing super-saturated results - - The proportion of the conversion. Must be greater than or equal to 0. - - - - Gets the proportion of the conversion - - - - - Applies a sepia filter matrix using the given amount. - - - - - Initializes a new instance of the class. - - The proportion of the conversion. Must be between 0 and 1. - - - - Gets the proportion of the conversion - - - - - Converts the colors of the image recreating Tritanomaly (Blue-Weak) color blindness. - - - - - Initializes a new instance of the class. - - - - - Converts the colors of the image recreating Tritanopia (Blue-Blind) color blindness. - - - - - Initializes a new instance of the class. - - - - - Defines an algorithm to alter the pixels of a cloned image. - - - - - Creates a pixel specific that is capable of executing - the processing algorithm on an . - - The pixel type. - The configuration which allows altering default behaviour or extending the library. - The source image. Cannot be null. - - The structure that specifies the portion of the image object to draw. - - The - - - - Implements an algorithm to alter the pixels of a cloned image. - - The pixel format. - - - - Clones the specified and executes the process against the clone. - - The . - - - - Defines an algorithm to alter the pixels of an image. - Non-generic implementations are responsible for: - 1. Encapsulating the parameters of the algorithm. - 2. Creating the generic instance to execute the algorithm. - - - - - Creates a pixel specific that is capable of executing - the processing algorithm on an . - - The pixel type. - The configuration which allows altering default behaviour or extending the library. - The source image. Cannot be null. - - The structure that specifies the portion of the image object to draw. - - The - - - - Implements an algorithm to alter the pixels of an image. - - The pixel format. - - - - Executes the process against the specified . - - - - - Executes the processor against the given source image and rectangle bounds. - - The processor. - The configuration which allows altering default behaviour or extending the library. - The source image. - The source bounds. - - - - The base class for all pixel specific image processors. - Allows the application of processing algorithms to the image. - - The pixel format. - - - - Initializes a new instance of the class. - - The configuration which allows altering default behaviour or extending the library. - The source for the current processor instance. - The source area to process for the current processor instance. - - - - Gets The source for the current processor instance. - - - - - Gets The source area to process for the current processor instance. - - - - - Gets the instance to use when performing operations. - - - - - - - - Applies the processor to a single image frame. - - the source image. - - - - - - - This method is called before the process is applied to prepare the processor. - - - - - This method is called before the process is applied to prepare the processor. - - The source image. Cannot be null. - - - - Applies the process to the specified portion of the specified at the specified location - and with the specified size. - - The source image. Cannot be null. - - - - This method is called after the process is applied to prepare the processor. - - The source image. Cannot be null. - - - - This method is called after the process is applied to prepare the processor. - - - - - Disposes the object and frees resources for the Garbage Collector. - - Whether to dispose managed and unmanaged objects. - - - - Applies an adaptive histogram equalization to the image. The image is split up in tiles. For each tile a cumulative distribution function (cdf) is calculated. - To calculate the final equalized pixel value, the cdf value of four adjacent tiles will be interpolated. - - - - - Initializes a new instance of the class. - - The number of different luminance levels. Typical values are 256 for 8-bit grayscale images - or 65536 for 16-bit grayscale images. - Indicating whether to clip the histogram bins at a specific value. - The histogram clip limit. Histogram bins which exceed this limit, will be capped at this value. - The number of tiles the image is split into (horizontal and vertically). Minimum value is 2. Maximum value is 100. - - - - Gets the number of tiles the image is split into (horizontal and vertically) for the adaptive histogram equalization. - - - - - - - - Applies an adaptive histogram equalization to the image. The image is split up in tiles. For each tile a cumulative distribution function (cdf) is calculated. - To calculate the final equalized pixel value, the cdf value of four adjacent tiles will be interpolated. - - The pixel format. - - - - Initializes a new instance of the class. - - The configuration which allows altering default behaviour or extending the library. - The number of different luminance levels. Typical values are 256 for 8-bit grayscale images - or 65536 for 16-bit grayscale images. - Indicating whether to clip the histogram bins at a specific value. - The histogram clip limit. Histogram bins which exceed this limit, will be capped at this value. - The number of tiles the image is split into (horizontal and vertically). Minimum value is 2. Maximum value is 100. - The source for the current processor instance. - The source area to process for the current processor instance. - - - - Gets the number of tiles the image is split into (horizontal and vertically) for the adaptive histogram equalization. - - - - - - - - Processes the part of a corner tile which was previously left out. It consists of 1 / 4 of a tile and does not need interpolation. - - The source image. - The lookup table to remap the grey values. - The x-position in the CDF lookup map. - The y-position in the CDF lookup map. - X start position. - X end position. - Y start position. - Y end position. - - The number of different luminance levels. Typical values are 256 for 8-bit grayscale images - or 65536 for 16-bit grayscale images. - - - - - Processes a border column of the image which is half the size of the tile width. - - The source image. - The pre-computed lookup tables to remap the grey values for each tiles. - The X index of the lookup table to use. - The source image height. - The number of vertical tiles. - The height of a tile. - X start position in the image. - X end position of the image. - - The number of different luminance levels. Typical values are 256 for 8-bit grayscale images - or 65536 for 16-bit grayscale images. - - - - - Processes a border row of the image which is half of the size of the tile height. - - The source image. - The pre-computed lookup tables to remap the grey values for each tiles. - The Y index of the lookup table to use. - The source image width. - The number of horizontal tiles. - The width of a tile. - Y start position in the image. - Y end position of the image. - - The number of different luminance levels. Typical values are 256 for 8-bit grayscale images - or 65536 for 16-bit grayscale images. - - - - - Bilinear interpolation between four adjacent tiles. - - The pixel to remap the grey value from. - The pre-computed lookup tables to remap the grey values for each tiles. - The number of tiles in the x-direction. - The number of tiles in the y-direction. - X position inside the tile. - Y position inside the tile. - X index of the top left lookup table to use. - Y index of the top left lookup table to use. - Width of one tile in pixels. - Height of one tile in pixels. - - The number of different luminance levels. Typical values are 256 for 8-bit grayscale images - or 65536 for 16-bit grayscale images. - - A re-mapped grey value. - - - - Linear interpolation between two tiles. - - The pixel to remap the grey value from. - The CDF lookup map. - X position inside the first tile. - Y position inside the first tile. - X position inside the second tile. - Y position inside the second tile. - Position inside the tile. - Width of the tile. - - The number of different luminance levels. Typical values are 256 for 8-bit grayscale images - or 65536 for 16-bit grayscale images. - - A re-mapped grey value. - - - - Bilinear interpolation between four tiles. - - The interpolation value in x direction in the range of [0, 1]. - The interpolation value in y direction in the range of [0, 1]. - Luminance from top left tile. - Luminance from right top tile. - Luminance from left bottom tile. - Luminance from right bottom tile. - Interpolated Luminance. - - - - Linear interpolation between two grey values. - - The left value. - The right value. - The interpolation value between the two values in the range of [0, 1]. - The interpolated value. - - - - - - - Contains the results of the cumulative distribution function for all tiles. - - - - - Remaps the grey value with the cdf. - - The tiles x-position. - The tiles y-position. - The original luminance. - The remapped luminance. - - - - - - - Applies an adaptive histogram equalization to the image using an sliding window approach. - - - - - Initializes a new instance of the class. - - The number of different luminance levels. Typical values are 256 for 8-bit grayscale images - or 65536 for 16-bit grayscale images. - Indicating whether to clip the histogram bins at a specific value. - The histogram clip limit. Histogram bins which exceed this limit, will be capped at this value. - The number of tiles the image is split into (horizontal and vertically). Minimum value is 2. Maximum value is 100. - - - - Gets the number of tiles the image is split into (horizontal and vertically) for the adaptive histogram equalization. - - - - - - - - Applies an adaptive histogram equalization to the image using an sliding window approach. - - The pixel format. - - - - Initializes a new instance of the class. - - The configuration which allows altering default behaviour or extending the library. - The number of different luminance levels. Typical values are 256 for 8-bit grayscale images - or 65536 for 16-bit grayscale images. - Indicating whether to clip the histogram bins at a specific value. - The histogram clip limit. Histogram bins which exceed this limit, will be capped at this value. - The number of tiles the image is split into (horizontal and vertically). Minimum value is 2. Maximum value is 100. - The source for the current processor instance. - The source area to process for the current processor instance. - - - - Gets the number of tiles the image is split into (horizontal and vertically) for the adaptive histogram equalization. - - - - - - - - Get the a pixel row at a given position with a length of the tile width. Mirrors pixels which exceeds the edges. - - The source image. - Pre-allocated pixel row span of the size of a the tile width. - The x position. - The y position. - The width in pixels of a tile. - The configuration. - - - - Get the a pixel row at a given position with a length of the tile width. - - The source image. - Pre-allocated pixel row span of the size of a the tile width. - The x position. - The y position. - The width in pixels of a tile. - The configuration. - - - - Adds a column of grey values to the histogram. - - The reference to the span of grey values to add. - The reference to the histogram span. - The number of different luminance levels. - The grey values span length. - - - - Removes a column of grey values from the histogram. - - The reference to the span of grey values to remove. - The reference to the histogram span. - The number of different luminance levels. - The grey values span length. - - - - Applies the sliding window equalization to one column of the image. The window is moved from top to bottom. - Moving the window one pixel down requires to remove one row from the top of the window from the histogram and - adding a new row at the bottom. - - - - - Initializes a new instance of the struct. - - The configuration. - The histogram processor. - The source image. - The memory allocator. - The target pixels. - about the sliding window dimensions. - The y start position. - The y end position. - if set to true the borders of the image will not be checked. - - - - Defines a global histogram equalization applicable to an . - - - - - Initializes a new instance of the class. - - The number of luminance levels. - A value indicating whether to clip the histogram bins at a specific value. - The histogram clip limit. Histogram bins which exceed this limit, will be capped at this value. - - - - - - - Applies a global histogram equalization to the image. - - The pixel format. - - - - Initializes a new instance of the class. - - The configuration which allows altering default behaviour or extending the library. - - The number of different luminance levels. Typical values are 256 for 8-bit grayscale images - or 65536 for 16-bit grayscale images. - - Indicating whether to clip the histogram bins at a specific value. - The histogram clip limit. Histogram bins which exceed this limit, will be capped at this value. - The source for the current processor instance. - The source area to process for the current processor instance. - - - - - - - A implementing the grayscale levels logic for . - - - - - - - - A implementing the cdf application levels logic for . - - - - - - - - Enumerates the different types of defined histogram equalization methods. - - - - - A global histogram equalization. - - - - - Adaptive histogram equalization using a tile interpolation approach. - - - - - Adaptive histogram equalization using sliding window. Slower then the tile interpolation mode, but can yield to better results. - - - - - Data container providing the different options for the histogram equalization. - - - - - Gets the default instance. - - - - - Gets or sets the histogram equalization method to use. Defaults to global histogram equalization. - - - - - Gets or sets the number of different luminance levels. Typical values are 256 for 8-bit grayscale images - or 65536 for 16-bit grayscale images. - Defaults to 256. - - - - - Gets or sets a value indicating whether to clip the histogram bins at a specific value. - It is recommended to use clipping when the AdaptiveTileInterpolation method is used, to suppress artifacts which can occur on the borders of the tiles. - Defaults to false. - - - - - Gets or sets the histogram clip limit. Adaptive histogram equalization may cause noise to be amplified in near constant - regions. To reduce this problem, histogram bins which exceed a given limit will be capped at this value. The exceeding values - will be redistributed equally to all other bins. The clipLimit depends on the size of the tiles the image is split into - and therefore the image size itself. - Defaults to 350. - - For more information, see also: https://en.wikipedia.org/wiki/Adaptive_histogram_equalization#Contrast_Limited_AHE - - - - Gets or sets the number of tiles the image is split into (horizontal and vertically) for the adaptive histogram equalization. - Defaults to 8. - - - - - Defines a processor that normalizes the histogram of an image. - - - - - Initializes a new instance of the class. - - The number of different luminance levels. Typical values are 256 for 8-bit grayscale images - or 65536 for 16-bit grayscale images. - Indicates, if histogram bins should be clipped. - The histogram clip limit. Histogram bins which exceed this limit, will be capped at this value. - - - - Gets the number of luminance levels. - - - - - Gets a value indicating whether to clip the histogram bins at a specific value. - - - - - Gets the histogram clip limit. Histogram bins which exceed this limit, will be capped at this value. - - - - - - - - Creates the that implements the algorithm - defined by the given . - - The . - The . - - - - Defines a processor that normalizes the histogram of an image. - - The pixel format. - - - - Initializes a new instance of the class. - - The configuration which allows altering default behaviour or extending the library. - The number of different luminance levels. Typical values are 256 for 8-bit grayscale images - or 65536 for 16-bit grayscale images. - Indicates, if histogram bins should be clipped. - The histogram clip limit. Histogram bins which exceed this limit, will be capped at this value. - The source for the current processor instance. - The source area to process for the current processor instance. - - - - Gets the number of luminance levels. - - - - - Gets a value indicating whether to clip the histogram bins at a specific value. - - - - - Gets the histogram clip limit. Histogram bins which exceed this limit, will be capped at this value. - - - - - Calculates the cumulative distribution function. - - The reference to the array holding the cdf. - The reference to the histogram of the input image. - Index of the maximum of the histogram. - The first none zero value of the cdf. - - - - AHE tends to over amplify the contrast in near-constant regions of the image, since the histogram in such regions is highly concentrated. - Clipping the histogram is meant to reduce this effect, by cutting of histogram bin's which exceed a certain amount and redistribute - the values over the clip limit to all other bins equally. - - The histogram to apply the clipping. - Histogram clip limit. Histogram bins which exceed this limit, will be capped at this value. - - - - Convert the pixel values to grayscale using ITU-R Recommendation BT.709. - - The pixel to get the luminance from - The number of luminance levels (256 for 8 bit, 65536 for 16 bit grayscale images) - - - - Defines a processing operation to replace the background color of an . - - - - - Initializes a new instance of the class. - - The options defining blending algorithm and amount. - The to set the background color to. - - - - Gets the Graphics options to alter how processor is applied. - - - - - Gets the background color value. - - - - - - - - Sets the background color of the image. - - The pixel format. - - - - Initializes a new instance of the class. - - The configuration which allows altering default behaviour or extending the library. - The defining the processor parameters. - The source for the current processor instance. - The source area to process for the current processor instance. - - - - - - - Defines a radial glow effect applicable to an . - - - - - Initializes a new instance of the class. - - The options effecting blending and composition. - The color or the glow. - - - - Initializes a new instance of the class. - - The options effecting blending and composition. - The color or the glow. - The radius of the glow. - - - - Gets the options effecting blending and composition. - - - - - Gets the glow color to apply. - - - - - Gets the the radius. - - - - - - - - An that applies a radial glow effect an . - - The pixel format. - - - - Initializes a new instance of the class. - - The configuration which allows altering default behaviour or extending the library. - The defining the processor parameters. - The source for the current processor instance. - The source area to process for the current processor instance. - - - - - - - Defines a radial vignette effect applicable to an . - - - - - Initializes a new instance of the class. - - The options effecting blending and composition. - The color of the vignette. - - - - Initializes a new instance of the class. - - The options effecting blending and composition. - The color of the vignette. - The x-radius. - The y-radius. - - - - Gets the options effecting blending and composition - - - - - Gets the vignette color to apply. - - - - - Gets the the x-radius. - - - - - Gets the the y-radius. - - - - - - - - An that applies a radial vignette effect to an . - - The pixel format. - - - - Initializes a new instance of the class. - - The configuration which allows altering default behaviour or extending the library. - The defining the processor parameters. - The source for the current processor instance. - The source area to process for the current processor instance. - - - - - - - A pixel sampling strategy that enumerates a limited amount of rows from different frames, - if the total number of pixels is over a threshold. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The maximum number of pixels to process. - always scan at least this portion of total pixels within the image. - - - - Gets the maximum number of pixels to process. (The threshold.) - - - - - Gets a value indicating: always scan at least this portion of total pixels within the image. - The default is 0.1 (10%). - - - - - - - - Gets the closest color to the supplied color based upon the Euclidean distance. - - The pixel format. - - - - Initializes a new instance of the struct. - - The configuration. - The color palette to map from. - - - - Gets the color palette of this . - The palette memory is owned by the palette source that created it. - - - - - Returns the closest color in the palette and the index of that pixel. - The palette contents must match the one used in the constructor. - - The color to match. - The matched color. - The index. - - - - A pixel sampling strategy that enumerates all pixels. - - - - - - - - Provides an abstraction to enumerate pixel regions within a multi-framed . - - - - - Enumerates pixel regions within the image as . - - The image. - The pixel type. - An enumeration of pixel regions. - - - - Provides methods for allowing quantization of images pixels with configurable dithering. - - - - - Gets the quantizer options defining quantization rules. - - - - - Creates the generic frame quantizer. - - The to configure internal operations. - The pixel format. - The . - - - - Creates the generic frame quantizer. - - The pixel format. - The to configure internal operations. - The options to create the quantizer with. - The . - - - - Provides methods to allow the execution of the quantization process on an image frame. - - The pixel format. - - - - Gets the configuration. - - - - - Gets the quantizer options defining quantization rules. - - - - - Gets the quantized color palette. - - - The palette has not been built via . - - - - - Adds colors to the quantized palette from the given pixel source. - - The of source pixels to register. - - - - Quantizes an image frame and return the resulting output pixels. - - The source image frame to quantize. - The bounds within the frame to quantize. - - A representing a quantized version of the source frame pixels. - - - Only executes the second (quantization) step. The palette has to be built by calling . - To run both steps, use . - - - - - Returns the index and color from the quantized palette corresponding to the given color. - - The color to match. - The matched color. - The index. - - - - Allows the quantization of images pixels using Octrees. - - - - - - Initializes a new instance of the class - using the default . - - - - - Initializes a new instance of the class. - - The quantizer options defining quantization rules. - - - - - - - - - - - - - Encapsulates methods to calculate the color palette if an image using an Octree pattern. - - - The pixel format. - - - - Initializes a new instance of the struct. - - The configuration which allows altering default behaviour or extending the library. - The quantizer options defining quantization rules. - - - - - - - - - - - - - - - - - - - - - - - - - Class which does the actual quantization. - - - - - The root of the Octree - - - - - Maximum number of significant bits in the image - - - - - Store the last node quantized - - - - - Cache the previous color quantized - - - - - Initializes a new instance of the class. - - - The maximum number of significant bits in the image - - - - - Gets the mask used when getting the appropriate pixels for a given node. - - - - - Gets or sets the number of leaves in the tree - - - - - Gets the array of reducible nodes - - - - - Add a given color value to the Octree - - The color to add. - - - - Convert the nodes in the Octree to a palette with a maximum of colorCount colors - - The palette to fill. - The maximum number of colors - The palette index, used to calculate the final size of the palette. - - - - Get the palette index for the passed color - - The color to match. - - The index. - - - - - Keep track of the previous node that was quantized - - - The node last quantized - - - - - Reduce the depth of the tree - - - - - Class which encapsulates each node in the tree - - - - - Pointers to any child nodes - - - - - Flag indicating that this is a leaf node - - - - - Number of pixels in this node - - - - - Red component - - - - - Green Component - - - - - Blue component - - - - - The index of this node in the palette - - - - - Initializes a new instance of the class. - - The level in the tree = 0 - 7. - The number of significant color bits in the image. - The tree to which this node belongs. - - - - Gets the next reducible node - - - - - Add a color into the tree - - The color to add. - The number of significant color bits. - The level in the tree. - The tree to which this node belongs. - - - - Reduce this node by removing all of its children - - The number of leaves removed - - - - Traverse the tree, building up the color palette - - The palette - The current palette index - - - - Return the palette index for the passed color - - The pixel data. - The level. - - The representing the index of the pixel in the palette. - - - - - Gets the color index at the given level. - - The color. - The node level. - The index. - - - - Increment the color count and add to the color information - - The pixel to add. - - - - Allows the quantization of images pixels using color palettes. - - - - - Initializes a new instance of the class. - - The color palette. - - - - Initializes a new instance of the class. - - The color palette. - The quantizer options defining quantization rules. - - - - - - - - - - - - - Encapsulates methods to create a quantized image based upon the given palette. - - - The pixel format. - - - - Initializes a new instance of the struct. - - The configuration which allows altering default behaviour or extending the library. - The quantizer options defining quantization rules. - The pixel map for looking up color matches from a predefined palette. - - - - - - - - - - - - - - - - - - - - - - - - - Defines quantization processing for images to reduce the number of colors used in the image palette. - - - - - Initializes a new instance of the class. - - The quantizer used to reduce the color palette. - - - - Gets the quantizer. - - - - - - - - Enables the quantization of images to reduce the number of colors used in the image palette. - - The pixel format. - - - - Initializes a new instance of the class. - - The configuration which allows altering default behaviour or extending the library. - The quantizer used to reduce the color palette. - The source for the current processor instance. - The source area to process for the current processor instance. - - - - - - - Contains color quantization specific constants. - - - - - The minimum number of colors to use when quantizing an image. - - - - - The maximum number of colors to use when quantizing an image. - - - - - The minumim dithering scale used to adjust the amount of dither. - - - - - The max dithering scale used to adjust the amount of dither. - - - - - Gets the default dithering algorithm to use. - - - - - Defines options for quantization. - - - - - Gets or sets the algorithm to apply to the output image. - Defaults to ; set to for no dithering. - - - - - Gets or sets the dithering scale used to adjust the amount of dither. Range 0..1. - Defaults to . - - - - - Gets or sets the maximum number of colors to hold in the color palette. Range 0..256. - Defaults to . - - - - - Contains utility methods for instances. - - - - - Helper method for throwing an exception when a frame quantizer palette has - been requested but not built yet. - - The pixel format. - The frame quantizer palette. - - The palette has not been built via - - - - - Execute both steps of the quantization. - - The pixel specific quantizer. - The source image frame to quantize. - The bounds within the frame to quantize. - The pixel type. - - A representing a quantized version of the source frame pixels. - - - - - Quantizes an image frame and return the resulting output pixels. - - The type of frame quantizer. - The pixel format. - The pixel specific quantizer. - The source image frame to quantize. - The bounds within the frame to quantize. - - A representing a quantized version of the source frame pixels. - - - - - A palette quantizer consisting of web safe colors as defined in the CSS Color Module Level 4. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The quantizer options defining quantization rules. - - - - A palette quantizer consisting of colors as defined in the original second edition of Werner’s Nomenclature of Colours 1821. - The hex codes were collected and defined by Nicholas Rougeux - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The quantizer options defining quantization rules. - - - - Allows the quantization of images pixels using Xiaolin Wu's Color Quantizer - - - - - Initializes a new instance of the class - using the default . - - - - - Initializes a new instance of the class. - - The quantizer options defining quantization rules. - - - - - - - - - - - - - An implementation of Wu's color quantizer with alpha channel. - - - - Based on C Implementation of Xiaolin Wu's Color Quantizer (v. 2) - (see Graphics Gems volume II, pages 126-133) - (). - - - This adaptation is based on the excellent JeremyAnsel.ColorQuant by Jérémy Ansel - - - - Algorithm: Greedy orthogonal bipartition of RGB space for variance minimization aided by inclusion-exclusion tricks. - For speed no nearest neighbor search is done. Slightly better performance can be expected by more sophisticated - but more expensive versions. - - - The pixel format. - - - - The index bits. 6 in original code. - - - - - The index alpha bits. 3 in original code. - - - - - The index count. - - - - - The index alpha count. - - - - - The table length. Now 1185921. originally 2471625. - - - - - Initializes a new instance of the struct. - - The configuration which allows altering default behaviour or extending the library. - The quantizer options defining quantization rules. - - - - - - - - - - - - - - - - - - - - - - - - - Gets the index of the given color in the palette. - - The red value. - The green value. - The blue value. - The alpha value. - The index. - - - - Computes sum over a box of any given statistic. - - The cube. - The moment. - The result. - - - - Computes part of Volume(cube, moment) that doesn't depend on RMax, GMax, BMax, or AMax (depending on direction). - - The cube. - The direction. - The moment. - The result. - - - - Computes remainder of Volume(cube, moment), substituting position for RMax, GMax, BMax, or AMax (depending on direction). - - The cube. - The direction. - The position. - The moment. - The result. - - - - Builds a 3-D color histogram of counts, r/g/b, c^2. - - The source data. - The bounds within the source image to quantize. - - - - Converts the histogram into moments so that we can rapidly calculate the sums of the above quantities over any desired box. - - The memory allocator used for allocating buffers. - - - - Computes the weighted variance of a box cube. - - The cube. - The . - - - - We want to minimize the sum of the variances of two sub-boxes. - The sum(c^2) terms can be ignored since their sum over both sub-boxes - is the same (the sum for the whole box) no matter where we split. - The remaining terms have a minus sign in the variance formula, - so we drop the minus sign and maximize the sum of the two terms. - - The cube. - The direction. - The first position. - The last position. - The cutting point. - The whole moment. - The . - - - - Cuts a box. - - The first set. - The second set. - Returns a value indicating whether the box has been split. - - - - Marks a color space tag. - - The cube. - A label. - - - - Builds the cube. - - - - - Moment of r*P(c). - - - - - Moment of g*P(c). - - - - - Moment of b*P(c). - - - - - Moment of a*P(c). - - - - - Moment of P(c). - - - - - Moment of c^2*P(c). - - - - - Represents a box color cube. - - - - - Gets or sets the min red value, exclusive. - - - - - Gets or sets the max red value, inclusive. - - - - - Gets or sets the min green value, exclusive. - - - - - Gets or sets the max green value, inclusive. - - - - - Gets or sets the min blue value, exclusive. - - - - - Gets or sets the max blue value, inclusive. - - - - - Gets or sets the min alpha value, exclusive. - - - - - Gets or sets the max alpha value, inclusive. - - - - - Gets or sets the volume. - - - - - - - - - - - - - - Defines a crop operation on an image. - - - - - Initializes a new instance of the class. - - The target cropped rectangle. - The source image size. - - - - Gets the width. - - - - - - - - Provides methods to allow the cropping of an image. - - The pixel format. - - - - Initializes a new instance of the class. - - The configuration which allows altering default behaviour or extending the library. - The . - The source for the current processor instance. - The source area to process for the current processor instance. - - - - - - - - - - A implementing the processor logic for . - - - - - Initializes a new instance of the struct. - - The target processing bounds for the current instance. - The source for the current instance. - The destination for the current instance. - - - - - - - Represents an error that occurs during a transform operation. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The message that describes the error. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is - the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or a null reference ( in Visual Basic) if no inner exception is specified. - - - - Defines cropping operation that preserves areas of highest entropy. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The threshold to split the image. Must be between 0 and 1. - - is less than 0 or is greater than 1. - - - - - Gets the entropy threshold value. - - - - - - - - Provides methods to allow the cropping of an image to preserve areas of highest entropy. - - The pixel format. - - - - Initializes a new instance of the class. - - The configuration which allows altering default behaviour or extending the library. - The . - The source for the current processor instance. - The source area to process for the current processor instance. - - - - - - - - - - Gets the bounding from the given points. - - - The designating the top left position. - - - The designating the bottom right position. - - - The bounding . - - - - - Finds the bounding rectangle based on the first instance of any color component other - than the given one. - - The to search within. - The color component value to remove. - The channel to test against. - - The . - - - - - Encapsulates an interpolation algorithm for resampling images. - - - - - Gets the radius in which to sample pixels. - - - - - Gets the result of the interpolation algorithm. - - The value to process. - - The - - - - - Applies a transformation upon an image. - - The pixel format. - The transforming image processor. - - - - Implements an algorithm to alter the pixels of an image via resampling transforms. - - The pixel format. - - - - Applies a resampling transform with the given sampler. - - The type of sampler. - The sampler to use. - - - - Encapsulate an algorithm to swizzle pixels in an image. - - - - - Gets the size of the image after transformation. - - - - - Applies the swizzle transformation to a given point. - - Point to transform. - The transformed point. - - - - Defines an affine transformation applicable on an . - - - - - Initializes a new instance of the class. - - The transform matrix. - The sampler to perform the transform operation. - The target dimensions. - - - - Gets the sampler to perform interpolation of the transform operation. - - - - - Gets the matrix used to supply the affine transform. - - - - - Gets the destination size to constrain the transformed image to. - - - - - - - - Provides the base methods to perform affine transforms on an image. - - The pixel format. - - - - Initializes a new instance of the class. - - The configuration which allows altering default behaviour or extending the library. - The defining the processor parameters. - The source for the current processor instance. - The source area to process for the current processor instance. - - - - - - - - - - Adjusts an image so that its orientation is suitable for viewing. Adjustments are based on EXIF metadata embedded in the image. - - - - - - - - Adjusts an image so that its orientation is suitable for viewing. Adjustments are based on EXIF metadata embedded in the image. - - The pixel format. - - - - Initializes a new instance of the class. - - The configuration which allows altering default behaviour or extending the library. - The source for the current processor instance. - The source area to process for the current processor instance. - - - - - - - - - - Returns the current EXIF orientation - - The image to auto rotate. - The - - - - Defines a flipping around the center point of the image. - - - - - Initializes a new instance of the class. - - The used to perform flipping. - - - - Gets the used to perform flipping. - - - - - - - - Provides methods that allow the flipping of an image around its center point. - - The pixel format. - - - - Initializes a new instance of the class. - - The configuration which allows altering default behaviour or extending the library. - The . - The source for the current processor instance. - The source area to process for the current processor instance. - - - - - - - Swaps the image at the X-axis, which goes horizontally through the middle at half the height of the image. - - The source image to apply the process to. - The configuration. - - - - Swaps the image at the Y-axis, which goes vertically through the middle at half of the width of the image. - - The source image to apply the process to. - The configuration. - - - - Utility methods for affine and projective transforms. - - - - - Defines a projective transformation applicable to an . - - - - - Initializes a new instance of the class. - - The transform matrix. - The sampler to perform the transform operation. - The target dimensions. - - - - Gets the sampler to perform interpolation of the transform operation. - - - - - Gets the matrix used to supply the projective transform. - - - - - Gets the destination size to constrain the transformed image to. - - - - - - - - Provides the base methods to perform non-affine transforms on an image. - - The pixel format. - - - - Initializes a new instance of the class. - - The configuration which allows altering default behaviour or extending the library. - The defining the processor parameters. - The source for the current processor instance. - The source area to process for the current processor instance. - - - - - - - - - - Defines a rotation applicable to an . - - - - - Initializes a new instance of the class. - - The angle of rotation in degrees. - The source image size - - - - Initializes a new instance of the class. - - The angle of rotation in degrees. - The sampler to perform the rotating operation. - The source image size - - - - Gets the angle of rotation in degrees. - - - - - - - - Provides methods that allow the rotating of images. - - The pixel format. - - - - Initializes a new instance of the class. - - The configuration which allows altering default behaviour or extending the library. - The defining the processor parameters. - The source for the current processor instance. - The source area to process for the current processor instance. - - - - - - - - - - Wraps a given angle in degrees so that it falls withing the 0-360 degree range - - The angle of rotation in degrees. - The . - - - - Rotates the images with an optimized method when the angle is 90, 180 or 270 degrees. - - The source image. - The destination image. - The configuration. - - The - - - - - Rotates the image 180 degrees clockwise at the centre point. - - The source image. - The destination image. - The configuration. - - - - Rotates the image 270 degrees clockwise at the centre point. - - The source image. - The destination image. - The configuration. - - - - Rotates the image 90 degrees clockwise at the centre point. - - The source image. - The destination image. - The configuration. - - - - Defines a skew transformation applicable to an . - - - - - Initializes a new instance of the class. - - The angle in degrees to perform the skew along the x-axis. - The angle in degrees to perform the skew along the y-axis. - The source image size - - - - Initializes a new instance of the class. - - The angle in degrees to perform the skew along the x-axis. - The angle in degrees to perform the skew along the y-axis. - The sampler to perform the skew operation. - The source image size - - - - Gets the angle of rotation along the x-axis in degrees. - - - - - Gets the angle of rotation along the y-axis in degrees. - - - - - The function implements the bicubic kernel algorithm W(x) as described on - Wikipedia - A commonly used algorithm within image processing that preserves sharpness better than triangle interpolation. - - - - - - - - - - - - - - The function implements the box algorithm. Similar to nearest neighbor when upscaling. - When downscaling the pixels will average, merging together. - - - - - - - - - - - - - - Cubic filters contain a collection of different filters of varying B-Spline and - Cardinal values. With these two values you can generate any smoothly fitting - (continuious first derivative) piece-wise cubic filter. - - - - - - - The Catmull-Rom filter is a well known standard Cubic Filter often used as a interpolation function. - This filter produces a reasonably sharp edge, but without a the pronounced gradient change on large - scale image enlargements that a 'Lagrange' filter can produce. - - - - - The Hermite filter is type of smoothed triangular interpolation Filter, - This filter rounds off strong edges while preserving flat 'color levels' in the original image. - - - - - The function implements the Mitchell-Netravali algorithm as described on - Wikipedia - - - - - The function implements the Robidoux algorithm. - - - - - - The function implements the Robidoux Sharp algorithm. - - - - - - The function implements the spline algorithm. - - - - The function implements the Robidoux Sharp algorithm. - - - - - - Initializes a new instance of the struct. - - The sampling radius. - The B-Spline value. - The Cardinal cubic value. - - - - - - - - - - - - - The function implements the Lanczos kernel algorithm as described on - Wikipedia. - - - - - Implements the Lanczos kernel algorithm with a radius of 2. - - - - - Implements the Lanczos kernel algorithm with a radius of 3. - - - - - Implements the Lanczos kernel algorithm with a radius of 5. - - - - - Implements the Lanczos kernel algorithm with a radius of 8. - - - - - Initializes a new instance of the struct. - - The sampling radius. - - - - - - - - - - - - - The function implements the nearest neighbor algorithm. This uses an unscaled filter - which will select the closest pixel to the new pixels position. - - - - - - - - - - - - - - The function implements the triangle (bilinear) algorithm. - Bilinear interpolation can be used where perfect image transformation with pixel matching is impossible, - so that one can calculate and assign appropriate intensity values to pixels. - - - - - - - - - - - - - - The function implements the welch algorithm. - - - - - - - - - - - - - - - Provides methods to help calculate the target rectangle when resizing using the - enumeration. - - - - - Calculates the target location and bounds to perform the resize operation against. - - The source image size. - The resize options. - - The tuple representing the location and the bounds - - - - - Points to a collection of of weights allocated in . - - - - - Initializes a new instance of the struct. - - - - - Gets the start index for the destination row. - - - - - Gets the the length of the kernel. - - - - - Gets the span representing the portion of the that this window covers. - - The . - - - - - Computes the sum of vectors in 'rowSpan' weighted by weight values, pointed by this instance. - - The input span of vectors - The weighted sum - - - - Copy the contents of altering - to the value . - - - - - Provides resize kernel values from an optimized contiguous memory region. - - - - - Gets the length of the destination row/column - - - - - Gets the maximum diameter of the kernels. - - - - - Gets a string of information to help debugging - - - - - Disposes instance releasing it's backing buffer. - - - - - Disposes the object and frees resources for the Garbage Collector. - - Whether to dispose of managed and unmanaged objects. - - - - Returns a for an index value between 0 and DestinationSize - 1. - - - - - Computes the weights to apply at each pixel when resizing. - - The type of sampler. - The - The destination size - The source size - The to use for buffer allocations - The - - - - Initializes the kernel map. - - - - - Builds a for the row (in ) - referencing the data at row within , - so the data reusable by other data rows. - - - - - Returns a referencing values of - at row . - - - - - Memory-optimized where repeating rows are stored only once. - - - - - Defines an image resizing operation with the given and dimensional parameters. - - - - - Initializes a new instance of the class. - - The resize options. - The source image size. - - - - Gets the sampler to perform the resize operation. - - - - - Gets the destination width. - - - - - Gets the destination height. - - - - - Gets the resize rectangle. - - - - - Gets a value indicating whether to compress or expand individual pixel color values on processing. - - - - - Gets a value indicating whether to premultiply the alpha (if it exists) during the resize operation. - - - - - - - - Implements resizing of images using various resamplers. - - The pixel format. - - - - - - - - - - - - - Implements the resize algorithm using a sliding window of size - maximized by . - The height of the window is a multiple of the vertical kernel's maximum diameter. - When sliding the window, the contents of the bottom window band are copied to the new top band. - For more details, and visual explanation, see "ResizeWorker.pptx". - - - - - Defines a swizzle operation on an image. - - The swizzle function type. - - - - Initializes a new instance of the class. - - The swizzler operation. - - - - Gets the swizzler operation. - - - - - - - - The base class for all transform processors. Any processor that changes the dimensions of the image should inherit from this. - - The pixel format. - - - - Initializes a new instance of the class. - - The configuration which allows altering default behaviour or extending the library. - The source for the current processor instance. - The source area to process for the current processor instance. - - - - - - - Contains helper methods for working with transforms. - - - - - Updates the dimensional metadata of a transformed image - - The pixel format. - The image to update - - - - Contains utility methods for working with transforms. - - - - - Returns a value that indicates whether the specified matrix is degenerate - containing one or more values equivalent to or a - zero determinant and therefore cannot be used for linear transforms. - - The transform matrix. - - - - Returns a value that indicates whether the specified matrix is degenerate - containing one or more values equivalent to or a - zero determinant and therefore cannot be used for linear transforms. - - The transform matrix. - - - - Returns a value that indicates whether the specified matrix contains any values - that are not a number . - - The transform matrix. - The . - - - - Returns a value that indicates whether the specified matrix contains any values - that are not a number . - - The transform matrix. - The . - - - - Applies the projective transform against the given coordinates flattened into the 2D space. - - The "x" vector coordinate. - The "y" vector coordinate. - The transform matrix. - The . - - - - Creates a centered rotation matrix using the given rotation in degrees and the source size. - - The amount of rotation, in degrees. - The source image size. - The . - - - - Creates a centered rotation matrix using the given rotation in radians and the source size. - - The amount of rotation, in radians. - The source image size. - The . - - - - Creates a centered skew matrix from the give angles in degrees and the source size. - - The X angle, in degrees. - The Y angle, in degrees. - The source image size. - The . - - - - Creates a centered skew matrix from the give angles in radians and the source size. - - The X angle, in radians. - The Y angle, in radians. - The source image size. - The . - - - - Gets the centered transform matrix based upon the source and destination rectangles. - - The source image bounds. - The transformation matrix. - The - - - - Creates a matrix that performs a tapering projective transform. - - - The rectangular size of the image being transformed. - An enumeration that indicates the side of the rectangle that tapers. - An enumeration that indicates on which corners to taper the rectangle. - The amount to taper. - The - - - - Returns the rectangle bounds relative to the source for the given transformation matrix. - - The source rectangle. - The transformation matrix. - - The . - - - - - Returns the rectangle relative to the source for the given transformation matrix. - - The source rectangle. - The transformation matrix. - - The . - - - - - Returns the size relative to the source for the given transformation matrix. - - The source size. - The transformation matrix. - - The . - - - - - Returns the rectangle relative to the source for the given transformation matrix. - - The source rectangle. - The transformation matrix. - - The . - - - - - Returns the size relative to the source for the given transformation matrix. - - The source size. - The transformation matrix. - - The . - - - - - A helper class for constructing instances for use in projective transforms. - - - - - Prepends a matrix that performs a tapering projective transform. - - An enumeration that indicates the side of the rectangle that tapers. - An enumeration that indicates on which corners to taper the rectangle. - The amount to taper. - The . - - - - Appends a matrix that performs a tapering projective transform. - - An enumeration that indicates the side of the rectangle that tapers. - An enumeration that indicates on which corners to taper the rectangle. - The amount to taper. - The . - - - - Prepends a centered rotation matrix using the given rotation in degrees. - - The amount of rotation, in degrees. - The . - - - - Prepends a centered rotation matrix using the given rotation in radians. - - The amount of rotation, in radians. - The . - - - - Prepends a centered rotation matrix using the given rotation in degrees at the given origin. - - The amount of rotation, in radians. - The rotation origin point. - The . - - - - Prepends a centered rotation matrix using the given rotation in radians at the given origin. - - The amount of rotation, in radians. - The rotation origin point. - The . - - - - Appends a centered rotation matrix using the given rotation in degrees. - - The amount of rotation, in degrees. - The . - - - - Appends a centered rotation matrix using the given rotation in radians. - - The amount of rotation, in radians. - The . - - - - Appends a centered rotation matrix using the given rotation in degrees at the given origin. - - The amount of rotation, in radians. - The rotation origin point. - The . - - - - Appends a centered rotation matrix using the given rotation in radians at the given origin. - - The amount of rotation, in radians. - The rotation origin point. - The . - - - - Prepends a scale matrix from the given uniform scale. - - The uniform scale. - The . - - - - Prepends a scale matrix from the given vector scale. - - The horizontal and vertical scale. - The . - - - - Prepends a scale matrix from the given vector scale. - - The horizontal and vertical scale. - The . - - - - Appends a scale matrix from the given uniform scale. - - The uniform scale. - The . - - - - Appends a scale matrix from the given vector scale. - - The horizontal and vertical scale. - The . - - - - Appends a scale matrix from the given vector scale. - - The horizontal and vertical scale. - The . - - - - Prepends a centered skew matrix from the give angles in degrees. - - The X angle, in degrees. - The Y angle, in degrees. - The . - - - - Prepends a centered skew matrix from the give angles in radians. - - The X angle, in radians. - The Y angle, in radians. - The . - - - - Prepends a skew matrix using the given angles in degrees at the given origin. - - The X angle, in degrees. - The Y angle, in degrees. - The skew origin point. - The . - - - - Prepends a skew matrix using the given angles in radians at the given origin. - - The X angle, in radians. - The Y angle, in radians. - The skew origin point. - The . - - - - Appends a centered skew matrix from the give angles in degrees. - - The X angle, in degrees. - The Y angle, in degrees. - The . - - - - Appends a centered skew matrix from the give angles in radians. - - The X angle, in radians. - The Y angle, in radians. - The . - - - - Appends a skew matrix using the given angles in degrees at the given origin. - - The X angle, in degrees. - The Y angle, in degrees. - The skew origin point. - The . - - - - Appends a skew matrix using the given angles in radians at the given origin. - - The X angle, in radians. - The Y angle, in radians. - The skew origin point. - The . - - - - Prepends a translation matrix from the given vector. - - The translation position. - The . - - - - Prepends a translation matrix from the given vector. - - The translation position. - The . - - - - Appends a translation matrix from the given vector. - - The translation position. - The . - - - - Appends a translation matrix from the given vector. - - The translation position. - The . - - - - Prepends a raw matrix. - - The matrix to prepend. - - The resultant matrix is degenerate containing one or more values equivalent - to or a zero determinant and therefore cannot be used - for linear transforms. - - The . - - - - Appends a raw matrix. - - The matrix to append. - - The resultant matrix is degenerate containing one or more values equivalent - to or a zero determinant and therefore cannot be used - for linear transforms. - - The . - - - - Returns the combined matrix for a given source size. - - The source image size. - The . - - - - Returns the combined matrix for a given source rectangle. - - The rectangle in the source image. - - The resultant matrix is degenerate containing one or more values equivalent - to or a zero determinant and therefore cannot be used - for linear transforms. - - The . - - - - Provides enumeration over how the image should be resized. - - - - - Crops the resized image to fit the bounds of its container. - - - - - Pads the resized image to fit the bounds of its container. - If only one dimension is passed, will maintain the original aspect ratio. - - - - - Pads the image to fit the bound of the container without resizing the - original source. - When downscaling, performs the same functionality as - - - - - Constrains the resized image to fit the bounds of its container maintaining - the original aspect ratio. - - - - - Resizes the image until the shortest side reaches the set given dimension. - Upscaling is disabled in this mode and the original image will be returned - if attempted. - - - - - Stretches the resized image to fit the bounds of its container. - - - - - The target location and size of the resized image has been manually set. - - - - - The resize options for resizing images against certain modes. - - - - - Gets or sets the resize mode. - - - - - Gets or sets the anchor position. - - - - - Gets or sets the center coordinates. - - - - - Gets or sets the target size. - - - - - Gets or sets the sampler to perform the resize operation. - - - - - Gets or sets a value indicating whether to compress - or expand individual pixel colors the value on processing. - - - - - Gets or sets the target rectangle to resize into. - - - - - Gets or sets a value indicating whether to premultiply - the alpha (if it exists) during the resize operation. - - - - - Provides enumeration over how the image should be rotated. - - - - - Do not rotate the image. - - - - - Rotate the image by 90 degrees clockwise. - - - - - Rotate the image by 180 degrees clockwise. - - - - - Rotate the image by 270 degrees clockwise. - - - - - Enumerates the various options which determine how to taper corners - - - - - Taper the left or top corner - - - - - Taper the right or bottom corner - - - - - Taper the both sets of corners - - - - - Enumerates the various options which determine which side to taper - - - - - Taper the left side - - - - - Taper the top side - - - - - Taper the right side - - - - - Taper the bottom side - - - - - Specifies the position in a stream to use for reading. - - - - - Specifies the beginning of a stream. - - - - - Specifies the current position within a stream. - - - - - Provides methods to protect against invalid parameters for a DEBUG build. - - - Provides methods to protect against invalid parameters for a DEBUG build. - - - - - Verifies whether a specific condition is met, throwing an exception if it's false. - - The condition - The error message - - - - Verifies, that the target span is of same size than the 'other' span. - - The element type of the spans - The target span. - The 'other' span to compare 'target' to. - The name of the parameter that is to be checked. - - has a different size than - - - - - Verifies, that the `target` span has the length of 'minSpan', or longer. - - The element type of the spans - The target span. - The 'minSpan' span to compare 'target' to. - The name of the parameter that is to be checked. - - has less items than - - - - - Ensures that the value is not null. - - The target object, which cannot be null. - The name of the parameter that is to be checked. - The type of the value. - is null. - - - - Ensures that the target value is not null, empty, or whitespace. - - The target string, which should be checked against being null or empty. - Name of the parameter. - is null. - is empty or contains only blanks. - - - - Ensures that the specified value is less than a maximum value. - - The target value, which should be validated. - The maximum value. - The name of the parameter that is to be checked. - The type of the value. - - is greater than the maximum value. - - - - - Verifies that the specified value is less than or equal to a maximum value - and throws an exception if it is not. - - The target value, which should be validated. - The maximum value. - The name of the parameter that is to be checked. - The type of the value. - - is greater than the maximum value. - - - - - Verifies that the specified value is greater than a minimum value - and throws an exception if it is not. - - The target value, which should be validated. - The minimum value. - The name of the parameter that is to be checked. - The type of the value. - - is less than the minimum value. - - - - - Verifies that the specified value is greater than or equal to a minimum value - and throws an exception if it is not. - - The target value, which should be validated. - The minimum value. - The name of the parameter that is to be checked. - The type of the value. - - is less than the minimum value. - - - - - Verifies that the specified value is greater than or equal to a minimum value and less than - or equal to a maximum value and throws an exception if it is not. - - The target value, which should be validated. - The minimum value. - The maximum value. - The name of the parameter that is to be checked. - The type of the value. - - is less than the minimum value of greater than the maximum value. - - - - - Verifies, that the method parameter with specified target value is true - and throws an exception if it is found to be so. - - The target value, which cannot be false. - The name of the parameter that is to be checked. - The error message, if any to add to the exception. - - is false. - - - - - Verifies, that the method parameter with specified target value is false - and throws an exception if it is found to be so. - - The target value, which cannot be true. - The name of the parameter that is to be checked. - The error message, if any to add to the exception. - - is true. - - - - - Verifies, that the `source` span has the length of 'minLength', or longer. - - The element type of the spans. - The source span. - The minimum length. - The name of the parameter that is to be checked. - - has less than items. - - - - - Verifies, that the `source` span has the length of 'minLength', or longer. - - The element type of the spans. - The target span. - The minimum length. - The name of the parameter that is to be checked. - - has less than items. - - - - - Verifies that the 'destination' span is not shorter than 'source'. - - The source element type. - The destination element type. - The source span. - The destination span. - The name of the argument for 'destination'. - - - - Verifies that the 'destination' span is not shorter than 'source'. - - The source element type. - The destination element type. - The source span. - The destination span. - The name of the argument for 'destination'. - - - - Provides methods to protect against invalid parameters. - - - Provides methods to protect against invalid parameters. - - - - - Ensures that the value is a value type. - - The target object, which cannot be null. - The name of the parameter that is to be checked. - The type of the value. - is not a value type. - - - - Ensures that the value is not null. - - The target object, which cannot be null. - The name of the parameter that is to be checked. - The type of the value. - is null. - - - - Ensures that the target value is not null, empty, or whitespace. - - The target string, which should be checked against being null or empty. - Name of the parameter. - is null. - is empty or contains only blanks. - - - - Ensures that the specified value is less than a maximum value. - - The target value, which should be validated. - The maximum value. - The name of the parameter that is to be checked. - The type of the value. - - is greater than the maximum value. - - - - - Verifies that the specified value is less than or equal to a maximum value - and throws an exception if it is not. - - The target value, which should be validated. - The maximum value. - The name of the parameter that is to be checked. - The type of the value. - - is greater than the maximum value. - - - - - Verifies that the specified value is greater than a minimum value - and throws an exception if it is not. - - The target value, which should be validated. - The minimum value. - The name of the parameter that is to be checked. - The type of the value. - - is less than the minimum value. - - - - - Verifies that the specified value is greater than or equal to a minimum value - and throws an exception if it is not. - - The target value, which should be validated. - The minimum value. - The name of the parameter that is to be checked. - The type of the value. - - is less than the minimum value. - - - - - Verifies that the specified value is greater than or equal to a minimum value and less than - or equal to a maximum value and throws an exception if it is not. - - The target value, which should be validated. - The minimum value. - The maximum value. - The name of the parameter that is to be checked. - The type of the value. - - is less than the minimum value of greater than the maximum value. - - - - - Verifies, that the method parameter with specified target value is true - and throws an exception if it is found to be so. - - The target value, which cannot be false. - The name of the parameter that is to be checked. - The error message, if any to add to the exception. - - is false. - - - - - Verifies, that the method parameter with specified target value is false - and throws an exception if it is found to be so. - - The target value, which cannot be true. - The name of the parameter that is to be checked. - The error message, if any to add to the exception. - - is true. - - - - - Verifies, that the `source` span has the length of 'minLength', or longer. - - The element type of the spans. - The source span. - The minimum length. - The name of the parameter that is to be checked. - - has less than items. - - - - - Verifies, that the `source` span has the length of 'minLength', or longer. - - The element type of the spans. - The target span. - The minimum length. - The name of the parameter that is to be checked. - - has less than items. - - - - - Verifies that the 'destination' span is not shorter than 'source'. - - The source element type. - The destination element type. - The source span. - The destination span. - The name of the argument for 'destination'. - - - - Verifies that the 'destination' span is not shorter than 'source'. - - The source element type. - The destination element type. - The source span. - The destination span. - The name of the argument for 'destination'. - - - - Ensures that the specified value is less than a maximum value. - - The target value, which should be validated. - The maximum value. - The name of the parameter that is to be checked. - - is greater than the maximum value. - - - - - Verifies that the specified value is less than or equal to a maximum value - and throws an exception if it is not. - - The target value, which should be validated. - The maximum value. - The name of the parameter that is to be checked. - - is greater than the maximum value. - - - - - Verifies that the specified value is greater than a minimum value - and throws an exception if it is not. - - The target value, which should be validated. - The minimum value. - The name of the parameter that is to be checked. - - is less than the minimum value. - - - - - Verifies that the specified value is greater than or equal to a minimum value - and throws an exception if it is not. - - The target value, which should be validated. - The minimum value. - The name of the parameter that is to be checked. - - is less than the minimum value. - - - - - Verifies that the specified value is greater than or equal to a minimum value and less than - or equal to a maximum value and throws an exception if it is not. - - The target value, which should be validated. - The minimum value. - The maximum value. - The name of the parameter that is to be checked. - - is less than the minimum value of greater than the maximum value. - - - - - Ensures that the specified value is less than a maximum value. - - The target value, which should be validated. - The maximum value. - The name of the parameter that is to be checked. - - is greater than the maximum value. - - - - - Verifies that the specified value is less than or equal to a maximum value - and throws an exception if it is not. - - The target value, which should be validated. - The maximum value. - The name of the parameter that is to be checked. - - is greater than the maximum value. - - - - - Verifies that the specified value is greater than a minimum value - and throws an exception if it is not. - - The target value, which should be validated. - The minimum value. - The name of the parameter that is to be checked. - - is less than the minimum value. - - - - - Verifies that the specified value is greater than or equal to a minimum value - and throws an exception if it is not. - - The target value, which should be validated. - The minimum value. - The name of the parameter that is to be checked. - - is less than the minimum value. - - - - - Verifies that the specified value is greater than or equal to a minimum value and less than - or equal to a maximum value and throws an exception if it is not. - - The target value, which should be validated. - The minimum value. - The maximum value. - The name of the parameter that is to be checked. - - is less than the minimum value of greater than the maximum value. - - - - - Ensures that the specified value is less than a maximum value. - - The target value, which should be validated. - The maximum value. - The name of the parameter that is to be checked. - - is greater than the maximum value. - - - - - Verifies that the specified value is less than or equal to a maximum value - and throws an exception if it is not. - - The target value, which should be validated. - The maximum value. - The name of the parameter that is to be checked. - - is greater than the maximum value. - - - - - Verifies that the specified value is greater than a minimum value - and throws an exception if it is not. - - The target value, which should be validated. - The minimum value. - The name of the parameter that is to be checked. - - is less than the minimum value. - - - - - Verifies that the specified value is greater than or equal to a minimum value - and throws an exception if it is not. - - The target value, which should be validated. - The minimum value. - The name of the parameter that is to be checked. - - is less than the minimum value. - - - - - Verifies that the specified value is greater than or equal to a minimum value and less than - or equal to a maximum value and throws an exception if it is not. - - The target value, which should be validated. - The minimum value. - The maximum value. - The name of the parameter that is to be checked. - - is less than the minimum value of greater than the maximum value. - - - - - Ensures that the specified value is less than a maximum value. - - The target value, which should be validated. - The maximum value. - The name of the parameter that is to be checked. - - is greater than the maximum value. - - - - - Verifies that the specified value is less than or equal to a maximum value - and throws an exception if it is not. - - The target value, which should be validated. - The maximum value. - The name of the parameter that is to be checked. - - is greater than the maximum value. - - - - - Verifies that the specified value is greater than a minimum value - and throws an exception if it is not. - - The target value, which should be validated. - The minimum value. - The name of the parameter that is to be checked. - - is less than the minimum value. - - - - - Verifies that the specified value is greater than or equal to a minimum value - and throws an exception if it is not. - - The target value, which should be validated. - The minimum value. - The name of the parameter that is to be checked. - - is less than the minimum value. - - - - - Verifies that the specified value is greater than or equal to a minimum value and less than - or equal to a maximum value and throws an exception if it is not. - - The target value, which should be validated. - The minimum value. - The maximum value. - The name of the parameter that is to be checked. - - is less than the minimum value of greater than the maximum value. - - - - - Ensures that the specified value is less than a maximum value. - - The target value, which should be validated. - The maximum value. - The name of the parameter that is to be checked. - - is greater than the maximum value. - - - - - Verifies that the specified value is less than or equal to a maximum value - and throws an exception if it is not. - - The target value, which should be validated. - The maximum value. - The name of the parameter that is to be checked. - - is greater than the maximum value. - - - - - Verifies that the specified value is greater than a minimum value - and throws an exception if it is not. - - The target value, which should be validated. - The minimum value. - The name of the parameter that is to be checked. - - is less than the minimum value. - - - - - Verifies that the specified value is greater than or equal to a minimum value - and throws an exception if it is not. - - The target value, which should be validated. - The minimum value. - The name of the parameter that is to be checked. - - is less than the minimum value. - - - - - Verifies that the specified value is greater than or equal to a minimum value and less than - or equal to a maximum value and throws an exception if it is not. - - The target value, which should be validated. - The minimum value. - The maximum value. - The name of the parameter that is to be checked. - - is less than the minimum value of greater than the maximum value. - - - - - Ensures that the specified value is less than a maximum value. - - The target value, which should be validated. - The maximum value. - The name of the parameter that is to be checked. - - is greater than the maximum value. - - - - - Verifies that the specified value is less than or equal to a maximum value - and throws an exception if it is not. - - The target value, which should be validated. - The maximum value. - The name of the parameter that is to be checked. - - is greater than the maximum value. - - - - - Verifies that the specified value is greater than a minimum value - and throws an exception if it is not. - - The target value, which should be validated. - The minimum value. - The name of the parameter that is to be checked. - - is less than the minimum value. - - - - - Verifies that the specified value is greater than or equal to a minimum value - and throws an exception if it is not. - - The target value, which should be validated. - The minimum value. - The name of the parameter that is to be checked. - - is less than the minimum value. - - - - - Verifies that the specified value is greater than or equal to a minimum value and less than - or equal to a maximum value and throws an exception if it is not. - - The target value, which should be validated. - The minimum value. - The maximum value. - The name of the parameter that is to be checked. - - is less than the minimum value of greater than the maximum value. - - - - - Ensures that the specified value is less than a maximum value. - - The target value, which should be validated. - The maximum value. - The name of the parameter that is to be checked. - - is greater than the maximum value. - - - - - Verifies that the specified value is less than or equal to a maximum value - and throws an exception if it is not. - - The target value, which should be validated. - The maximum value. - The name of the parameter that is to be checked. - - is greater than the maximum value. - - - - - Verifies that the specified value is greater than a minimum value - and throws an exception if it is not. - - The target value, which should be validated. - The minimum value. - The name of the parameter that is to be checked. - - is less than the minimum value. - - - - - Verifies that the specified value is greater than or equal to a minimum value - and throws an exception if it is not. - - The target value, which should be validated. - The minimum value. - The name of the parameter that is to be checked. - - is less than the minimum value. - - - - - Verifies that the specified value is greater than or equal to a minimum value and less than - or equal to a maximum value and throws an exception if it is not. - - The target value, which should be validated. - The minimum value. - The maximum value. - The name of the parameter that is to be checked. - - is less than the minimum value of greater than the maximum value. - - - - - Ensures that the specified value is less than a maximum value. - - The target value, which should be validated. - The maximum value. - The name of the parameter that is to be checked. - - is greater than the maximum value. - - - - - Verifies that the specified value is less than or equal to a maximum value - and throws an exception if it is not. - - The target value, which should be validated. - The maximum value. - The name of the parameter that is to be checked. - - is greater than the maximum value. - - - - - Verifies that the specified value is greater than a minimum value - and throws an exception if it is not. - - The target value, which should be validated. - The minimum value. - The name of the parameter that is to be checked. - - is less than the minimum value. - - - - - Verifies that the specified value is greater than or equal to a minimum value - and throws an exception if it is not. - - The target value, which should be validated. - The minimum value. - The name of the parameter that is to be checked. - - is less than the minimum value. - - - - - Verifies that the specified value is greater than or equal to a minimum value and less than - or equal to a maximum value and throws an exception if it is not. - - The target value, which should be validated. - The minimum value. - The maximum value. - The name of the parameter that is to be checked. - - is less than the minimum value of greater than the maximum value. - - - - - Ensures that the specified value is less than a maximum value. - - The target value, which should be validated. - The maximum value. - The name of the parameter that is to be checked. - - is greater than the maximum value. - - - - - Verifies that the specified value is less than or equal to a maximum value - and throws an exception if it is not. - - The target value, which should be validated. - The maximum value. - The name of the parameter that is to be checked. - - is greater than the maximum value. - - - - - Verifies that the specified value is greater than a minimum value - and throws an exception if it is not. - - The target value, which should be validated. - The minimum value. - The name of the parameter that is to be checked. - - is less than the minimum value. - - - - - Verifies that the specified value is greater than or equal to a minimum value - and throws an exception if it is not. - - The target value, which should be validated. - The minimum value. - The name of the parameter that is to be checked. - - is less than the minimum value. - - - - - Verifies that the specified value is greater than or equal to a minimum value and less than - or equal to a maximum value and throws an exception if it is not. - - The target value, which should be validated. - The minimum value. - The maximum value. - The name of the parameter that is to be checked. - - is less than the minimum value of greater than the maximum value. - - - - - Ensures that the specified value is less than a maximum value. - - The target value, which should be validated. - The maximum value. - The name of the parameter that is to be checked. - - is greater than the maximum value. - - - - - Verifies that the specified value is less than or equal to a maximum value - and throws an exception if it is not. - - The target value, which should be validated. - The maximum value. - The name of the parameter that is to be checked. - - is greater than the maximum value. - - - - - Verifies that the specified value is greater than a minimum value - and throws an exception if it is not. - - The target value, which should be validated. - The minimum value. - The name of the parameter that is to be checked. - - is less than the minimum value. - - - - - Verifies that the specified value is greater than or equal to a minimum value - and throws an exception if it is not. - - The target value, which should be validated. - The minimum value. - The name of the parameter that is to be checked. - - is less than the minimum value. - - - - - Verifies that the specified value is greater than or equal to a minimum value and less than - or equal to a maximum value and throws an exception if it is not. - - The target value, which should be validated. - The minimum value. - The maximum value. - The name of the parameter that is to be checked. - - is less than the minimum value of greater than the maximum value. - - - - - Ensures that the specified value is less than a maximum value. - - The target value, which should be validated. - The maximum value. - The name of the parameter that is to be checked. - - is greater than the maximum value. - - - - - Verifies that the specified value is less than or equal to a maximum value - and throws an exception if it is not. - - The target value, which should be validated. - The maximum value. - The name of the parameter that is to be checked. - - is greater than the maximum value. - - - - - Verifies that the specified value is greater than a minimum value - and throws an exception if it is not. - - The target value, which should be validated. - The minimum value. - The name of the parameter that is to be checked. - - is less than the minimum value. - - - - - Verifies that the specified value is greater than or equal to a minimum value - and throws an exception if it is not. - - The target value, which should be validated. - The minimum value. - The name of the parameter that is to be checked. - - is less than the minimum value. - - - - - Verifies that the specified value is greater than or equal to a minimum value and less than - or equal to a maximum value and throws an exception if it is not. - - The target value, which should be validated. - The minimum value. - The maximum value. - The name of the parameter that is to be checked. - - is less than the minimum value of greater than the maximum value. - - - - - Ensures that the specified value is less than a maximum value. - - The target value, which should be validated. - The maximum value. - The name of the parameter that is to be checked. - - is greater than the maximum value. - - - - - Verifies that the specified value is less than or equal to a maximum value - and throws an exception if it is not. - - The target value, which should be validated. - The maximum value. - The name of the parameter that is to be checked. - - is greater than the maximum value. - - - - - Verifies that the specified value is greater than a minimum value - and throws an exception if it is not. - - The target value, which should be validated. - The minimum value. - The name of the parameter that is to be checked. - - is less than the minimum value. - - - - - Verifies that the specified value is greater than or equal to a minimum value - and throws an exception if it is not. - - The target value, which should be validated. - The minimum value. - The name of the parameter that is to be checked. - - is less than the minimum value. - - - - - Verifies that the specified value is greater than or equal to a minimum value and less than - or equal to a maximum value and throws an exception if it is not. - - The target value, which should be validated. - The minimum value. - The maximum value. - The name of the parameter that is to be checked. - - is less than the minimum value of greater than the maximum value. - - - - - Helper methods to throw exceptions - - - - - Throws an when fails. - - - - - Throws an when fails. - - - - - Throws an when fails. - - - - - Throws an when fails. - - - - - Throws an when fails. - - - - - Throws an when fails. - - - - - Throws an when fails. - - - - - Throws an when fails. - - - - - Throws a new . - - The message to include in the exception. - The argument name. - Thrown with and . - - - - Throws a new . - - The argument name. - The message to include in the exception. - Thrown with and . - - - - Throws a new . - - The argument name. - The message to include in the exception. - Thrown with and . - - - - Provides single-precision floating point constants and static methods for trigonometric, logarithmic, and other common mathematical functions. - - MathF emulation on platforms that don't support it natively. - - - - Represents the ratio of the circumference of a circle to its diameter, specified by the constant, π. - - - - - Returns the absolute value of a single-precision floating-point number. - - - A number that is greater than or equal to , but less than or equal to . - - - A single-precision floating-point number, x, such that 0 ≤ x ≤. - - - - - Returns the angle whose tangent is the quotient of two specified numbers. - - The y coordinate of a point. - The x coordinate of a point. - - An angle, θ, measured in radians, such that -π≤θ≤π, and tan(θ) = y / x, where - (x, y) is a point in the Cartesian plane. Observe the following: For (x, y) in - quadrant 1, 0 < θ < π/2.For (x, y) in quadrant 2, π/2 < θ≤π.For (x, y) in quadrant - 3, -π < θ < -π/2.For (x, y) in quadrant 4, -π/2 < θ < 0.For points on the boundaries - of the quadrants, the return value is the following:If y is 0 and x is not negative, - θ = 0.If y is 0 and x is negative, θ = π.If y is positive and x is 0, θ = π/2.If - y is negative and x is 0, θ = -π/2.If y is 0 and x is 0, θ = 0. If x or y is - , or if x and y are either or - , the method returns . - - - - - Returns the smallest integral value that is greater than or equal to the specified single-precision floating-point number. - - A single-precision floating-point number. - - The smallest integral value that is greater than or equal to . - If is equal to , , - or , that value is returned. - Note that this method returns a instead of an integral type. - - - - - Returns the cosine of the specified angle. - - An angle, measured in radians. - - The cosine of . If is equal to , , - or , this method returns . - - - - - Returns e raised to the specified power. - - A number specifying a power. - - The number e raised to the power . - If equals or , that value is returned. - If equals , 0 is returned. - - - - - Returns the largest integer less than or equal to the specified single-precision floating-point number. - - A single-precision floating-point number. - - The largest integer less than or equal to . - If is equal to , , - or , that value is returned. - - - - - Returns the larger of two single-precision floating-point numbers. - - The first of two single-precision floating-point numbers to compare. - The second of two single-precision floating-point numbers to compare. - - Parameter or , whichever is larger. - If , or , or both and are - equal to , is returned. - - - - - Returns the smaller of two single-precision floating-point numbers. - - The first of two single-precision floating-point numbers to compare. - The second of two single-precision floating-point numbers to compare. - - Parameter or , whichever is smaller. - If , , or both and are equal - to , is returned. - - - - - Returns a specified number raised to the specified power. - - A single-precision floating-point number to be raised to a power. - A single-precision floating-point number that specifies a power. - The number raised to the power . - - - - Rounds a single-precision floating-point value to the nearest integral value. - - A single-precision floating-point number to be rounded. - - The integer nearest . - If the fractional component of is halfway between two integers, one of which is even and the other odd, then the even number is returned. - Note that this method returns a instead of an integral type. - - - - - Rounds a single-precision floating-point value to the nearest integer. - A parameter specifies how to round the value if it is midway between two numbers. - - A single-precision floating-point number to be rounded. - Specification for how to round if it is midway between two other numbers. - - The integer nearest . If is halfway between two integers, one of which is even - and the other odd, then determines which of the two is returned. - Note that this method returns a instead of an integral type. - - - is not a valid value of . - - - - Returns the sine of the specified angle. - - An angle, measured in radians. - - The sine of . - If is equal to , , - or , this method returns . - - - - - Returns the square root of a specified number. - - The number whose square root is to be found. - - One of the values in the following table. - parameter Return value Zero or positive The positive square root of . - Negative Equals - Equals - . - - - - diff --git a/Assets/Raindrop/Core/IMTextManager.cs b/Assets/Raindrop/Core/IMTextManager.cs index c75c140..329c1c7 100644 --- a/Assets/Raindrop/Core/IMTextManager.cs +++ b/Assets/Raindrop/Core/IMTextManager.cs @@ -31,7 +31,6 @@ using Newtonsoft.Json; //using System.Web.Script.Serialization; using System.Collections.Generic; using UnityEngine; -using Color = SixLabors.ImageSharp.Color; namespace Raindrop { diff --git a/Assets/Raindrop/Core/Settings.cs b/Assets/Raindrop/Core/Settings.cs index eac5c8e..d5c7439 100644 --- a/Assets/Raindrop/Core/Settings.cs +++ b/Assets/Raindrop/Core/Settings.cs @@ -39,8 +39,6 @@ using OpenMetaverse.StructuredData; //using System.Web.Script.Serialization; using Newtonsoft.Json; using System.ComponentModel; -using SixLabors.ImageSharp; -using Color = SixLabors.ImageSharp.Color; using Formatting = System.Xml.Formatting; //using Font = Catnip.Drawing.Font; using Logger = OpenMetaverse.Logger; @@ -163,11 +161,6 @@ namespace Raindrop //[JsonIgnore] //public Font Font; - [JsonIgnore] - public Color ForeColor; - - [JsonIgnore] - public Color BackColor; public String Name; diff --git a/Assets/Raindrop/Disk/ReadWrite.cs b/Assets/Raindrop/Disk/ReadWrite.cs index cd49daf..46037a1 100644 --- a/Assets/Raindrop/Disk/ReadWrite.cs +++ b/Assets/Raindrop/Disk/ReadWrite.cs @@ -1,5 +1,4 @@ -using SixLabors.ImageSharp; -using System; +using System; using System.Collections.Generic; using System.IO; using System.Linq; @@ -77,12 +76,6 @@ namespace Raindrop.Disk - public static bool SaveTextureToFile(Image image) - { - - //image.Save(outputStream, format); - return true; - } } } diff --git a/Assets/Raindrop/Imaging.cs b/Assets/Raindrop/Imaging.cs index d2693ef..233b0f3 100644 --- a/Assets/Raindrop/Imaging.cs +++ b/Assets/Raindrop/Imaging.cs @@ -4,16 +4,5 @@ namespace Raindrop { static public class Imaging { - public static Texture2D LoadT2DWithoutMipMaps(byte[] thebytes) - { - var texture = new Texture2D(1, 1, TextureFormat.ARGB32, false); // impt there is a jobs bug here - var loaderSettings = AsyncImageLoader.LoaderSettings.Default; - loaderSettings.generateMipmap = false; // impt there is a bug here - - // Use hacky LoaderSettings - var loadSuccess = AsyncImageLoader.LoadImage(texture, thebytes, loaderSettings); - - return texture; - } } } \ No newline at end of file diff --git a/Assets/Raindrop/Render/TerrainSplat.cs b/Assets/Raindrop/Render/TerrainSplat.cs index 6578916..3bc5a6d 100644 --- a/Assets/Raindrop/Render/TerrainSplat.cs +++ b/Assets/Raindrop/Render/TerrainSplat.cs @@ -386,7 +386,7 @@ namespace Raindrop.Rendering if (state == TextureRequestState.Finished && assetTexture?.AssetData != null) { Texture2D img; - img = Imaging.LoadT2DWithoutMipMaps(assetTexture.AssetData); + img = T2D.LoadT2DWithoutMipMaps(assetTexture.AssetData); detailTexture[i] = (Texture2D)img; } textureDone.Set(); diff --git a/Assets/Tests/ImagingTests/ImagingTests.cs b/Assets/Tests/ImagingTests/ImagingTests.cs index 6bd0297..2996ff6 100644 --- a/Assets/Tests/ImagingTests/ImagingTests.cs +++ b/Assets/Tests/ImagingTests/ImagingTests.cs @@ -3,6 +3,7 @@ using System.Collections; using System.Collections.Generic; using System.IO; using NUnit.Framework; +using OpenMetaverse.Imaging; using UnityEditor; using UnityEngine; using UnityEngine.TestTools; @@ -46,11 +47,12 @@ namespace Raindrop.Tests.ImagingTests [Test] public void readBytes_ImagePath() { - Assert.True(BetterStreamingAssets.FileExists(_inputImageSubPath)); + BetterStreamingAssets.Initialize(); //fuck, this is easy to forget. + Assert.True(BetterStreamingAssets.FileExists(_inputImageSubPath), "SA file not exist : \n " + _inputImageSubPath); byte[] thebytes = BetterStreamingAssets.ReadAllBytes(_inputImageSubPath); - Assert.True(thebytes.Length > 0); + Assert.True(thebytes.Length > 0, "File is empty size"); } //can read and decode the jp2 from streamingassets. then save to local caching directory. @@ -67,7 +69,7 @@ namespace Raindrop.Tests.ImagingTests Assert.True(thebytes.Length > 0); - var texture = Raindrop.Imaging.LoadT2DWithoutMipMaps(thebytes); + var texture = T2D.LoadT2DWithoutMipMaps(thebytes); Assert.True(texture.height > 5); //todo so arbitrary