diff --git a/All Samples.sln b/All Samples.sln
index a3b568d..e9d61cb 100644
--- a/All Samples.sln
+++ b/All Samples.sln
@@ -9,10 +9,16 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PDFContentExtractText", "Sa
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CreatePDFFormField", "Samples\PDF Acroform\CreatePDFFormField\CreatePDFFormField.csproj", "{60C87E1C-841D-439D-BB52-EF41B3FE8E5F}"
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AdjustContrastForRasterImage", "Samples\Image Processing\AdjustContrastForRasterImage\AdjustContrastForRasterImage.csproj", "{60D98B51-220E-40D7-902E-3D2ECED52797}"
+EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CropAndResizeRasterImage", "Samples\Image Processing\CropAndResizeRasterImage\CropAndResizeRasterImage.csproj", "{0E25B21E-2BAE-41AB-A9B7-1ABC28A9AE93}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DespeckleAndDeskewRasterImage", "Samples\Image Processing\DespeckleAndDeskewRasterImage\DespeckleAndDeskewRasterImage.csproj", "{8A3D399A-126B-428D-87CE-3EFA41145764}"
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ErodeAndDilateRasterImage", "Samples\Image Processing\ErodeAndDilateRasterImage\ErodeAndDilateRasterImage.csproj", "{86873757-FF9E-4248-AA1D-416479377425}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EqualizeContrastForRasterImage", "Samples\Image Processing\EqualizeContrastForRasterImage\EqualizeContrastForRasterImage.csproj", "{D4725703-F3D5-4DCB-BDBD-E13CC1D41758}"
+EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ImageCleanup", "Samples\Image Processing\ImageCleanup\ImageCleanup.csproj", "{4F34C6F3-BFE9-4226-BFA5-60B0B7F89E2C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AddImageToPDFAsAPage", "Samples\PDF and JPEG\AddImageToPDFAsAPage\AddImageToPDFAsAPage.csproj", "{A092B2E6-81A0-47F6-8C39-EE485E67F8F8}"
@@ -86,12 +92,59 @@ EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OpenPDFWithXFA", "Samples\PDF XFA\OpenPDFWithXFA\OpenPDFWithXFA.csproj", "{12AE0A61-6DAB-4D39-9B38-98A86B80F794}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CompressUsingOptions", "Samples\Image\CompressUsingOptions\CompressUsingOptions.csproj", "{1C813E65-1C83-404E-A152-D2755BFF3684}"
+EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FlattenPDFFormFields", "Samples\PDF Acroform\FlattenPDFFormFields\FlattenPDFFormFields.csproj", "{A02DF81C-094E-4299-8603-119B2D90A719}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ReadPDFFormFields", "Samples\PDF Acroform\ReadPDFFormFields\ReadPDFFormFields.csproj", "{9CFEA100-7A9E-464A-AE40-04AEA7BCD4DB}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SetPDFFormFields", "Samples\PDF Acroform\SetPDFFormFields\SetPDFFormFields.csproj", "{62E82A08-A5CA-4992-AB7D-E2DFCEE431C1}"
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LoadRawImage", "Samples\Image\LoadRawImage\LoadRawImage.csproj", "{E0870280-163C-49F5-86C6-22EB7F58E8F9}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LoadSinglePDFPage", "Samples\PDF\LoadSinglePDFPage\LoadSinglePDFPage.csproj", "{0228245F-7782-431F-916B-C6131BA009BA}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MetadataSimplifiedAPI", "Samples\Image\MetadataSimplifiedAPI\MetadataSimplifiedAPI.csproj", "{A18AA125-4E19-4AC8-8D51-132CCDDD37A0}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SplitPDFIntoMultiplePDFs", "Samples\PDF\SplitPDFIntoMultiplePDFs\SplitPDFIntoMultiplePDFs.csproj", "{E47F18F4-28AE-4DE6-8330-739D9A5D47E7}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CreateThumbnailImage", "Samples\Image Processing\CreateThumbnailImage\CreateThumbnailImage.csproj", "{8E449F96-627F-4F23-998E-6678A504FF51}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FlipAndRotateRasterImage", "Samples\Image Processing\FlipAndRotateRasterImage\FlipAndRotateRasterImage.csproj", "{7167003A-9075-4DE1-8377-6BC9969AB732}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ConvertPDFToPDFA_2b", "Samples\PDF\ConvertPDFToPDFA_2b\ConvertPDFToPDFA_2b.csproj", "{902F9D9C-911D-4E17-89AC-757CDDF849E4}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ProcessUsingRegionOfInterest", "Samples\Image Processing\ProcessUsingRegionOfInterest\ProcessUsingRegionOfInterest.csproj", "{940964D7-5DEC-4269-8A21-29B87D92B89A}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ProcessUsingRegionOfInterestMask", "Samples\Image Processing\ProcessUsingRegionOfInterestMask\ProcessUsingRegionOfInterestMask.csproj", "{08927F9A-DDEE-4917-8F47-491264FD2A4C}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AddWatermarkToPDFPage", "Samples\PDF\AddWatermarkToPDFPage\AddWatermarkToPDFPage.csproj", "{F8250223-DAEF-456B-98E3-4F6DABEC8382}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SetFilterControlParametersGlobally", "Samples\Image\SetFilterControlParametersGlobally\SetFilterControlParametersGlobally.csproj", "{AC6A0F04-EBCF-4AB7-B33F-C0C8B8E911F1}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LoadPDFSaveWithFlags", "Samples\PDF\LoadPDFSaveWithFlags\LoadPDFSaveWithFlags.csproj", "{D1C75428-3309-4181-B317-9DC3409C246D}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LoadingWithLoadOptionsAndSaving", "Samples\Image\LoadingWithLoadOptionsAndSaving\LoadingWithLoadOptionsAndSaving.csproj", "{39091302-4BB1-41C5-BF21-F93FF21D7240}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AddingWidgets", "Samples\PDF Acroform\AddingWidgets\AddingWidgets.csproj", "{142F3D0E-6CC3-4506-B45F-648A86D556F4}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PDFFileToMultipageTIFFAtHighResolution", "Samples\PDF\PDFFileToMultipageTIFFAtHighResolution\PDFFileToMultipageTIFFAtHighResolution.csproj", "{FFD859DC-059A-459F-B0C4-3943CBEC325D}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SpecifyColorProfilesLocally", "Samples\Image\SpecifyColorProfilesLocally\SpecifyColorProfilesLocally.csproj", "{E207398B-E21C-439C-935D-C00D3A6C42E5}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SpecifyColorProfilesGlobally", "Samples\Image\SpecifyColorProfilesGlobally\SpecifyColorProfilesGlobally.csproj", "{31FCAA70-8CE7-4B19-8D97-892D473A3800}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SetFilterControlParametersLocally", "Samples\Image\SetFilterControlParametersLocally\SetFilterControlParametersLocally.csproj", "{B875F866-994D-4F6D-8437-A9BD9332A826}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ModifyFieldAppearance", "Samples\PDF Acroform\ModifyFieldAppearance\ModifyFieldAppearance.csproj", "{B4344C90-BDAE-425E-8045-3D8DB504B193}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MetadataSimplifiedAPIUseArraysAndStructures", "Samples\Image\MetadataSimplifiedAPIUseArraysAndStructures\MetadataSimplifiedAPIUseArraysAndStructures.csproj", "{B34E6FB4-31E4-413C-9CCD-62C8CB559269}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ManagePDFMetadata", "Samples\PDF\ManagePDFMetadata\ManagePDFMetadata.csproj", "{3F2E67E2-4985-4138-A6AD-7B2736E22001}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CreateMetadata", "Samples\Image\CreateMetadata\CreateMetadata.csproj", "{54A6CCE9-92FF-41D6-867A-D527BD021128}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SimplifiedMetadataWithNullableFields", "Samples\Image\SimplifiedMetadataWithNullableFields\SimplifiedMetadataWithNullableFields.csproj", "{8CF59239-4949-4B00-B9EA-BF546667F756}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -124,6 +177,14 @@ Global
{60C87E1C-841D-439D-BB52-EF41B3FE8E5F}.Release|Any CPU.Build.0 = Release|x64
{60C87E1C-841D-439D-BB52-EF41B3FE8E5F}.Release|x64.ActiveCfg = Release|x64
{60C87E1C-841D-439D-BB52-EF41B3FE8E5F}.Release|x64.Build.0 = Release|x64
+ {60D98B51-220E-40D7-902E-3D2ECED52797}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {60D98B51-220E-40D7-902E-3D2ECED52797}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {60D98B51-220E-40D7-902E-3D2ECED52797}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {60D98B51-220E-40D7-902E-3D2ECED52797}.Debug|x64.Build.0 = Debug|Any CPU
+ {60D98B51-220E-40D7-902E-3D2ECED52797}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {60D98B51-220E-40D7-902E-3D2ECED52797}.Release|Any CPU.Build.0 = Release|Any CPU
+ {60D98B51-220E-40D7-902E-3D2ECED52797}.Release|x64.ActiveCfg = Release|Any CPU
+ {60D98B51-220E-40D7-902E-3D2ECED52797}.Release|x64.Build.0 = Release|Any CPU
{0E25B21E-2BAE-41AB-A9B7-1ABC28A9AE93}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0E25B21E-2BAE-41AB-A9B7-1ABC28A9AE93}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0E25B21E-2BAE-41AB-A9B7-1ABC28A9AE93}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -140,6 +201,22 @@ Global
{8A3D399A-126B-428D-87CE-3EFA41145764}.Release|Any CPU.Build.0 = Release|Any CPU
{8A3D399A-126B-428D-87CE-3EFA41145764}.Release|x64.ActiveCfg = Release|Any CPU
{8A3D399A-126B-428D-87CE-3EFA41145764}.Release|x64.Build.0 = Release|Any CPU
+ {86873757-FF9E-4248-AA1D-416479377425}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {86873757-FF9E-4248-AA1D-416479377425}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {86873757-FF9E-4248-AA1D-416479377425}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {86873757-FF9E-4248-AA1D-416479377425}.Debug|x64.Build.0 = Debug|Any CPU
+ {86873757-FF9E-4248-AA1D-416479377425}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {86873757-FF9E-4248-AA1D-416479377425}.Release|Any CPU.Build.0 = Release|Any CPU
+ {86873757-FF9E-4248-AA1D-416479377425}.Release|x64.ActiveCfg = Release|Any CPU
+ {86873757-FF9E-4248-AA1D-416479377425}.Release|x64.Build.0 = Release|Any CPU
+ {D4725703-F3D5-4DCB-BDBD-E13CC1D41758}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D4725703-F3D5-4DCB-BDBD-E13CC1D41758}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D4725703-F3D5-4DCB-BDBD-E13CC1D41758}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {D4725703-F3D5-4DCB-BDBD-E13CC1D41758}.Debug|x64.Build.0 = Debug|Any CPU
+ {D4725703-F3D5-4DCB-BDBD-E13CC1D41758}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D4725703-F3D5-4DCB-BDBD-E13CC1D41758}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D4725703-F3D5-4DCB-BDBD-E13CC1D41758}.Release|x64.ActiveCfg = Release|Any CPU
+ {D4725703-F3D5-4DCB-BDBD-E13CC1D41758}.Release|x64.Build.0 = Release|Any CPU
{4F34C6F3-BFE9-4226-BFA5-60B0B7F89E2C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4F34C6F3-BFE9-4226-BFA5-60B0B7F89E2C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4F34C6F3-BFE9-4226-BFA5-60B0B7F89E2C}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -380,6 +457,190 @@ Global
{62E82A08-A5CA-4992-AB7D-E2DFCEE431C1}.Release|Any CPU.Build.0 = Release|x64
{62E82A08-A5CA-4992-AB7D-E2DFCEE431C1}.Release|x64.ActiveCfg = Release|x64
{62E82A08-A5CA-4992-AB7D-E2DFCEE431C1}.Release|x64.Build.0 = Release|x64
+ {E0870280-163C-49F5-86C6-22EB7F58E8F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E0870280-163C-49F5-86C6-22EB7F58E8F9}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E0870280-163C-49F5-86C6-22EB7F58E8F9}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {E0870280-163C-49F5-86C6-22EB7F58E8F9}.Debug|x64.Build.0 = Debug|Any CPU
+ {E0870280-163C-49F5-86C6-22EB7F58E8F9}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E0870280-163C-49F5-86C6-22EB7F58E8F9}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E0870280-163C-49F5-86C6-22EB7F58E8F9}.Release|x64.ActiveCfg = Release|Any CPU
+ {E0870280-163C-49F5-86C6-22EB7F58E8F9}.Release|x64.Build.0 = Release|Any CPU
+ {0228245F-7782-431F-916B-C6131BA009BA}.Debug|Any CPU.ActiveCfg = Debug|x64
+ {0228245F-7782-431F-916B-C6131BA009BA}.Debug|Any CPU.Build.0 = Debug|x64
+ {0228245F-7782-431F-916B-C6131BA009BA}.Debug|x64.ActiveCfg = Debug|x64
+ {0228245F-7782-431F-916B-C6131BA009BA}.Debug|x64.Build.0 = Debug|x64
+ {0228245F-7782-431F-916B-C6131BA009BA}.Release|Any CPU.ActiveCfg = Release|x64
+ {0228245F-7782-431F-916B-C6131BA009BA}.Release|Any CPU.Build.0 = Release|x64
+ {0228245F-7782-431F-916B-C6131BA009BA}.Release|x64.ActiveCfg = Release|x64
+ {0228245F-7782-431F-916B-C6131BA009BA}.Release|x64.Build.0 = Release|x64
+ {A18AA125-4E19-4AC8-8D51-132CCDDD37A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A18AA125-4E19-4AC8-8D51-132CCDDD37A0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A18AA125-4E19-4AC8-8D51-132CCDDD37A0}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {A18AA125-4E19-4AC8-8D51-132CCDDD37A0}.Debug|x64.Build.0 = Debug|Any CPU
+ {A18AA125-4E19-4AC8-8D51-132CCDDD37A0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A18AA125-4E19-4AC8-8D51-132CCDDD37A0}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A18AA125-4E19-4AC8-8D51-132CCDDD37A0}.Release|x64.ActiveCfg = Release|Any CPU
+ {A18AA125-4E19-4AC8-8D51-132CCDDD37A0}.Release|x64.Build.0 = Release|Any CPU
+ {E47F18F4-28AE-4DE6-8330-739D9A5D47E7}.Debug|Any CPU.ActiveCfg = Debug|x64
+ {E47F18F4-28AE-4DE6-8330-739D9A5D47E7}.Debug|Any CPU.Build.0 = Debug|x64
+ {E47F18F4-28AE-4DE6-8330-739D9A5D47E7}.Debug|x64.ActiveCfg = Debug|x64
+ {E47F18F4-28AE-4DE6-8330-739D9A5D47E7}.Debug|x64.Build.0 = Debug|x64
+ {E47F18F4-28AE-4DE6-8330-739D9A5D47E7}.Release|Any CPU.ActiveCfg = Release|x64
+ {E47F18F4-28AE-4DE6-8330-739D9A5D47E7}.Release|Any CPU.Build.0 = Release|x64
+ {E47F18F4-28AE-4DE6-8330-739D9A5D47E7}.Release|x64.ActiveCfg = Release|x64
+ {E47F18F4-28AE-4DE6-8330-739D9A5D47E7}.Release|x64.Build.0 = Release|x64
+ {8E449F96-627F-4F23-998E-6678A504FF51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {8E449F96-627F-4F23-998E-6678A504FF51}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {8E449F96-627F-4F23-998E-6678A504FF51}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {8E449F96-627F-4F23-998E-6678A504FF51}.Debug|x64.Build.0 = Debug|Any CPU
+ {8E449F96-627F-4F23-998E-6678A504FF51}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {8E449F96-627F-4F23-998E-6678A504FF51}.Release|Any CPU.Build.0 = Release|Any CPU
+ {8E449F96-627F-4F23-998E-6678A504FF51}.Release|x64.ActiveCfg = Release|Any CPU
+ {8E449F96-627F-4F23-998E-6678A504FF51}.Release|x64.Build.0 = Release|Any CPU
+ {7167003A-9075-4DE1-8377-6BC9969AB732}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7167003A-9075-4DE1-8377-6BC9969AB732}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7167003A-9075-4DE1-8377-6BC9969AB732}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {7167003A-9075-4DE1-8377-6BC9969AB732}.Debug|x64.Build.0 = Debug|Any CPU
+ {7167003A-9075-4DE1-8377-6BC9969AB732}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7167003A-9075-4DE1-8377-6BC9969AB732}.Release|Any CPU.Build.0 = Release|Any CPU
+ {7167003A-9075-4DE1-8377-6BC9969AB732}.Release|x64.ActiveCfg = Release|Any CPU
+ {7167003A-9075-4DE1-8377-6BC9969AB732}.Release|x64.Build.0 = Release|Any CPU
+ {902F9D9C-911D-4E17-89AC-757CDDF849E4}.Debug|Any CPU.ActiveCfg = Debug|x64
+ {902F9D9C-911D-4E17-89AC-757CDDF849E4}.Debug|Any CPU.Build.0 = Debug|x64
+ {902F9D9C-911D-4E17-89AC-757CDDF849E4}.Debug|x64.ActiveCfg = Debug|x64
+ {902F9D9C-911D-4E17-89AC-757CDDF849E4}.Debug|x64.Build.0 = Debug|x64
+ {902F9D9C-911D-4E17-89AC-757CDDF849E4}.Release|Any CPU.ActiveCfg = Release|x64
+ {902F9D9C-911D-4E17-89AC-757CDDF849E4}.Release|Any CPU.Build.0 = Release|x64
+ {902F9D9C-911D-4E17-89AC-757CDDF849E4}.Release|x64.ActiveCfg = Release|x64
+ {902F9D9C-911D-4E17-89AC-757CDDF849E4}.Release|x64.Build.0 = Release|x64
+ {940964D7-5DEC-4269-8A21-29B87D92B89A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {940964D7-5DEC-4269-8A21-29B87D92B89A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {940964D7-5DEC-4269-8A21-29B87D92B89A}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {940964D7-5DEC-4269-8A21-29B87D92B89A}.Debug|x64.Build.0 = Debug|Any CPU
+ {940964D7-5DEC-4269-8A21-29B87D92B89A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {940964D7-5DEC-4269-8A21-29B87D92B89A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {940964D7-5DEC-4269-8A21-29B87D92B89A}.Release|x64.ActiveCfg = Release|Any CPU
+ {940964D7-5DEC-4269-8A21-29B87D92B89A}.Release|x64.Build.0 = Release|Any CPU
+ {08927F9A-DDEE-4917-8F47-491264FD2A4C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {08927F9A-DDEE-4917-8F47-491264FD2A4C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {08927F9A-DDEE-4917-8F47-491264FD2A4C}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {08927F9A-DDEE-4917-8F47-491264FD2A4C}.Debug|x64.Build.0 = Debug|Any CPU
+ {08927F9A-DDEE-4917-8F47-491264FD2A4C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {08927F9A-DDEE-4917-8F47-491264FD2A4C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {08927F9A-DDEE-4917-8F47-491264FD2A4C}.Release|x64.ActiveCfg = Release|Any CPU
+ {08927F9A-DDEE-4917-8F47-491264FD2A4C}.Release|x64.Build.0 = Release|Any CPU
+ {F8250223-DAEF-456B-98E3-4F6DABEC8382}.Debug|Any CPU.ActiveCfg = Debug|x64
+ {F8250223-DAEF-456B-98E3-4F6DABEC8382}.Debug|Any CPU.Build.0 = Debug|x64
+ {F8250223-DAEF-456B-98E3-4F6DABEC8382}.Debug|x64.ActiveCfg = Debug|x64
+ {F8250223-DAEF-456B-98E3-4F6DABEC8382}.Debug|x64.Build.0 = Debug|x64
+ {F8250223-DAEF-456B-98E3-4F6DABEC8382}.Release|Any CPU.ActiveCfg = Release|x64
+ {F8250223-DAEF-456B-98E3-4F6DABEC8382}.Release|Any CPU.Build.0 = Release|x64
+ {F8250223-DAEF-456B-98E3-4F6DABEC8382}.Release|x64.ActiveCfg = Release|x64
+ {F8250223-DAEF-456B-98E3-4F6DABEC8382}.Release|x64.Build.0 = Release|x64
+ {AC6A0F04-EBCF-4AB7-B33F-C0C8B8E911F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {AC6A0F04-EBCF-4AB7-B33F-C0C8B8E911F1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {AC6A0F04-EBCF-4AB7-B33F-C0C8B8E911F1}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {AC6A0F04-EBCF-4AB7-B33F-C0C8B8E911F1}.Debug|x64.Build.0 = Debug|Any CPU
+ {AC6A0F04-EBCF-4AB7-B33F-C0C8B8E911F1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {AC6A0F04-EBCF-4AB7-B33F-C0C8B8E911F1}.Release|Any CPU.Build.0 = Release|Any CPU
+ {AC6A0F04-EBCF-4AB7-B33F-C0C8B8E911F1}.Release|x64.ActiveCfg = Release|Any CPU
+ {AC6A0F04-EBCF-4AB7-B33F-C0C8B8E911F1}.Release|x64.Build.0 = Release|Any CPU
+ {D1C75428-3309-4181-B317-9DC3409C246D}.Debug|Any CPU.ActiveCfg = Debug|x64
+ {D1C75428-3309-4181-B317-9DC3409C246D}.Debug|Any CPU.Build.0 = Debug|x64
+ {D1C75428-3309-4181-B317-9DC3409C246D}.Debug|x64.ActiveCfg = Debug|x64
+ {D1C75428-3309-4181-B317-9DC3409C246D}.Debug|x64.Build.0 = Debug|x64
+ {D1C75428-3309-4181-B317-9DC3409C246D}.Release|Any CPU.ActiveCfg = Release|x64
+ {D1C75428-3309-4181-B317-9DC3409C246D}.Release|Any CPU.Build.0 = Release|x64
+ {D1C75428-3309-4181-B317-9DC3409C246D}.Release|x64.ActiveCfg = Release|x64
+ {D1C75428-3309-4181-B317-9DC3409C246D}.Release|x64.Build.0 = Release|x64
+ {39091302-4BB1-41C5-BF21-F93FF21D7240}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {39091302-4BB1-41C5-BF21-F93FF21D7240}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {39091302-4BB1-41C5-BF21-F93FF21D7240}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {39091302-4BB1-41C5-BF21-F93FF21D7240}.Debug|x64.Build.0 = Debug|Any CPU
+ {39091302-4BB1-41C5-BF21-F93FF21D7240}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {39091302-4BB1-41C5-BF21-F93FF21D7240}.Release|Any CPU.Build.0 = Release|Any CPU
+ {39091302-4BB1-41C5-BF21-F93FF21D7240}.Release|x64.ActiveCfg = Release|Any CPU
+ {39091302-4BB1-41C5-BF21-F93FF21D7240}.Release|x64.Build.0 = Release|Any CPU
+ {142F3D0E-6CC3-4506-B45F-648A86D556F4}.Debug|Any CPU.ActiveCfg = Debug|x64
+ {142F3D0E-6CC3-4506-B45F-648A86D556F4}.Debug|Any CPU.Build.0 = Debug|x64
+ {142F3D0E-6CC3-4506-B45F-648A86D556F4}.Debug|x64.ActiveCfg = Debug|x64
+ {142F3D0E-6CC3-4506-B45F-648A86D556F4}.Debug|x64.Build.0 = Debug|x64
+ {142F3D0E-6CC3-4506-B45F-648A86D556F4}.Release|Any CPU.ActiveCfg = Release|x64
+ {142F3D0E-6CC3-4506-B45F-648A86D556F4}.Release|Any CPU.Build.0 = Release|x64
+ {142F3D0E-6CC3-4506-B45F-648A86D556F4}.Release|x64.ActiveCfg = Release|x64
+ {142F3D0E-6CC3-4506-B45F-648A86D556F4}.Release|x64.Build.0 = Release|x64
+ {FFD859DC-059A-459F-B0C4-3943CBEC325D}.Debug|Any CPU.ActiveCfg = Debug|x64
+ {FFD859DC-059A-459F-B0C4-3943CBEC325D}.Debug|Any CPU.Build.0 = Debug|x64
+ {FFD859DC-059A-459F-B0C4-3943CBEC325D}.Debug|x64.ActiveCfg = Debug|x64
+ {FFD859DC-059A-459F-B0C4-3943CBEC325D}.Debug|x64.Build.0 = Debug|x64
+ {FFD859DC-059A-459F-B0C4-3943CBEC325D}.Release|Any CPU.ActiveCfg = Release|x64
+ {FFD859DC-059A-459F-B0C4-3943CBEC325D}.Release|Any CPU.Build.0 = Release|x64
+ {FFD859DC-059A-459F-B0C4-3943CBEC325D}.Release|x64.ActiveCfg = Release|x64
+ {FFD859DC-059A-459F-B0C4-3943CBEC325D}.Release|x64.Build.0 = Release|x64
+ {E207398B-E21C-439C-935D-C00D3A6C42E5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E207398B-E21C-439C-935D-C00D3A6C42E5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E207398B-E21C-439C-935D-C00D3A6C42E5}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {E207398B-E21C-439C-935D-C00D3A6C42E5}.Debug|x64.Build.0 = Debug|Any CPU
+ {E207398B-E21C-439C-935D-C00D3A6C42E5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E207398B-E21C-439C-935D-C00D3A6C42E5}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E207398B-E21C-439C-935D-C00D3A6C42E5}.Release|x64.ActiveCfg = Release|Any CPU
+ {E207398B-E21C-439C-935D-C00D3A6C42E5}.Release|x64.Build.0 = Release|Any CPU
+ {31FCAA70-8CE7-4B19-8D97-892D473A3800}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {31FCAA70-8CE7-4B19-8D97-892D473A3800}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {31FCAA70-8CE7-4B19-8D97-892D473A3800}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {31FCAA70-8CE7-4B19-8D97-892D473A3800}.Debug|x64.Build.0 = Debug|Any CPU
+ {31FCAA70-8CE7-4B19-8D97-892D473A3800}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {31FCAA70-8CE7-4B19-8D97-892D473A3800}.Release|Any CPU.Build.0 = Release|Any CPU
+ {31FCAA70-8CE7-4B19-8D97-892D473A3800}.Release|x64.ActiveCfg = Release|Any CPU
+ {31FCAA70-8CE7-4B19-8D97-892D473A3800}.Release|x64.Build.0 = Release|Any CPU
+ {B875F866-994D-4F6D-8437-A9BD9332A826}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B875F866-994D-4F6D-8437-A9BD9332A826}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B875F866-994D-4F6D-8437-A9BD9332A826}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {B875F866-994D-4F6D-8437-A9BD9332A826}.Debug|x64.Build.0 = Debug|Any CPU
+ {B875F866-994D-4F6D-8437-A9BD9332A826}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B875F866-994D-4F6D-8437-A9BD9332A826}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B875F866-994D-4F6D-8437-A9BD9332A826}.Release|x64.ActiveCfg = Release|Any CPU
+ {B875F866-994D-4F6D-8437-A9BD9332A826}.Release|x64.Build.0 = Release|Any CPU
+ {B4344C90-BDAE-425E-8045-3D8DB504B193}.Debug|Any CPU.ActiveCfg = Debug|x64
+ {B4344C90-BDAE-425E-8045-3D8DB504B193}.Debug|Any CPU.Build.0 = Debug|x64
+ {B4344C90-BDAE-425E-8045-3D8DB504B193}.Debug|x64.ActiveCfg = Debug|x64
+ {B4344C90-BDAE-425E-8045-3D8DB504B193}.Debug|x64.Build.0 = Debug|x64
+ {B4344C90-BDAE-425E-8045-3D8DB504B193}.Release|Any CPU.ActiveCfg = Release|x64
+ {B4344C90-BDAE-425E-8045-3D8DB504B193}.Release|Any CPU.Build.0 = Release|x64
+ {B4344C90-BDAE-425E-8045-3D8DB504B193}.Release|x64.ActiveCfg = Release|x64
+ {B4344C90-BDAE-425E-8045-3D8DB504B193}.Release|x64.Build.0 = Release|x64
+ {B34E6FB4-31E4-413C-9CCD-62C8CB559269}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B34E6FB4-31E4-413C-9CCD-62C8CB559269}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B34E6FB4-31E4-413C-9CCD-62C8CB559269}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {B34E6FB4-31E4-413C-9CCD-62C8CB559269}.Debug|x64.Build.0 = Debug|Any CPU
+ {B34E6FB4-31E4-413C-9CCD-62C8CB559269}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B34E6FB4-31E4-413C-9CCD-62C8CB559269}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B34E6FB4-31E4-413C-9CCD-62C8CB559269}.Release|x64.ActiveCfg = Release|Any CPU
+ {B34E6FB4-31E4-413C-9CCD-62C8CB559269}.Release|x64.Build.0 = Release|Any CPU
+ {3F2E67E2-4985-4138-A6AD-7B2736E22001}.Debug|Any CPU.ActiveCfg = Debug|x64
+ {3F2E67E2-4985-4138-A6AD-7B2736E22001}.Debug|Any CPU.Build.0 = Debug|x64
+ {3F2E67E2-4985-4138-A6AD-7B2736E22001}.Debug|x64.ActiveCfg = Debug|x64
+ {3F2E67E2-4985-4138-A6AD-7B2736E22001}.Debug|x64.Build.0 = Debug|x64
+ {3F2E67E2-4985-4138-A6AD-7B2736E22001}.Release|Any CPU.ActiveCfg = Release|x64
+ {3F2E67E2-4985-4138-A6AD-7B2736E22001}.Release|Any CPU.Build.0 = Release|x64
+ {3F2E67E2-4985-4138-A6AD-7B2736E22001}.Release|x64.ActiveCfg = Release|x64
+ {3F2E67E2-4985-4138-A6AD-7B2736E22001}.Release|x64.Build.0 = Release|x64
+ {54A6CCE9-92FF-41D6-867A-D527BD021128}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {54A6CCE9-92FF-41D6-867A-D527BD021128}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {54A6CCE9-92FF-41D6-867A-D527BD021128}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {54A6CCE9-92FF-41D6-867A-D527BD021128}.Debug|x64.Build.0 = Debug|Any CPU
+ {54A6CCE9-92FF-41D6-867A-D527BD021128}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {54A6CCE9-92FF-41D6-867A-D527BD021128}.Release|Any CPU.Build.0 = Release|Any CPU
+ {54A6CCE9-92FF-41D6-867A-D527BD021128}.Release|x64.ActiveCfg = Release|Any CPU
+ {54A6CCE9-92FF-41D6-867A-D527BD021128}.Release|x64.Build.0 = Release|Any CPU
+ {8CF59239-4949-4B00-B9EA-BF546667F756}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {8CF59239-4949-4B00-B9EA-BF546667F756}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {8CF59239-4949-4B00-B9EA-BF546667F756}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {8CF59239-4949-4B00-B9EA-BF546667F756}.Debug|x64.Build.0 = Debug|Any CPU
+ {8CF59239-4949-4B00-B9EA-BF546667F756}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {8CF59239-4949-4B00-B9EA-BF546667F756}.Release|Any CPU.Build.0 = Release|Any CPU
+ {8CF59239-4949-4B00-B9EA-BF546667F756}.Release|x64.ActiveCfg = Release|Any CPU
+ {8CF59239-4949-4B00-B9EA-BF546667F756}.Release|x64.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -388,8 +649,11 @@ Global
{7EBFD9C2-68D5-48B9-B101-B5260DCAEC78} = {66C85CA6-B5A8-43A8-BD9A-DFF62604098C}
{7EFBDEF8-306D-49D7-BBFB-F41995AED2F8} = {01A4DAE6-A3F5-4D41-BAEB-FDE9EBB94180}
{60C87E1C-841D-439D-BB52-EF41B3FE8E5F} = {A012D70C-CFF5-4A33-88DE-6A6C9DA1CF62}
+ {60D98B51-220E-40D7-902E-3D2ECED52797} = {DCCDFC3D-3285-458D-B711-8B614918BE88}
{0E25B21E-2BAE-41AB-A9B7-1ABC28A9AE93} = {DCCDFC3D-3285-458D-B711-8B614918BE88}
{8A3D399A-126B-428D-87CE-3EFA41145764} = {DCCDFC3D-3285-458D-B711-8B614918BE88}
+ {86873757-FF9E-4248-AA1D-416479377425} = {DCCDFC3D-3285-458D-B711-8B614918BE88}
+ {D4725703-F3D5-4DCB-BDBD-E13CC1D41758} = {DCCDFC3D-3285-458D-B711-8B614918BE88}
{4F34C6F3-BFE9-4226-BFA5-60B0B7F89E2C} = {DCCDFC3D-3285-458D-B711-8B614918BE88}
{A092B2E6-81A0-47F6-8C39-EE485E67F8F8} = {B9B4AE17-8160-4FFB-A28F-1FCC5BB5B438}
{7CDD1932-0788-4390-AF20-A53E814D39D2} = {B9B4AE17-8160-4FFB-A28F-1FCC5BB5B438}
@@ -420,6 +684,29 @@ Global
{A02DF81C-094E-4299-8603-119B2D90A719} = {A012D70C-CFF5-4A33-88DE-6A6C9DA1CF62}
{9CFEA100-7A9E-464A-AE40-04AEA7BCD4DB} = {A012D70C-CFF5-4A33-88DE-6A6C9DA1CF62}
{62E82A08-A5CA-4992-AB7D-E2DFCEE431C1} = {A012D70C-CFF5-4A33-88DE-6A6C9DA1CF62}
+ {E0870280-163C-49F5-86C6-22EB7F58E8F9} = {66C85CA6-B5A8-43A8-BD9A-DFF62604098C}
+ {0228245F-7782-431F-916B-C6131BA009BA} = {01A4DAE6-A3F5-4D41-BAEB-FDE9EBB94180}
+ {A18AA125-4E19-4AC8-8D51-132CCDDD37A0} = {66C85CA6-B5A8-43A8-BD9A-DFF62604098C}
+ {E47F18F4-28AE-4DE6-8330-739D9A5D47E7} = {01A4DAE6-A3F5-4D41-BAEB-FDE9EBB94180}
+ {8E449F96-627F-4F23-998E-6678A504FF51} = {DCCDFC3D-3285-458D-B711-8B614918BE88}
+ {7167003A-9075-4DE1-8377-6BC9969AB732} = {DCCDFC3D-3285-458D-B711-8B614918BE88}
+ {902F9D9C-911D-4E17-89AC-757CDDF849E4} = {01A4DAE6-A3F5-4D41-BAEB-FDE9EBB94180}
+ {940964D7-5DEC-4269-8A21-29B87D92B89A} = {DCCDFC3D-3285-458D-B711-8B614918BE88}
+ {08927F9A-DDEE-4917-8F47-491264FD2A4C} = {DCCDFC3D-3285-458D-B711-8B614918BE88}
+ {F8250223-DAEF-456B-98E3-4F6DABEC8382} = {01A4DAE6-A3F5-4D41-BAEB-FDE9EBB94180}
+ {AC6A0F04-EBCF-4AB7-B33F-C0C8B8E911F1} = {66C85CA6-B5A8-43A8-BD9A-DFF62604098C}
+ {D1C75428-3309-4181-B317-9DC3409C246D} = {01A4DAE6-A3F5-4D41-BAEB-FDE9EBB94180}
+ {39091302-4BB1-41C5-BF21-F93FF21D7240} = {66C85CA6-B5A8-43A8-BD9A-DFF62604098C}
+ {142F3D0E-6CC3-4506-B45F-648A86D556F4} = {A012D70C-CFF5-4A33-88DE-6A6C9DA1CF62}
+ {FFD859DC-059A-459F-B0C4-3943CBEC325D} = {01A4DAE6-A3F5-4D41-BAEB-FDE9EBB94180}
+ {E207398B-E21C-439C-935D-C00D3A6C42E5} = {66C85CA6-B5A8-43A8-BD9A-DFF62604098C}
+ {31FCAA70-8CE7-4B19-8D97-892D473A3800} = {66C85CA6-B5A8-43A8-BD9A-DFF62604098C}
+ {B875F866-994D-4F6D-8437-A9BD9332A826} = {66C85CA6-B5A8-43A8-BD9A-DFF62604098C}
+ {B4344C90-BDAE-425E-8045-3D8DB504B193} = {A012D70C-CFF5-4A33-88DE-6A6C9DA1CF62}
+ {B34E6FB4-31E4-413C-9CCD-62C8CB559269} = {66C85CA6-B5A8-43A8-BD9A-DFF62604098C}
+ {3F2E67E2-4985-4138-A6AD-7B2736E22001} = {01A4DAE6-A3F5-4D41-BAEB-FDE9EBB94180}
+ {54A6CCE9-92FF-41D6-867A-D527BD021128} = {66C85CA6-B5A8-43A8-BD9A-DFF62604098C}
+ {8CF59239-4949-4B00-B9EA-BF546667F756} = {66C85CA6-B5A8-43A8-BD9A-DFF62604098C}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {7D2A8375-0236-4D91-A979-5D0F909830C2}
diff --git a/CHANGELOG.md b/CHANGELOG.md
deleted file mode 100644
index af7c61e..0000000
--- a/CHANGELOG.md
+++ /dev/null
@@ -1,30 +0,0 @@
-# CHANGELOG
-
-## 2022-10-25
-
-- Added load encrypted PDF sample
-
-## 2022-10-21
-
-- Added detect image format sample
-
-## 2022-09-21
-
-- Added multi-page raster image to SVG sample
-
-## 2022-09-19
-
-- Added image cleanup sample
-
-## 2022-09-09
-
-- Added Email and Office document samples
-- Added solutions, projects, and support for ImageGear v26.1
-
-## 2022-02-11
-
-- Added solutions, projects, and support for ImageGear v26.0
-
-## 2021-08-17
-
-- First release
diff --git a/LICENSE b/LICENSE
index 6689fbc..992bd3e 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,6 @@
MIT License
-Copyright © 2019-2022 Accusoft Corporation
+Copyright © 2019-2023 Accusoft Corporation
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
diff --git a/README.md b/README.md
index 7c607ee..e75425f 100644
--- a/README.md
+++ b/README.md
@@ -25,17 +25,34 @@ ImageGear .NET supports the most commonly used image, graphic, and document form
| Category | Sample | Description |
| :-------------------------- | :--------------------------: | :---------------------------------------------------------------------------------------- |
| [***General Imaging Samples***](Samples/Image) | | These samples demonstrate general raster image functionality in ImageGear .NET. |
+| | [CompressUsingOptions](Samples/Image/CompressUsingOptions) | Raster image is saved to a JPEG file using manually set conversion and compression options. |
+| | [CreateMetadata](Samples/Image/CreateMetadata) | This sample uses ImageGear Simplified Metadata API to add IPTC Photo Metadata fields to an existing JPEG image. |
| | [DetectImageFormat](Samples/Image/DetectImageFormat) | After a stream is loaded, ImageGear provides functionality to automatically detect an image's format. |
| | [LoadingAndSaving](Samples/Image/LoadingAndSaving) | This sample demonstrates two of the most basic raster functions of ImageGear, loading and saving an image using the LoadPage and SavePage functions. |
+| | [LoadingWithLoadOptionsAndSaving](Samples/Image/LoadingWithLoadOptionsAndSaving) | This sample demonstrates loading an image using basic LoadOptions and then saving the image using the SavePage functions. |
+| | [LoadRawImage](Samples/Image/LoadRawImage) | When opening headerless image content, ImageGear can open images without headers as long as a complete description of the image data is provided. |
| | [MetadataGeneralAPI](Samples/Image/MetadataGeneralAPI) | After an image is loaded, ImageGear provides functionality to access both document and page level metadata. |
-| | [CompressUsingOptions](Samples/Image/CompressUsingOptions) | Raster image is saved to a JPEG file using manually set conversion and compression options. |
+| | [MetadataSimplifiedAPI](Samples/Image/MetadataSimplifiedAPI) | After an image is loaded, ImageGear provides a simplified API to access and update both document and page level metadata. |
+| | [MetadataSimplifiedAPIUseArraysAndStructures](Samples/Image/MetadataSimplifiedAPIUseArraysAndStructures) | This sample shows recommended techniques when working with the Simplified Metadata API, using XMP.DublinCore.Subject as an example. |
+| | [SetFilterControlParametersGlobally](Samples/Image/SetFilterControlParametersGlobally) | This sample shows how to use global Filter Control Parameters to save a JPEG file with lossless compression instead of lossy compression. |
+| | [SetFilterControlParametersLocally](Samples/Image/SetFilterControlParametersLocally) | This sample shows how to use local Filter Control Parameters to customize how ImageGear reads and writes supported file formats without affecting other threads. |
+| | [SimplifiedMetadataWithNullableFields](Samples/Image/SimplifiedMetadataWithNullableFields) | After an image is loaded, ImageGear provides the ability to access the metadata without knowing the tree or if the information exists. |
+| | [SpecifyColorProfilesGlobally](Samples/Image/SpecifyColorProfilesGlobally) | This sample shows how to implicitly use ICM color profiles to convert the color space in a JPEG image from RGB to CMYK. |
+| | [SpecifyColorProfilesLocally](Samples/Image/SpecifyColorProfilesLocally) | This sample shows how to explicitly use ICM color profiles to convert the color space in a JPEG image from RGB to CMYK. |
| [***Image Conversion Samples***](Samples/Image%20Conversion) | | These samples demonstrate how to convert between raster image formats using ImageGear .NET. |
| | [ConvertRasterImageFormat](Samples/Image%20Conversion/ConvertRasterImageFormat) | After an ImGearPage has been retrieved, it can then be saved as any supported raster image format using ImGearFileFormats.SavePage(). |
| | [ConvertMultipageRasterImageToSVG](Samples/Image%20Conversion/ConvertMultipageRasterImageToSVG) | After a raster ImGearDocument has been retrieved, it can then be saved to SVG using ImGearFileFormats.SaveDocument(). |
| [***Image Processing Samples***](Samples/Image%20Processing) | | These samples demonstrate select image processing capabilities of ImageGear .NET. |
+| | [AdjustContrastForRasterImage](Samples/Image%20Processing/AdjustContrastForRasterImage) | This sample demonstrates how to manually adjust the contrast, brightness, and gamma of a raster image. |
+| | [CreateThumbnailImage](Samples/Image%20Processing/CreateThumbnailImage) | After an image is loaded, use ImGearProcessing.CreateThumbnail() to create a thumbnail with specific dimensions. Interpolation options depend on the color space and bit depth of the image. |
| | [CropAndResizeRasterImage](Samples/Image%20Processing/CropAndResizeRasterImage) | Once an image is loaded into ImageGear, it can be cropped. ImageGear crops independently on each side of the image, giving you complete control over what portion of the image to remove. |
| | [DespeckleAndDeskewRasterImage](Samples/Image%20Processing/DespeckleAndDeskewRasterImage) | After an image is scanned, it is often slightly skewed, and can also contain "noise" in the background portion of the image. These can cause OCR to perform poorly. To correct these issues, load a raster image into ImageGear and use the Despeckle and Deskew functions to "fix" the image. |
+| | [EqualizeContrastForRasterImage](Samples/Image%20Processing/EqualizeContrastForRasterImage) | This sample demonstrates how to improve the contrast of the raster image using the EqualizeContrast method. |
+| | [ErodeAndDilateRasterImage](Samples/Image%20Processing/ErodeAndDilateRasterImage) | The black-and-white and grayscale image can have some dot noise on it. To reduce or remove this noise, load a raster image into ImageGear and apply the Dilate and Erode operations sequentially. |
+| | [FlipAndRotateRasterImage](Samples/Image%20Processing/FlipAndRotateRasterImage) | After an image is loaded, use the ImGearProcessing.Flip() method to flip the image across either its horizontal or vertical axis. Use the ImGearProcessing.Rotate() method to rotate the image degrees clockwise using one of several interpolation techniques. |
| | [ImageCleanup](Samples/Image%20Processing/ImageCleanup) | After a document is scanned, there can be undesirable artifacts on the image. Use the various image cleanup operations, such as `RemovePunchHoles` and `CleanBorders`, to clean up the image to make it suitable for further processing. |
+| | [ProcessUsingRegionOfInterest](Samples/Image%20Processing/ProcessUsingRegionOfInterest) | Apply an image processing operation to a rectangluar Region of Interest (ROI) within a raster image instead of its entire area. |
+| | [ProcessUsingRegionOfInterestMask](Samples/Image%20Processing/ProcessUsingRegionOfInterestMask) | Apply an image processing operation to a bitonal Region of Interest (ROI) mask within a raster image instead of its entire area. |
| [***Email Samples***](Samples/Email) | | These samples demonstrate general Email functionality in ImageGear .NET. |
| | [EmailFileToPDFFile](Samples/Email/EmailFileToPDFFile) | This sample demonstrates how to load an Email document into ImageGear and save the document as a PDF. |
| | [EmailFileToRasterFormat](Samples/Email/EmailFileToRasterFormat) | After an Email document is loaded, ImageGear can rasterize the entire document and save it as a single-page raster format. |
@@ -46,26 +63,35 @@ ImageGear .NET supports the most commonly used image, graphic, and document form
| | [OfficeFileToRasterFormat](Samples/Office/OfficeFileToRasterFormat) | After an Office document is loaded, ImageGear can rasterize individual pages or the entire document and save them to raster formats. |
| | [ReadOfficeMetadata](Samples/Office/ReadOfficeMetadata) | ImageGear provides functionality to access metadata from the Office document. |
| [***PDF Acroform Samples***](Samples/PDF%20Acroform) | | These samples demonstrate PDF Acroform support in ImageGear .NET. |
+| | [AddingWidgets](Samples/PDF%20Acroform/AddingWidgets) | ImageGear allows adding widgets (radio button, checkboxes, listboxes, etc.) to PDF Acroforms. |
| | [CreatePDFFormField](Samples/PDF%20Acroform/CreatePDFFormField) | Starting with a PDF document, new or existing, first the PDF document is set to contain forms. Then form controls can be added to any page in the PDF document. |
-| | [SetPDFFormFields](Samples/PDF%20Acroform/SetPDFFormFields) | This sample demonstrates how to set the values of form fields and save those values to a PDF file. |
-| | [ReadPDFFormFields](Samples/PDF%20Acroform/ReadPDFFormFields) | This sample demonstrates how to read the values from form fields. |
| | [FlattenPDFFormFields](Samples/PDF%20Acroform/FlattenPDFFormFields) | This sample demonstrates how to flatten form fields. |
+| | [ModifyFieldAppearance](Samples/PDF%20Acroform/ModifyFieldAppearance) | This sample demonstrates how to add borders or change different attributes to widgets on PDF Forms. |
+| | [ReadPDFFormFields](Samples/PDF%20Acroform/ReadPDFFormFields) | This sample demonstrates how to read the values from form fields. |
+| | [SetPDFFormFields](Samples/PDF%20Acroform/SetPDFFormFields) | This sample demonstrates how to set the values of form fields and save those values to a PDF file. |
| [***PDF Compression Samples***](Samples/PDF%20Compression) | | These samples demonstrate how to compress PDF file content using ImageGear .NET. |
| | [CompressPDFFile](Samples/PDF%20Compression/CompressPDFFile) | To reduce the size of a PDF file, ImageGear provides the SaveCompressed function. |
| [***Combined PDF and JPEG Samples***](Samples/PDF%20and%20JPEG) | | These samples demonstrate general raster image functionality in ImageGear .NET. |
| | [AddImageToPDFAsAPage](Samples/PDF%20and%20JPEG/AddImageToPDFAsAPage) | This sample demonstrates how to add JPEG image as new page to the PDF Document. |
| | [PlaceImageOnAnExistingPDFPage](Samples/PDF%20and%20JPEG/PlaceImageOnAnExistingPDFPage) | This sample demonstrates how to add JPEG image to the existing page of the PDF Document. |
| [***PDF XFA Samples***](Samples/PDF) | | These samples demonstrate PDF with XFA support in ImageGear .NET. |
-| | [OpenPDFWithXFA](Samples/PDF XFA/OpenPDFWithXFA) | ImageGear can open PDF with XFA, detect XFA type and remove XFA from the document. |
+| | [OpenPDFWithXFA](Samples/PDF%20XFA/OpenPDFWithXFA) | ImageGear can open PDF with XFA, detect XFA type and remove XFA from the document. |
| [***General PDF Samples***](Samples/PDF) | | These samples demonstrate general PDF functionality in ImageGear .NET. |
+| | [AddWatermarkToPDFPage](Samples/PDF/AddWatermarkToPDFPage) | This sample demonstrates how to watermark a page in a PDF document using PDE element operations with a raster image loaded into ImageGear. |
+| | [ConvertPDFToPDFA_2b](Samples/PDF/ConvertPDFToPDFA_2b) | This sample demonstrates how to take a PDF document loaded into ImageGear, and convert that PDF document to be compliant with the PDF/A-2b specification. |
| | [DeletePDFPage](Samples/PDF/DeletePDFPage) | Pages can be removed from the front (0), end (Pages.Count - 1), or specific page number from a PDF file. |
| | [IntrinsicallyRotatePDFPage](Samples/PDF/IntrinsicallyRotatePDFPage) | In order to rotate a PDF page, each object on the page must be rotated about the origin and then translated back onto the page. |
| | [LoadEncryptedPDF](Samples/PDF/LoadEncryptedPDF) | This sample demonstrates how to decrypt and load a secure PDF. Additionally, it demonstrates how to remove encryption from a PDF once it has been loaded. |
| | [LoadingAndSavingPDF](Samples/PDF/LoadingAndSavingPDF) | This sample demonstrates two of the most basic PDF functions of ImageGear, loading and saving a PDF file using the LoadDocument and SaveDocument functions. |
+| | [LoadPDFSaveWithFlags](Samples/PDF/LoadPDFSaveWithFlags) | This sample demonstrates reducing the size of a PDF using flags to reduce duplication of streams, cleaning up unreferenced objects, and optimizing fonts. |
+| | [LoadSinglePDFPage](Samples/PDF/LoadSinglePDFPage) | Load a single PDF page and report its physical dimensions with the MediaRect property. |
+| | [ManagePDFMetadata](Samples/PDF/ManagePDFMetadata) | Read and update PDF metadata using the GetInfo and SetInfo methods, respectively. |
| | [MergeTwoPDFFiles](Samples/PDF/MergeTwoPDFFiles) | Any PDF document can have pages from other PDF documents inserted into it. The InsertPages function can insert a range of pages. |
| | [MultipageTIFFtoPDFFile](Samples/PDF/MultipageTIFFtoPDFFile) | Since the pages are inserted one at a time into the PDF, the pages can be easily reordered and combinded with other images from other documents. |
| | [PDFContentAddText](Samples/PDF/PDFContentAddText) | Text is added to a PDF page as a Text Element object using the Add function. |
| | [PDFContentExtractText](Samples/PDF/PDFContentExtractText) | Text is extracted from a range of PDF pages using the ExtractText function. |
| | [PDFFileToMultipageTIFF](Samples/PDF/PDFFileToMultipageTIFF) | Converting a PDF file to a raster image format is very easy with ImageGear. |
+| | [PDFFileToMultipageTIFFAtHighResolution](Samples/PDF/PDFFileToMultipageTIFFAtHighResolution) | Convert a PDF file to TIFF at high resolution to improve image quality. |
| | [SaveAllImagesOnPDFPage](Samples/PDF/SaveAllImagesOnPDFPage) | After a PDF page is loaded, the objects on the page can be traversed. |
| | [SetPDFSecurity](Samples/PDF/SetPDFSecurity) | ImageGear can set the security on a PDF document using the SetNewCryptHandler and SetNewSecurityData functions. |
+| | [SplitPDFIntoMultiplePDFs](Samples/PDF/SplitPDFIntoMultiplePDFs) | This sample demonstrates how to create new separate PDF documents from a PDF that has been loaded by ImageGear. |
diff --git a/Sample Input/G4ImageData.dat b/Sample Input/G4ImageData.dat
new file mode 100644
index 0000000..05cdf42
Binary files /dev/null and b/Sample Input/G4ImageData.dat differ
diff --git a/Sample Input/Road.jpg b/Sample Input/Road.jpg
new file mode 100644
index 0000000..e78cb6a
Binary files /dev/null and b/Sample Input/Road.jpg differ
diff --git a/Samples/Email/EmailFileToPDFFile/README.md b/Samples/Email/EmailFileToPDFFile/README.md
index d818ae7..371177a 100644
--- a/Samples/Email/EmailFileToPDFFile/README.md
+++ b/Samples/Email/EmailFileToPDFFile/README.md
@@ -33,7 +33,7 @@ When the sample is built, it produces a console application executable in the bi
To run this sample under Linux, run the sample from "bin/Debug/net6.0/" or "bin/x64/Debug/net6.0/" (depending on the solution platform) using `./EmailFileToPDFFile`.
-_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com).
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
## Email Document Support in ImageGear .NET
diff --git a/Samples/Email/EmailFileToRasterFormat/README.md b/Samples/Email/EmailFileToRasterFormat/README.md
index b10f025..074e8b4 100644
--- a/Samples/Email/EmailFileToRasterFormat/README.md
+++ b/Samples/Email/EmailFileToRasterFormat/README.md
@@ -35,7 +35,7 @@ When the sample is built, it produces a console application executable in the bi
To run this sample under Linux, run the sample from "bin/Debug/net6.0/" or "bin/x64/Debug/net6.0/" (depending on the solution platform) using `./EmailFileToRasterFormat`.
-_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com).
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
## Email Document Support in ImageGear .NET
diff --git a/Samples/Email/ExtractEmailAttachments/README.md b/Samples/Email/ExtractEmailAttachments/README.md
index 273bcd3..4f1188a 100644
--- a/Samples/Email/ExtractEmailAttachments/README.md
+++ b/Samples/Email/ExtractEmailAttachments/README.md
@@ -33,7 +33,7 @@ When the sample is built, it produces a console application executable in the bi
To run this sample under Linux, run the sample from "bin/Debug/net6.0/" or "bin/x64/Debug/net6.0/" (depending on the solution platform) using `./ExtractEmailAttachments`.
-_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com).
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
## Email Document Support in ImageGear .NET
diff --git a/Samples/Email/ExtractEmailMetadata/README.md b/Samples/Email/ExtractEmailMetadata/README.md
index 4b4bd09..2693d4d 100644
--- a/Samples/Email/ExtractEmailMetadata/README.md
+++ b/Samples/Email/ExtractEmailMetadata/README.md
@@ -33,7 +33,7 @@ When the sample is built, it produces a console application executable in the bi
To run this sample under Linux, run the sample from "bin/Debug/net6.0/" or "bin/x64/Debug/net6.0/" (depending on the solution platform) using `./ExtractEmailMetadata`.
-_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com).
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
## Email Document Support in ImageGear .NET
diff --git a/Samples/Image Conversion/ConvertMultipageRasterImageToSVG/AssemblyInfo.cs b/Samples/Image Conversion/ConvertMultipageRasterImageToSVG/AssemblyInfo.cs
new file mode 100644
index 0000000..db32ee5
--- /dev/null
+++ b/Samples/Image Conversion/ConvertMultipageRasterImageToSVG/AssemblyInfo.cs
@@ -0,0 +1,35 @@
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("ConvertMultipageRasterImageToSVG")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("ImageGear for .NET")]
+[assembly: AssemblyCopyright("")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("1e489b4d-3598-42f1-a7c0-04f4072c32f6")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Samples/Image Conversion/ConvertMultipageRasterImageToSVG/README.md b/Samples/Image Conversion/ConvertMultipageRasterImageToSVG/README.md
index 929ce66..e51fd5f 100644
--- a/Samples/Image Conversion/ConvertMultipageRasterImageToSVG/README.md
+++ b/Samples/Image Conversion/ConvertMultipageRasterImageToSVG/README.md
@@ -4,8 +4,6 @@ Convert a multi-page raster image to an SVG file suitable for display on most we
Scalable Vector Graphics (SVG) is an XML-based format that describes two-dimensional vector (and raster) graphics. It is a popular format for expressing graphics on websites.
-In order to convert a multi-page raster image (e.g. TIFF) to SVG, first the image must be loaded from the source image file using ImGearFileFormats.LoadDocument(). After an ImGearDocument has been retrieved, it can then be saved to SVG using ImGearFileFormats.SaveDocument().
-
For more information about the ImageGear .NET API, please refer to the [ImageGear .NET Online Documentation](https://help.accusoft.com/ImageGear/latest/webframe.html).
## System Requirements
@@ -35,7 +33,7 @@ When the sample is built, it produces a console application executable in the bi
To run this sample under Linux, run the sample from "bin/Debug/net6.0/" (depending on the solution platform) using `./ConvertMultipageRasterImageToSVG`.
-_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com).
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
## Image Conversion Support in ImageGear .NET
diff --git a/Samples/Image Conversion/ConvertRasterImageFormat/README.md b/Samples/Image Conversion/ConvertRasterImageFormat/README.md
index aec6b5f..41cdded 100644
--- a/Samples/Image Conversion/ConvertRasterImageFormat/README.md
+++ b/Samples/Image Conversion/ConvertRasterImageFormat/README.md
@@ -33,7 +33,7 @@ When the sample is built, it produces a console application executable in the bi
To run this sample under Linux, run the sample from "bin/Debug/net6.0/" (depending on the solution platform) using `./ConvertRasterImageFormat`.
-_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com).
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
## Image Conversion Support in ImageGear .NET
diff --git a/Samples/Image Processing/AdjustContrastForRasterImage/AdjustContrastForRasterImage.csproj b/Samples/Image Processing/AdjustContrastForRasterImage/AdjustContrastForRasterImage.csproj
new file mode 100644
index 0000000..37ef8fd
--- /dev/null
+++ b/Samples/Image Processing/AdjustContrastForRasterImage/AdjustContrastForRasterImage.csproj
@@ -0,0 +1,14 @@
+
+
+
+ Exe
+ net6.0;net48
+ Major
+ false
+
+
+
+
+
+
+
diff --git a/Samples/Image Processing/AdjustContrastForRasterImage/AdjustContrastForRasterImage.sln b/Samples/Image Processing/AdjustContrastForRasterImage/AdjustContrastForRasterImage.sln
new file mode 100644
index 0000000..c554247
--- /dev/null
+++ b/Samples/Image Processing/AdjustContrastForRasterImage/AdjustContrastForRasterImage.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.1.32319.34
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AdjustContrastForRasterImage", "AdjustContrastForRasterImage.csproj", "{60D98B51-220E-40D7-902E-3D2ECED52797}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {60D98B51-220E-40D7-902E-3D2ECED52797}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {60D98B51-220E-40D7-902E-3D2ECED52797}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {60D98B51-220E-40D7-902E-3D2ECED52797}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {60D98B51-220E-40D7-902E-3D2ECED52797}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {AFE50341-4874-40CE-9621-46B01A9E1F52}
+ EndGlobalSection
+EndGlobal
diff --git a/Samples/Image Processing/AdjustContrastForRasterImage/AssemblyInfo.cs b/Samples/Image Processing/AdjustContrastForRasterImage/AssemblyInfo.cs
new file mode 100644
index 0000000..5273b5c
--- /dev/null
+++ b/Samples/Image Processing/AdjustContrastForRasterImage/AssemblyInfo.cs
@@ -0,0 +1,35 @@
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("AdjustContrastForRasterImage")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("ImageGear for .NET")]
+[assembly: AssemblyCopyright("")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("bc6064ee-934f-4aec-b39b-98056d5a4527")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Samples/Image Processing/AdjustContrastForRasterImage/Program.cs b/Samples/Image Processing/AdjustContrastForRasterImage/Program.cs
new file mode 100644
index 0000000..c2aa37f
--- /dev/null
+++ b/Samples/Image Processing/AdjustContrastForRasterImage/Program.cs
@@ -0,0 +1,29 @@
+using System.IO;
+using ImageGear.Core;
+using ImageGear.Formats;
+using ImageGear.Processing;
+
+namespace AdjustContrastForRasterImage
+{
+ class Program
+ {
+ static void Main()
+ {
+ // Initialize common formats.
+ ImGearCommonFormats.Initialize();
+
+ // Load image page.
+ ImGearRasterPage imGearPage;
+ using (FileStream stream = new FileStream(@"../../../../../../Sample Input/water.jpg", FileMode.Open, FileAccess.Read, FileShare.Read))
+ imGearPage = ImGearFileFormats.LoadPage(stream, 0) as ImGearRasterPage;
+
+ // Adjust image contrast, brightness and gamma.
+ if (ImGearRasterProcessing.Verifier.CanApplyAdjustContrast(imGearPage))
+ ImGearRasterProcessing.AdjustContrast(imGearPage, 1.5, 64, 1.5);
+
+ // Save image page.
+ using (FileStream outputStream = new FileStream(@"../../../../../../Sample Output/AdjustContrastForRasterImage.png", FileMode.Create))
+ ImGearFileFormats.SavePage(imGearPage, outputStream, 1, ImGearSavingModes.OVERWRITE, ImGearSavingFormats.PNG, new ImGearSaveOptions());
+ }
+ }
+}
diff --git a/Samples/Image Processing/AdjustContrastForRasterImage/README.md b/Samples/Image Processing/AdjustContrastForRasterImage/README.md
new file mode 100644
index 0000000..289c8e5
--- /dev/null
+++ b/Samples/Image Processing/AdjustContrastForRasterImage/README.md
@@ -0,0 +1,40 @@
+# Adjust the Contrast, Brightness and Gamma of the Raster Image (AdjustContrastForRasterImage)
+
+The sample demonstrates how to manually adjust the contrast, brightness, and gamma of a raster image.
+
+Sometimes a raster image is too dark, too light, or too fuzzy. When such an image is loaded into ImageGear, its contrast, brightness, and gamma can be corrected using the AjustContrast method.
+
+For more information about the ImageGear .NET API, please refer to the [ImageGear .NET Online Documentation](https://help.accusoft.com/ImageGear/latest/webframe.html).
+
+## System Requirements
+
+For a list of the system and development software necessary to build and run these samples, please refer to the [ImageGear .NET Online Documentation](https://help.accusoft.com/ImageGear/latest/webframe.html#system-requirements.html).
+
+## Building the Sample
+
+Starting with ImageGear v26.0, ImageGear supports .NET Core.
+
+All samples can be built using Microsoft Visual Studio 2022.
+
+To build this sample:
+
+1. Open the .sln file in the project directory using Visual Studio 2022.
+2. Select a Solution Configuration (Debug or Release) and an available Solution Platform (x64 or Any CPU).
+3. Build with Build Solution located in the Build menu.
+
+To build this sample under Linux:
+
+1. Install the Microsoft .NET SDK for your Linux distribution.
+2. Run `dotnet build AdjustContrastForRasterImage.sln`. By default this will build the Debug Solution Configuration.
+
+## Running the Sample
+
+When the sample is built, it produces a console application executable in the bin subdirectory. Run this application by double-clicking the application icon, or run it directly from Command Prompt (cmd.exe), PowerShell, or similar. Note that the working directory must be the same as the directory containing the sample executable in order to find the sample input image and the output directory. The input image(s) and output directory are specified relative to the location of the application in all of these samples.
+
+To run this sample under Linux, run the sample from "bin/Debug/net6.0/" (depending on the solution platform) using `./AdjustContrastForRasterImage`.
+
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
+
+## Image Processing Support in ImageGear .NET
+
+ImageGear .NET can perform a broad range of image cleanup, correction, and transformation functions. For more information on image processing support in ImageGear .NET, [please visit us at Accusoft.](https://www.accusoft.com/products/imagegear-collection/imagegear-dot-net/)
diff --git a/Samples/Image Processing/CreateThumbnailImage/AssemblyInfo.cs b/Samples/Image Processing/CreateThumbnailImage/AssemblyInfo.cs
new file mode 100644
index 0000000..7189509
--- /dev/null
+++ b/Samples/Image Processing/CreateThumbnailImage/AssemblyInfo.cs
@@ -0,0 +1,35 @@
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("CreateThumbnailImage")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("ImageGear for .NET")]
+[assembly: AssemblyCopyright("")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("f5ebb37a-0b35-4990-988d-bc4e46490418")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Samples/Image Processing/CreateThumbnailImage/CreateThumbnailImage.csproj b/Samples/Image Processing/CreateThumbnailImage/CreateThumbnailImage.csproj
new file mode 100644
index 0000000..37c9fa3
--- /dev/null
+++ b/Samples/Image Processing/CreateThumbnailImage/CreateThumbnailImage.csproj
@@ -0,0 +1,14 @@
+
+
+
+ Exe
+ net6.0;net48
+ Major
+ false
+
+
+
+
+
+
+
diff --git a/Samples/Image Processing/CreateThumbnailImage/CreateThumbnailImage.sln b/Samples/Image Processing/CreateThumbnailImage/CreateThumbnailImage.sln
new file mode 100644
index 0000000..053e672
--- /dev/null
+++ b/Samples/Image Processing/CreateThumbnailImage/CreateThumbnailImage.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.3.32901.215
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CreateThumbnailImage", "CreateThumbnailImage.csproj", "{43052ADA-68D5-46E8-8577-A2F5E8996719}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {43052ADA-68D5-46E8-8577-A2F5E8996719}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {43052ADA-68D5-46E8-8577-A2F5E8996719}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {43052ADA-68D5-46E8-8577-A2F5E8996719}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {43052ADA-68D5-46E8-8577-A2F5E8996719}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {F2657A21-E134-451A-8FCD-21C6977D3FD9}
+ EndGlobalSection
+EndGlobal
diff --git a/Samples/Image Processing/CreateThumbnailImage/Program.cs b/Samples/Image Processing/CreateThumbnailImage/Program.cs
new file mode 100644
index 0000000..17aa7c5
--- /dev/null
+++ b/Samples/Image Processing/CreateThumbnailImage/Program.cs
@@ -0,0 +1,34 @@
+using System.IO;
+using ImageGear.Core;
+using ImageGear.Formats;
+using ImageGear.Processing;
+
+namespace CreateThumbnailImage
+{
+ internal class Program
+ {
+ static void Main()
+ {
+ // Initialize common formats.
+ ImGearCommonFormats.Initialize();
+
+ // Load image page.
+ ImGearPage imGearPage = null;
+ using (FileStream inputStream = new FileStream(@"../../../../../../Sample Input/water.jpg", FileMode.Open, FileAccess.Read, FileShare.Read))
+ imGearPage = ImGearFileFormats.LoadPage(inputStream);
+
+ // Create a thumbnail with dimensions that are 1/5 the original image size and maximum color interpolation quality.
+ int thumbnailWidth = imGearPage.DIB.Width / 5;
+ int thumbnailHeight = imGearPage.DIB.Height / 5;
+ ImGearInterpolationOptions interpolationOptions = new ImGearColorInterpolationOptions(100);
+ if (ImGearProcessing.Verifier.CanApplyCreateThumbnail(imGearPage, thumbnailWidth, thumbnailHeight, interpolationOptions))
+ {
+ ImGearPage thumbnailImage = ImGearProcessing.CreateThumbnail(imGearPage, thumbnailWidth, thumbnailHeight, interpolationOptions);
+
+ // Save the thumbnail as a PNG.
+ using (FileStream outputStream = new FileStream(@"../../../../../../Sample Output/CreateThumbnailImage.png", FileMode.Create))
+ ImGearFileFormats.SavePage(thumbnailImage, outputStream, ImGearSavingFormats.PNG);
+ }
+ }
+ }
+}
diff --git a/Samples/Image Processing/CreateThumbnailImage/README.md b/Samples/Image Processing/CreateThumbnailImage/README.md
new file mode 100644
index 0000000..93e3d42
--- /dev/null
+++ b/Samples/Image Processing/CreateThumbnailImage/README.md
@@ -0,0 +1,40 @@
+# Create a Thumbnail Image (CreateThumbnailImage)
+
+When an image thumbnail is needed, ImageGear can create a thumbnail from the original image, resized using one of several interpolation techniques.
+
+After an image is loaded, use ImGearProcessing.CreateThumbnail() to create an thumbnail with specific dimensions. Interpolation options depend on the color space and bit depth of the image. Grayscale, PreserveBlack and PreserveWhite interpolations are applicable only to 1 bit images. Average and Bilinear interpolations are not applicable to 1 bit images nor to images having a non-gray palette. Also, Bilinear interpolation cannot be applied to an image if one of the dimensions is decreased. Use ImGearProcessingVerifier.CanApplyCreateThumbnail() method to check whether the operation can be performed.
+
+For more information about the ImageGear .NET API, please refer to the [ImageGear .NET Online Documentation](https://help.accusoft.com/ImageGear/latest/webframe.html).
+
+## System Requirements
+
+For a list of the system and development software necessary to build and run these samples, please refer to the [ImageGear .NET Online Documentation](https://help.accusoft.com/ImageGear/latest/webframe.html#system-requirements.html).
+
+## Building the Sample
+
+Starting with ImageGear v26.0, ImageGear supports .NET Core.
+
+All samples can be built using Microsoft Visual Studio 2022.
+
+To build this sample:
+
+1. Open the .sln file in the project directory using Visual Studio 2022.
+2. Select a Solution Configuration (Debug or Release) and an available Solution Platform (x64 or Any CPU).
+3. Build with Build Solution located in the Build menu.
+
+To build this sample under Linux:
+
+1. Install the Microsoft .NET SDK for your Linux distribution.
+2. Run `dotnet build CreateThumbnailImage.sln`. By default this will build the Debug Solution Configuration.
+
+## Running the Sample
+
+When the sample is built, it produces a console application executable in the bin subdirectory. Run this application by double-clicking the application icon, or run it directly from Command Prompt (cmd.exe), PowerShell, or similar. Note that the working directory must be the same as the directory containing the sample executable in order to find the sample input image and the output directory. The input image(s) and output directory are specified relative to the location of the application in all of these samples.
+
+To run this sample under Linux, run the sample from "bin/Debug/net6.0/" (depending on the solution platform) using `./CreateThumbnailImage`.
+
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
+
+## Image Processing Support in ImageGear .NET
+
+ImageGear .NET can perform a broad range of image cleanup, correction, and transformation functions. For more information on image processing support in ImageGear .NET, [please visit us at Accusoft.](https://www.accusoft.com/products/imagegear-collection/imagegear-dot-net/)
diff --git a/Samples/Image Processing/CropAndResizeRasterImage/Program.cs b/Samples/Image Processing/CropAndResizeRasterImage/Program.cs
index a4e8046..c3093bb 100644
--- a/Samples/Image Processing/CropAndResizeRasterImage/Program.cs
+++ b/Samples/Image Processing/CropAndResizeRasterImage/Program.cs
@@ -20,10 +20,13 @@ static void Main()
// Crop the image.
int width = imGearPage.DIB.Width;
int height = imGearPage.DIB.Height;
- ImGearProcessing.Crop(imGearPage, width / 4, height / 4, width * 3 / 4, height * 3 / 4);
+ if (ImGearProcessing.Verifier.CanApplyCrop(imGearPage))
+ ImGearProcessing.Crop(imGearPage, width / 4, height / 4, width * 3 / 4, height * 3 / 4);
// Enlarge the cropped image using bi-linear interpolation.
- ImGearProcessing.Resize(imGearPage, width * 2, height * 2, ImGearInterpolationOptions.GetDefault(ImGearInterpolations.BILINEAR));
+ ImGearInterpolationOptions opt = ImGearInterpolationOptions.GetDefault(ImGearInterpolations.BILINEAR);
+ if (ImGearProcessing.Verifier.CanApplyResize(imGearPage, width * 2, height * 2, opt))
+ ImGearProcessing.Resize(imGearPage, width * 2, height * 2, opt);
// Save image page.
using (FileStream outputStream = new FileStream(@"../../../../../../Sample Output/CropAndResizeRasterImage.png", FileMode.Create))
diff --git a/Samples/Image Processing/CropAndResizeRasterImage/README.md b/Samples/Image Processing/CropAndResizeRasterImage/README.md
index c8849db..c513556 100644
--- a/Samples/Image Processing/CropAndResizeRasterImage/README.md
+++ b/Samples/Image Processing/CropAndResizeRasterImage/README.md
@@ -33,7 +33,7 @@ When the sample is built, it produces a console application executable in the bi
To run this sample under Linux, run the sample from "bin/Debug/net6.0/" (depending on the solution platform) using `./CropAndResizeRasterImage`.
-_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com).
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
## Image Processing Support in ImageGear .NET
diff --git a/Samples/Image Processing/DespeckleAndDeskewRasterImage/Program.cs b/Samples/Image Processing/DespeckleAndDeskewRasterImage/Program.cs
index fe2c578..135adb7 100644
--- a/Samples/Image Processing/DespeckleAndDeskewRasterImage/Program.cs
+++ b/Samples/Image Processing/DespeckleAndDeskewRasterImage/Program.cs
@@ -18,10 +18,12 @@ static void Main()
imGearPage = ImGearFileFormats.LoadPage(stream, 0);
// Despeckle the image.
- ImGearRasterProcessing.Despeckle((ImGearRasterPage)imGearPage, 5, 5);
+ if (ImGearRasterProcessing.Verifier.CanApplyDespeckle((ImGearRasterPage)imGearPage))
+ ImGearRasterProcessing.Despeckle((ImGearRasterPage)imGearPage, 5, 5);
// Deskew the image.
- ImGearRasterProcessing.Deskew((ImGearRasterPage)imGearPage, 0.1, ImGearRotationModes.CLIP, null);
+ if (ImGearRasterProcessing.Verifier.CanApplyDeskew((ImGearRasterPage)imGearPage))
+ ImGearRasterProcessing.Deskew((ImGearRasterPage)imGearPage, 0.1, ImGearRotationModes.CLIP, null);
// Save image page.
using (FileStream outputStream = new FileStream(@"../../../../../../Sample Output/DespeckleAndDeskewRasterImage.tif", FileMode.Create))
diff --git a/Samples/Image Processing/DespeckleAndDeskewRasterImage/README.md b/Samples/Image Processing/DespeckleAndDeskewRasterImage/README.md
index 012c60c..26b8764 100644
--- a/Samples/Image Processing/DespeckleAndDeskewRasterImage/README.md
+++ b/Samples/Image Processing/DespeckleAndDeskewRasterImage/README.md
@@ -33,7 +33,7 @@ When the sample is built, it produces a console application executable in the bi
To run this sample under Linux, run the sample from "bin/Debug/net6.0/" (depending on the solution platform) using `./DespeckleAndDeskewRasterImage`.
-_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com).
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
## Image Processing Support in ImageGear .NET
diff --git a/Samples/Image Processing/EqualizeContrastForRasterImage/AssemblyInfo.cs b/Samples/Image Processing/EqualizeContrastForRasterImage/AssemblyInfo.cs
new file mode 100644
index 0000000..400856f
--- /dev/null
+++ b/Samples/Image Processing/EqualizeContrastForRasterImage/AssemblyInfo.cs
@@ -0,0 +1,35 @@
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("EqualizeContrastForRasterImage")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("ImageGear for .NET")]
+[assembly: AssemblyCopyright("")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("f6d50148-424c-41db-8a67-30da0ce87316")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Samples/Image Processing/EqualizeContrastForRasterImage/EqualizeContrastForRasterImage.csproj b/Samples/Image Processing/EqualizeContrastForRasterImage/EqualizeContrastForRasterImage.csproj
new file mode 100644
index 0000000..37ef8fd
--- /dev/null
+++ b/Samples/Image Processing/EqualizeContrastForRasterImage/EqualizeContrastForRasterImage.csproj
@@ -0,0 +1,14 @@
+
+
+
+ Exe
+ net6.0;net48
+ Major
+ false
+
+
+
+
+
+
+
diff --git a/Samples/Image Processing/EqualizeContrastForRasterImage/EqualizeContrastForRasterImage.sln b/Samples/Image Processing/EqualizeContrastForRasterImage/EqualizeContrastForRasterImage.sln
new file mode 100644
index 0000000..3ec67ba
--- /dev/null
+++ b/Samples/Image Processing/EqualizeContrastForRasterImage/EqualizeContrastForRasterImage.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.1.32319.34
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EqualizeContrastForRasterImage", "EqualizeContrastForRasterImage.csproj", "{D4725703-F3D5-4DCB-BDBD-E13CC1D41758}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {D4725703-F3D5-4DCB-BDBD-E13CC1D41758}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D4725703-F3D5-4DCB-BDBD-E13CC1D41758}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D4725703-F3D5-4DCB-BDBD-E13CC1D41758}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D4725703-F3D5-4DCB-BDBD-E13CC1D41758}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {A62256C3-222D-416F-952C-4DF480230A71}
+ EndGlobalSection
+EndGlobal
diff --git a/Samples/Image Processing/EqualizeContrastForRasterImage/Program.cs b/Samples/Image Processing/EqualizeContrastForRasterImage/Program.cs
new file mode 100644
index 0000000..26a8c23
--- /dev/null
+++ b/Samples/Image Processing/EqualizeContrastForRasterImage/Program.cs
@@ -0,0 +1,30 @@
+using System.IO;
+using ImageGear.Core;
+using ImageGear.Formats;
+using ImageGear.Processing;
+
+namespace EqualizeContrastForRasterImage
+{
+ class Program
+ {
+ static void Main()
+ {
+ // Initialize common formats.
+ ImGearCommonFormats.Initialize();
+
+ // Load image page.
+ ImGearRasterPage imGearPage;
+ using (FileStream stream = new FileStream(@"../../../../../../Sample Input/water.jpg", FileMode.Open, FileAccess.Read, FileShare.Read))
+ imGearPage = ImGearFileFormats.LoadPage(stream, 0) as ImGearRasterPage;
+
+ // Equalize the image.
+ if (ImGearRasterProcessing.Verifier.CanApplyEqualizeContrast(imGearPage))
+ ImGearRasterProcessing.EqualizeContrast(
+ imGearPage, ImGearContrastModes.PIXEL, new ImGearChannelRange(0, imGearPage.DIB.ChannelCount));
+
+ // Save image page.
+ using (FileStream outputStream = new FileStream(@"../../../../../../Sample Output/EqualizeContrastForRasterImage.png", FileMode.Create))
+ ImGearFileFormats.SavePage(imGearPage, outputStream, 1, ImGearSavingModes.OVERWRITE, ImGearSavingFormats.PNG, new ImGearSaveOptions());
+ }
+ }
+}
diff --git a/Samples/Image Processing/EqualizeContrastForRasterImage/README.md b/Samples/Image Processing/EqualizeContrastForRasterImage/README.md
new file mode 100644
index 0000000..4d69ab8
--- /dev/null
+++ b/Samples/Image Processing/EqualizeContrastForRasterImage/README.md
@@ -0,0 +1,40 @@
+# Equalize Contrast for a Raster Image (EqualizeContrastForRasterImage)
+
+This sample demonstrates how to improve the contrast of the raster image using the EqualizeContrast method.
+
+The Equalize algorithm builds a sorted histogram of the image and then utilizes this histogram as a map for the pixels conversion, generally improves the contrast of the image.
+
+For more information about the ImageGear .NET API, please refer to the [ImageGear .NET Online Documentation](https://help.accusoft.com/ImageGear/latest/webframe.html).
+
+## System Requirements
+
+For a list of the system and development software necessary to build and run these samples, please refer to the [ImageGear .NET Online Documentation](https://help.accusoft.com/ImageGear/latest/webframe.html#system-requirements.html).
+
+## Building the Sample
+
+Starting with ImageGear v26.0, ImageGear supports .NET Core.
+
+All samples can be built using Microsoft Visual Studio 2022.
+
+To build this sample:
+
+1. Open the EqualizeContrastForRasterImage.sln file in the project directory using Visual Studio 2022.
+2. Select a Solution Configuration (Debug or Release) and an available Solution Platform (x64 or Any CPU).
+3. Build with Build Solution located in the Build menu.
+
+To build this sample under Linux:
+
+1. Install the Microsoft .NET SDK for your Linux distribution.
+2. Run `dotnet build EqualizeContrastForRasterImage.sln`. By default this will build the Debug Solution Configuration.
+
+## Running the Sample
+
+When the sample is built, it produces a console application executable in the bin subdirectory. Run this application by double-clicking the application icon, or run it directly from Command Prompt (cmd.exe), PowerShell, or similar. Note that the working directory must be the same as the directory containing the sample executable in order to find the sample input image and the output directory. The input image(s) and output directory are specified relative to the location of the application in all of these samples.
+
+To run this sample under Linux, run the sample from "bin/Debug/net6.0/" (depending on the solution platform) using `./EqualizeContrastForRasterImage`.
+
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
+
+## Image Processing Support in ImageGear .NET
+
+ImageGear .NET can perform a broad range of image cleanup, correction, and transformation functions. For more information on image processing support in ImageGear .NET, [please visit us at Accusoft.](https://www.accusoft.com/products/imagegear-collection/imagegear-dot-net/)
diff --git a/Samples/Image Processing/ErodeAndDilateRasterImage/AssemblyInfo.cs b/Samples/Image Processing/ErodeAndDilateRasterImage/AssemblyInfo.cs
new file mode 100644
index 0000000..3c60b39
--- /dev/null
+++ b/Samples/Image Processing/ErodeAndDilateRasterImage/AssemblyInfo.cs
@@ -0,0 +1,35 @@
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("ErodeAndDilateRasterImage")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("ImageGear for .NET")]
+[assembly: AssemblyCopyright("")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("b04f6612-d132-4f54-a62a-65B277a5aa19")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Samples/Image Processing/ErodeAndDilateRasterImage/ErodeAndDilateRasterImage.csproj b/Samples/Image Processing/ErodeAndDilateRasterImage/ErodeAndDilateRasterImage.csproj
new file mode 100644
index 0000000..37ef8fd
--- /dev/null
+++ b/Samples/Image Processing/ErodeAndDilateRasterImage/ErodeAndDilateRasterImage.csproj
@@ -0,0 +1,14 @@
+
+
+
+ Exe
+ net6.0;net48
+ Major
+ false
+
+
+
+
+
+
+
diff --git a/Samples/Image Processing/ErodeAndDilateRasterImage/ErodeAndDilateRasterImage.sln b/Samples/Image Processing/ErodeAndDilateRasterImage/ErodeAndDilateRasterImage.sln
new file mode 100644
index 0000000..161468b
--- /dev/null
+++ b/Samples/Image Processing/ErodeAndDilateRasterImage/ErodeAndDilateRasterImage.sln
@@ -0,0 +1,26 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.1.32319.34
+MinimumVisualStudioVersion = 10.0.40219.1
+
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ErodeAndDilateRasterImage", "ErodeAndDilateRasterImage.csproj", "{86873757-FF9E-4248-AA1D-416479377425}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {86873757-FF9E-4248-AA1D-416479377425}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {86873757-FF9E-4248-AA1D-416479377425}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {86873757-FF9E-4248-AA1D-416479377425}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {86873757-FF9E-4248-AA1D-416479377425}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {0EFC90CB-42D5-436C-8A29-1BC9F944DAB1}
+ EndGlobalSection
+EndGlobal
diff --git a/Samples/Image Processing/ErodeAndDilateRasterImage/Program.cs b/Samples/Image Processing/ErodeAndDilateRasterImage/Program.cs
new file mode 100644
index 0000000..122bb71
--- /dev/null
+++ b/Samples/Image Processing/ErodeAndDilateRasterImage/Program.cs
@@ -0,0 +1,40 @@
+using System.IO;
+using ImageGear.Core;
+using ImageGear.Formats;
+using ImageGear.Processing;
+
+namespace ErodeAndDilateRasterImage
+{
+ class Program
+ {
+ static void Main()
+ {
+ int[,] MorphologyMatrix = new int[,]
+ {
+ {0, 1, 1},
+ {1, 1, 1},
+ {0, 1, 0},
+ };
+
+ // Initialize common formats.
+ ImGearCommonFormats.Initialize();
+
+ // Load image page.
+ ImGearRasterPage imGearPage;
+ using (FileStream stream = new FileStream(@"../../../../../../Sample Input/Bitonal-Cleanup-Sample.tif", FileMode.Open, FileAccess.Read, FileShare.Read))
+ imGearPage = ImGearFileFormats.LoadPage(stream, 0) as ImGearRasterPage;
+
+ // Erode the image.
+ if (ImGearRasterProcessing.Verifier.CanApplyErode(imGearPage))
+ ImGearRasterProcessing.Erode(imGearPage, MorphologyMatrix);
+
+ // Dilate the image.
+ if (ImGearRasterProcessing.Verifier.CanApplyDilate(imGearPage))
+ ImGearRasterProcessing.Dilate(imGearPage, MorphologyMatrix);
+
+ // Save image page.
+ using (FileStream outputStream = new FileStream(@"../../../../../../Sample Output/ErodeAndDilateRasterImage.png", FileMode.Create))
+ ImGearFileFormats.SavePage(imGearPage, outputStream, 1, ImGearSavingModes.OVERWRITE, ImGearSavingFormats.PNG, new ImGearSaveOptions());
+ }
+ }
+}
diff --git a/Samples/Image Processing/ErodeAndDilateRasterImage/README.md b/Samples/Image Processing/ErodeAndDilateRasterImage/README.md
new file mode 100644
index 0000000..6820b7b
--- /dev/null
+++ b/Samples/Image Processing/ErodeAndDilateRasterImage/README.md
@@ -0,0 +1,42 @@
+# Erode and Dilate Raster Image (ErodeAndDilateRasterImage)
+
+Erosion and dilation are fundamental operations in mathematical morphology. They are usually applied to black and white images, but can also be applicable to grayscale images.
+
+The basic effect of erosion is to erode away the boundaries of regions of foreground pixels (white pixels). Thus areas of foreground pixels shrink in size, and holes within those areas become larger. Applying this to the image will make bright objects smaller, that is, the image will be darker.
+
+The basic effect of dilation is to gradually enlarge the boundaries of regions of foreground pixels (white pixels). Thus areas of foreground pixels grow in size, while holes within those regions become smaller. Applying this to the image will make bright objects larger, that is, the image will be lighter.
+
+For more information about the ImageGear .NET API, please refer to the [ImageGear .NET Online Documentation](https://help.accusoft.com/ImageGear/latest/webframe.html).
+
+## System Requirements
+
+For a list of the system and development software necessary to build and run these samples, please refer to the [ImageGear .NET Online Documentation](https://help.accusoft.com/ImageGear/latest/webframe.html#system-requirements.html).
+
+## Building the Sample
+
+Starting with ImageGear v26.0, ImageGear supports .NET Core.
+
+All samples can be built using Microsoft Visual Studio 2022.
+
+To build this sample:
+
+1. Open the ErodeAndDilateRasterImage.sln file in the project directory using Visual Studio 2022.
+2. Select a Solution Configuration (Debug or Release) and an available Solution Platform (x64 or Any CPU).
+3. Build with Build Solution located in the Build menu.
+
+To build this sample under Linux:
+
+1. Install the Microsoft .NET SDK for your Linux distribution.
+2. Run `dotnet build ErodeAndDilateRasterImage.sln`. By default this will build the Debug Solution Configuration.
+
+## Running the Sample
+
+When the sample is built, it produces a console application executable in the bin subdirectory. Run this application by double-clicking the application icon, or run it directly from Command Prompt (cmd.exe), PowerShell, or similar. Note that the working directory must be the same as the directory containing the sample executable in order to find the sample input image and the output directory. The input image(s) and output directory are specified relative to the location of the application in all of these samples.
+
+To run this sample under Linux, run the sample from "bin/Debug/net6.0/" (depending on the solution platform) using `./ErodeAndDilateRasterImage`.
+
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
+
+## Image Processing Support in ImageGear .NET
+
+ImageGear .NET can perform a broad range of image cleanup, correction, and transformation functions. For more information on image processing support in ImageGear .NET, [please visit us at Accusoft.](https://www.accusoft.com/products/imagegear-collection/imagegear-dot-net/)
diff --git a/Samples/Image Processing/FlipAndRotateRasterImage/AssemblyInfo.cs b/Samples/Image Processing/FlipAndRotateRasterImage/AssemblyInfo.cs
new file mode 100644
index 0000000..948b4ba
--- /dev/null
+++ b/Samples/Image Processing/FlipAndRotateRasterImage/AssemblyInfo.cs
@@ -0,0 +1,35 @@
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("FlipAndRotateRasterImage")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("ImageGear for .NET")]
+[assembly: AssemblyCopyright("")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("2129c7a8-a3ed-4649-abe7-84dc9ca44bb8")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Samples/Image Processing/FlipAndRotateRasterImage/FlipAndRotateRasterImage.csproj b/Samples/Image Processing/FlipAndRotateRasterImage/FlipAndRotateRasterImage.csproj
new file mode 100644
index 0000000..37c9fa3
--- /dev/null
+++ b/Samples/Image Processing/FlipAndRotateRasterImage/FlipAndRotateRasterImage.csproj
@@ -0,0 +1,14 @@
+
+
+
+ Exe
+ net6.0;net48
+ Major
+ false
+
+
+
+
+
+
+
diff --git a/Samples/Image Processing/FlipAndRotateRasterImage/FlipAndRotateRasterImage.sln b/Samples/Image Processing/FlipAndRotateRasterImage/FlipAndRotateRasterImage.sln
new file mode 100644
index 0000000..38853e6
--- /dev/null
+++ b/Samples/Image Processing/FlipAndRotateRasterImage/FlipAndRotateRasterImage.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.3.32901.215
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FlipAndRotateRasterImage", "FlipAndRotateRasterImage.csproj", "{E9DD5400-367C-4C75-A838-2300270A520E}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {E9DD5400-367C-4C75-A838-2300270A520E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E9DD5400-367C-4C75-A838-2300270A520E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E9DD5400-367C-4C75-A838-2300270A520E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E9DD5400-367C-4C75-A838-2300270A520E}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {AD80DF76-A8D1-477C-A2B7-AAC97D85564C}
+ EndGlobalSection
+EndGlobal
diff --git a/Samples/Image Processing/FlipAndRotateRasterImage/Program.cs b/Samples/Image Processing/FlipAndRotateRasterImage/Program.cs
new file mode 100644
index 0000000..e3917c7
--- /dev/null
+++ b/Samples/Image Processing/FlipAndRotateRasterImage/Program.cs
@@ -0,0 +1,43 @@
+using System.IO;
+using ImageGear.Core;
+using ImageGear.Formats;
+using ImageGear.Processing;
+
+namespace FlipAndRotateRasterImage
+{
+ internal class Program
+ {
+ static void Main()
+ {
+ // Initialize common formats.
+ ImGearCommonFormats.Initialize();
+
+ // Load image page.
+ ImGearPage imGearPage = null;
+ using (FileStream inputStream = new FileStream(@"../../../../../../Sample Input/water.jpg", FileMode.Open, FileAccess.Read, FileShare.Read))
+ imGearPage = ImGearFileFormats.LoadPage(inputStream);
+
+ // Flip the image horizontally.
+ if (ImGearProcessing.Verifier.CanApplyFlip(imGearPage))
+ ImGearProcessing.Flip(imGearPage, ImGearFlipModes.HORIZONTAL);
+
+ // Create a cerulean blue background pixel for an RGB24 page.
+ // The background pixel must have the same channel count and bit depth as the page.
+ // A 24-bpp RGB pixel has 3 channels, 8 bits per channel.
+ ImGearPixel backgroundPixel = new ImGearPixel(3, 8)
+ {
+ [0] = 0x2A,
+ [1] = 0x52,
+ [2] = 0xBE
+ };
+
+ // Rotate the image 15.0 degrees clockwise using bicubic interpolation, filling the expanded page dimensions with the background pixel.
+ if (ImGearProcessing.Verifier.CanApplyRotate(imGearPage, ImGearInterpolations.BICUBIC))
+ ImGearProcessing.Rotate(imGearPage, 15.0, ImGearRotationModes.CLIP, backgroundPixel, ImGearInterpolations.BICUBIC);
+
+ // Save image page.
+ using (FileStream outputStream = new FileStream(@"../../../../../../Sample Output/FlipAndRotateRasterImage.png", FileMode.Create))
+ ImGearFileFormats.SavePage(imGearPage, outputStream, ImGearSavingFormats.PNG);
+ }
+ }
+}
diff --git a/Samples/Image Processing/FlipAndRotateRasterImage/README.md b/Samples/Image Processing/FlipAndRotateRasterImage/README.md
new file mode 100644
index 0000000..c985762
--- /dev/null
+++ b/Samples/Image Processing/FlipAndRotateRasterImage/README.md
@@ -0,0 +1,40 @@
+# Flip and Rotate a Raster Image (FlipAndRotateRasterImage)
+
+When transformations are needed, ImageGear can flip and rotate raster images using one of several interpolation techniques.
+
+After an image is loaded, use the ImGearProcessing.Flip() method to flip the image across either its horizontal or vertical axis. Use the ImGearProcessing.Rotate() method to rotate the image degrees clockwise using one of several interpolation techniques. Depending on the rotation angle, image dimensions can change. Use ImGearProcessingVerifier.CanApplyFlip() and ImGearProcessingVerifier.CanApplyRotate() methods to check whether the operations can be performed.
+
+For more information about the ImageGear .NET API, please refer to the [ImageGear .NET Online Documentation](https://help.accusoft.com/ImageGear/latest/webframe.html).
+
+## System Requirements
+
+For a list of the system and development software necessary to build and run these samples, please refer to the [ImageGear .NET Online Documentation](https://help.accusoft.com/ImageGear/latest/webframe.html#system-requirements.html).
+
+## Building the Sample
+
+Starting with ImageGear v26.0, ImageGear supports .NET Core.
+
+All samples can be built using Microsoft Visual Studio 2022.
+
+To build this sample:
+
+1. Open the .sln file in the project directory using Visual Studio 2022.
+2. Select a Solution Configuration (Debug or Release) and an available Solution Platform (x64 or Any CPU).
+3. Build with Build Solution located in the Build menu.
+
+To build this sample under Linux:
+
+1. Install the Microsoft .NET SDK for your Linux distribution.
+2. Run `dotnet build FlipAndRotateRasterImage.sln`. By default this will build the Debug Solution Configuration.
+
+## Running the Sample
+
+When the sample is built, it produces a console application executable in the bin subdirectory. Run this application by double-clicking the application icon, or run it directly from Command Prompt (cmd.exe), PowerShell, or similar. Note that the working directory must be the same as the directory containing the sample executable in order to find the sample input image and the output directory. The input image(s) and output directory are specified relative to the location of the application in all of these samples.
+
+To run this sample under Linux, run the sample from "bin/Debug/net6.0/" (depending on the solution platform) using `./FlipAndRotateRasterImage`.
+
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
+
+## Image Processing Support in ImageGear .NET
+
+ImageGear .NET can perform a broad range of image cleanup, correction, and transformation functions. For more information on image processing support in ImageGear .NET, [please visit us at Accusoft.](https://www.accusoft.com/products/imagegear-collection/imagegear-dot-net/)
diff --git a/Samples/Image Processing/ImageCleanup/AssemblyInfo.cs b/Samples/Image Processing/ImageCleanup/AssemblyInfo.cs
new file mode 100644
index 0000000..3ba2d81
--- /dev/null
+++ b/Samples/Image Processing/ImageCleanup/AssemblyInfo.cs
@@ -0,0 +1,35 @@
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("ImageCleanup")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("ImageGear for .NET")]
+[assembly: AssemblyCopyright("")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("2aa2d3bf-748f-4ec4-9ef5-78cd0e995c0a")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Samples/Image Processing/ImageCleanup/Program.cs b/Samples/Image Processing/ImageCleanup/Program.cs
index 961c884..7dfa444 100644
--- a/Samples/Image Processing/ImageCleanup/Program.cs
+++ b/Samples/Image Processing/ImageCleanup/Program.cs
@@ -1,4 +1,5 @@
-using System.IO;
+using System;
+using System.IO;
using ImageGear.Core;
using ImageGear.Formats;
using ImageGear.Processing.ImageClean;
@@ -17,6 +18,13 @@ static void Main()
using (FileStream stream = new FileStream(@"../../../../../../Sample Input/Bitonal-Cleanup-Sample.tif", FileMode.Open, FileAccess.Read, FileShare.Read))
imGearPage = ImGearFileFormats.LoadPage(stream, 0);
+ // Check for noise
+ if (ImGearIC.Verifier.CanApplyCheckForNoise(imGearPage))
+ {
+ int noiseObjectNum = ImGearIC.CheckForNoise(imGearPage, 10);
+ Console.WriteLine("Number of objects with size greater than 10 is " + noiseObjectNum.ToString());
+ }
+
// Remove dotted lines from the page.
ImGearICDotLineOptions dotLineOptions = new ImGearICDotLineOptions()
{
@@ -26,7 +34,9 @@ static void Main()
Unit = ImGearICUnits.MM,
Direction = ImGearICDirection.HORIZONTAL
};
- ImGearIC.RemoveDotLines(imGearPage, dotLineOptions);
+
+ if(ImGearIC.Verifier.CanApplyRemoveDotLines(imGearPage))
+ ImGearIC.RemoveDotLines(imGearPage, dotLineOptions);
// Remove black borders from the page.
ImGearICBorderOptions borderOptions = new ImGearICBorderOptions()
@@ -38,10 +48,12 @@ static void Main()
nMinLinesNum = 10,
nMinLineWidth = 10
};
- ImGearIC.CleanBorders(imGearPage, borderOptions);
+ if (ImGearIC.Verifier.CanApplyCleanBorders(imGearPage))
+ ImGearIC.CleanBorders(imGearPage, borderOptions);
// Orient the page content based on the text on the page.
- ImGearIC.TextAutoOrientation(imGearPage, ImGearICDocumentType.STANDARD);
+ if (ImGearIC.Verifier.CanApplyAutoOrient(imGearPage))
+ ImGearIC.TextAutoOrientation(imGearPage, ImGearICDocumentType.STANDARD);
// Remove hole puncher marks from the page.
ImGearICPunchHoleOptions punchHoleOptions = new ImGearICPunchHoleOptions()
@@ -52,7 +64,8 @@ static void Main()
MinDiameter = 5,
Unit = ImGearICUnits.MM
};
- ImGearIC.RemovePunchHoles(imGearPage, punchHoleOptions);
+ if (ImGearIC.Verifier.CanApplyRemovePunchHoles(imGearPage))
+ ImGearIC.RemovePunchHoles(imGearPage, punchHoleOptions);
// Remove horizontal lines from the page.
ImGearICLineOptions lineOptions = new ImGearICLineOptions()
@@ -63,14 +76,29 @@ static void Main()
Unit = ImGearICUnits.MM,
Direction = ImGearICDirection.HORIZONTAL
};
- ImGearIC.RemoveLines(imGearPage, lineOptions);
+ if (ImGearIC.Verifier.CanApplyRemoveLines(imGearPage))
+ ImGearIC.RemoveLines(imGearPage, lineOptions);
// Crop the page to the page content.
- ImGearIC.AutoCrop(imGearPage);
+ if (ImGearIC.Verifier.CanApplyAutoCrop(imGearPage))
+ ImGearIC.AutoCrop(imGearPage);
// Save image page.
using (FileStream outputStream = new FileStream(@"../../../../../../Sample Output/ImageCleanup.tif", FileMode.Create))
ImGearFileFormats.SavePage(imGearPage, outputStream, 1, ImGearSavingModes.OVERWRITE, ImGearSavingFormats.TIF_LZW, new ImGearSaveOptions());
+
+ // Invert the page if the percentage of black pixels is higher than 5.
+ if (ImGearIC.Verifier.CanApplyInvertBlackImage(imGearPage))
+ ImGearIC.InvertBlackImage(imGearPage, 5);
+
+ // Invert white text on black background using a minimum height of 40, width of 100, thickness of 10,
+ // minimum letter size of 10, maximum letter size of 100, and a maximum border of 5.
+ if (ImGearIC.Verifier.CanApplyInvertWhiteText(imGearPage))
+ ImGearIC.InvertWhiteText(imGearPage, 40, 100, 10, 10, 100, 5);
+
+ // Save image page.
+ using (FileStream outputStream = new FileStream(@"../../../../../../Sample Output/ImageCleanupInverted.tif", FileMode.Create))
+ ImGearFileFormats.SavePage(imGearPage, outputStream, 1, ImGearSavingModes.OVERWRITE, ImGearSavingFormats.TIF_LZW, new ImGearSaveOptions());
}
}
}
diff --git a/Samples/Image Processing/ImageCleanup/README.md b/Samples/Image Processing/ImageCleanup/README.md
index 28806e0..b0be070 100644
--- a/Samples/Image Processing/ImageCleanup/README.md
+++ b/Samples/Image Processing/ImageCleanup/README.md
@@ -2,7 +2,7 @@
When a document scan presents undesirable artifacts, ImageGear can clean up the image to make it more suitable for further processing.
-Once an image is loaded into ImageGear, use the static methods of the `ImGearIC` class to perform various cleanup routines, such as removing hole puncher marks and lines, inverting white text, and cleaning scan borders.
+Once an image is loaded into ImageGear, use the static methods of the `ImGearIC` class to perform various cleanup routines, such as checking for noise, removing hole puncher marks and lines, auto orienting text, auto cropping, inverting black images and white text on a black background, and cleaning scan borders.
For more information about the ImageGear .NET API, please refer to the [ImageGear .NET Online Documentation](https://help.accusoft.com/ImageGear/latest/webframe.html).
@@ -33,7 +33,7 @@ When the sample is built, it produces a console application executable in the bi
To run this sample under Linux, run the sample from "bin/Debug/net6.0/" (depending on the solution platform) using `./ImageCleanup`.
-_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com).
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
## Image Processing Support in ImageGear .NET
diff --git a/Samples/Image Processing/ProcessUsingRegionOfInterest/AssemblyInfo.cs b/Samples/Image Processing/ProcessUsingRegionOfInterest/AssemblyInfo.cs
new file mode 100644
index 0000000..74427c3
--- /dev/null
+++ b/Samples/Image Processing/ProcessUsingRegionOfInterest/AssemblyInfo.cs
@@ -0,0 +1,35 @@
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("UsingARegionOfInterestShape")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("ImageGear for .NET")]
+[assembly: AssemblyCopyright("")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("d48ca710-fbf2-484d-8f9b-252ef675ff01")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Samples/Image Processing/ProcessUsingRegionOfInterest/ProcessUsingRegionOfInterest.csproj b/Samples/Image Processing/ProcessUsingRegionOfInterest/ProcessUsingRegionOfInterest.csproj
new file mode 100644
index 0000000..37c9fa3
--- /dev/null
+++ b/Samples/Image Processing/ProcessUsingRegionOfInterest/ProcessUsingRegionOfInterest.csproj
@@ -0,0 +1,14 @@
+
+
+
+ Exe
+ net6.0;net48
+ Major
+ false
+
+
+
+
+
+
+
diff --git a/Samples/Image Processing/ProcessUsingRegionOfInterest/ProcessUsingRegionOfInterest.sln b/Samples/Image Processing/ProcessUsingRegionOfInterest/ProcessUsingRegionOfInterest.sln
new file mode 100644
index 0000000..e21fef3
--- /dev/null
+++ b/Samples/Image Processing/ProcessUsingRegionOfInterest/ProcessUsingRegionOfInterest.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.3.32901.215
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProcessUsingRegionOfInterest", "ProcessUsingRegionOfInterest.csproj", "{6F365AE6-5956-4A11-93FC-4C4F4CC308F4}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {6F365AE6-5956-4A11-93FC-4C4F4CC308F4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {6F365AE6-5956-4A11-93FC-4C4F4CC308F4}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {6F365AE6-5956-4A11-93FC-4C4F4CC308F4}.Release|Any CPU.ActiveCfg = Release|x64
+ {6F365AE6-5956-4A11-93FC-4C4F4CC308F4}.Release|Any CPU.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {17863B22-3797-4856-9F4D-98DE043D9591}
+ EndGlobalSection
+EndGlobal
diff --git a/Samples/Image Processing/ProcessUsingRegionOfInterest/Program.cs b/Samples/Image Processing/ProcessUsingRegionOfInterest/Program.cs
new file mode 100644
index 0000000..d1b67b4
--- /dev/null
+++ b/Samples/Image Processing/ProcessUsingRegionOfInterest/Program.cs
@@ -0,0 +1,33 @@
+using System.IO;
+using ImageGear.Core;
+using ImageGear.Formats;
+using ImageGear.Processing;
+
+namespace ProcessUsingRegionOfInterest
+{
+ internal class Program
+ {
+ static void Main()
+ {
+ // Initialize common formats.
+ ImGearCommonFormats.Initialize();
+
+ // Load image page.
+ ImGearRasterPage imGearPage = null;
+ using (FileStream inputStream = new FileStream(@"../../../../../../Sample Input/water.jpg", FileMode.Open, FileAccess.Read, FileShare.Read))
+ imGearPage = (ImGearRasterPage)ImGearFileFormats.LoadPage(inputStream);
+
+ // Create a rectangular Region of Interest (ROI) for the left half of the image.
+ imGearPage.ROI = new ImGearROIRectangle(0, 0, imGearPage.DIB.Width / 2, imGearPage.DIB.Height);
+
+ // Equalize constrast within the Region of Interest.
+ if (ImGearRasterProcessing.Verifier.CanApplyEqualizeContrast(imGearPage))
+ ImGearRasterProcessing.EqualizeContrast(
+ imGearPage, ImGearContrastModes.PIXEL, new ImGearChannelRange(0, imGearPage.DIB.ChannelCount));
+
+ // Save image page.
+ using (FileStream outputStream = new FileStream(@"../../../../../../Sample Output/ProcessUsingRegionOfInterest.png", FileMode.Create))
+ ImGearFileFormats.SavePage(imGearPage, outputStream, ImGearSavingFormats.PNG);
+ }
+ }
+}
diff --git a/Samples/Image Processing/ProcessUsingRegionOfInterest/README.md b/Samples/Image Processing/ProcessUsingRegionOfInterest/README.md
new file mode 100644
index 0000000..ca5d848
--- /dev/null
+++ b/Samples/Image Processing/ProcessUsingRegionOfInterest/README.md
@@ -0,0 +1,42 @@
+# Image Processing within a Region of Interest (ProcessUsingRegionOfInterest)
+
+ImageGear can apply image processing operations to a rectangluar Region of Interest (ROI) within a raster image.
+
+Use a Region of Interest when image processing operations should be limited to a meaningful area rather than the entire raster image.
+
+After loading a raster image, assign a ImGearROIRectangle object for a rectangular area of the image to its ROI property. When image processing is applied to that raster image, only the area within its ROI is affected.
+
+For more information about the ImageGear .NET API, please refer to the [ImageGear .NET Online Documentation](https://help.accusoft.com/ImageGear/latest/webframe.html).
+
+## System Requirements
+
+For a list of the system and development software necessary to build and run these samples, please refer to the [ImageGear .NET Online Documentation](https://help.accusoft.com/ImageGear/latest/webframe.html#system-requirements.html).
+
+## Building the Sample
+
+Starting with ImageGear v26.0, ImageGear supports .NET Core.
+
+All samples can be built using Microsoft Visual Studio 2022.
+
+To build this sample:
+
+1. Open the .sln file in the project directory using Visual Studio 2022.
+2. Select a Solution Configuration (Debug or Release) and an available Solution Platform (x64 or Any CPU).
+3. Build with Build Solution located in the Build menu.
+
+To build this sample under Linux:
+
+1. Install the Microsoft .NET SDK for your Linux distribution.
+2. Run `dotnet build ProcessUsingRegionOfInterest.sln`. By default this will build the Debug Solution Configuration.
+
+## Running the Sample
+
+When the sample is built, it produces a console application executable in the bin subdirectory. Run this application by double-clicking the application icon, or run it directly from Command Prompt (cmd.exe), PowerShell, or similar. Note that the working directory must be the same as the directory containing the sample executable in order to find the sample input image and the output directory. The input image(s) and output directory are specified relative to the location of the application in all of these samples.
+
+To run this sample under Linux, run the sample from "bin/Debug/net6.0/" (depending on the solution platform) using `./ProcessUsingRegionOfInterest`.
+
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
+
+## Image Processing Support in ImageGear .NET
+
+ImageGear .NET can perform a broad range of image cleanup, correction, and transformation functions. For more information on image processing support in ImageGear .NET, [please visit us at Accusoft.](https://www.accusoft.com/products/imagegear-collection/imagegear-dot-net/)
diff --git a/Samples/Image Processing/ProcessUsingRegionOfInterestMask/AssemblyInfo.cs b/Samples/Image Processing/ProcessUsingRegionOfInterestMask/AssemblyInfo.cs
new file mode 100644
index 0000000..e04ce50
--- /dev/null
+++ b/Samples/Image Processing/ProcessUsingRegionOfInterestMask/AssemblyInfo.cs
@@ -0,0 +1,35 @@
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("ProcessUsingRegionOfInterestMask")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("ImageGear for .NET")]
+[assembly: AssemblyCopyright("")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("f40057d5-1b6d-4699-b725-66718f5af46d")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Samples/Image Processing/ProcessUsingRegionOfInterestMask/ProcessUsingRegionOfInterestMask.csproj b/Samples/Image Processing/ProcessUsingRegionOfInterestMask/ProcessUsingRegionOfInterestMask.csproj
new file mode 100644
index 0000000..37c9fa3
--- /dev/null
+++ b/Samples/Image Processing/ProcessUsingRegionOfInterestMask/ProcessUsingRegionOfInterestMask.csproj
@@ -0,0 +1,14 @@
+
+
+
+ Exe
+ net6.0;net48
+ Major
+ false
+
+
+
+
+
+
+
diff --git a/Samples/Image Processing/ProcessUsingRegionOfInterestMask/ProcessUsingRegionOfInterestMask.sln b/Samples/Image Processing/ProcessUsingRegionOfInterestMask/ProcessUsingRegionOfInterestMask.sln
new file mode 100644
index 0000000..f3fb326
--- /dev/null
+++ b/Samples/Image Processing/ProcessUsingRegionOfInterestMask/ProcessUsingRegionOfInterestMask.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.3.32901.215
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProcessUsingRegionOfInterestMask", "ProcessUsingRegionOfInterestMask.csproj", "{D36A85DA-1EAB-448F-B561-C0FBE86CE3A0}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {D36A85DA-1EAB-448F-B561-C0FBE86CE3A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D36A85DA-1EAB-448F-B561-C0FBE86CE3A0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D36A85DA-1EAB-448F-B561-C0FBE86CE3A0}.Release|Any CPU.ActiveCfg = Release|x64
+ {D36A85DA-1EAB-448F-B561-C0FBE86CE3A0}.Release|Any CPU.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {B256FA35-838B-451D-ABFC-481C9A16FD56}
+ EndGlobalSection
+EndGlobal
diff --git a/Samples/Image Processing/ProcessUsingRegionOfInterestMask/Program.cs b/Samples/Image Processing/ProcessUsingRegionOfInterestMask/Program.cs
new file mode 100644
index 0000000..f4eeb91
--- /dev/null
+++ b/Samples/Image Processing/ProcessUsingRegionOfInterestMask/Program.cs
@@ -0,0 +1,37 @@
+using System.IO;
+using ImageGear.Core;
+using ImageGear.Formats;
+using ImageGear.Processing;
+
+namespace ProcessUsingRegionOfInterestMask
+{
+ internal class Program
+ {
+ static void Main()
+ {
+ // Initialize common formats.
+ ImGearCommonFormats.Initialize();
+
+ // Load image page.
+ ImGearRasterPage imGearPage = null;
+ using (FileStream inputStream = new FileStream(@"../../../../../../Sample Input/water.jpg", FileMode.Open, FileAccess.Read, FileShare.Read))
+ imGearPage = (ImGearRasterPage)ImGearFileFormats.LoadPage(inputStream);
+
+ // Create an elliptical Region of Interest (ROI) mask, fit to the image's width and height.
+ IImGearShape maskShape = new ImGearEllipse()
+ {
+ LeftTop = new ImGearPoint(0, 0),
+ RightBottom = new ImGearPoint(imGearPage.DIB.Width, imGearPage.DIB.Height)
+ };
+ imGearPage.ROI = new ImGearROIMask(0, 0, maskShape);
+
+ // Apply Gaussian blur within the Region of Interest.
+ if (ImGearRasterProcessing.Verifier.CanApplyGaussianBlur(imGearPage))
+ ImGearRasterProcessing.GaussianBlur(imGearPage, 5.0);
+
+ // Save image page.
+ using (FileStream outputStream = new FileStream(@"../../../../../../Sample Output/ProcessUsingRegionOfInterestMask.png", FileMode.Create))
+ ImGearFileFormats.SavePage(imGearPage, outputStream, ImGearSavingFormats.PNG);
+ }
+ }
+}
diff --git a/Samples/Image Processing/ProcessUsingRegionOfInterestMask/README.md b/Samples/Image Processing/ProcessUsingRegionOfInterestMask/README.md
new file mode 100644
index 0000000..cc86490
--- /dev/null
+++ b/Samples/Image Processing/ProcessUsingRegionOfInterestMask/README.md
@@ -0,0 +1,42 @@
+# Image Processing within a Region of Interest Mask (ProcessUsingRegionOfInterestMask)
+
+ImageGear can apply image processing operations to a bitonal Region of Interest (ROI) mask within a raster image.
+
+Use a Region of Interest mask when image processing operations should be limited to non-rectangular areas rather than the entire raster image.
+
+After loading a raster image, create an ImGearROIMask from either a bitonal image, a shape (such as an ellipse, polygon, or freehand), or a mask color. Assign this ImGearROIMask object to the raster image ROI property. When image processing is applied to that raster image, only the area within its ROI is affected.
+
+For more information about the ImageGear .NET API, please refer to the [ImageGear .NET Online Documentation](https://help.accusoft.com/ImageGear/latest/webframe.html).
+
+## System Requirements
+
+For a list of the system and development software necessary to build and run these samples, please refer to the [ImageGear .NET Online Documentation](https://help.accusoft.com/ImageGear/latest/webframe.html#system-requirements.html).
+
+## Building the Sample
+
+Starting with ImageGear v26.0, ImageGear supports .NET Core.
+
+All samples can be built using Microsoft Visual Studio 2022.
+
+To build this sample:
+
+1. Open the .sln file in the project directory using Visual Studio 2022.
+2. Select a Solution Configuration (Debug or Release) and an available Solution Platform (x64 or Any CPU).
+3. Build with Build Solution located in the Build menu.
+
+To build this sample under Linux:
+
+1. Install the Microsoft .NET SDK for your Linux distribution.
+2. Run `dotnet build ProcessUsingRegionOfInterestMask.sln`. By default this will build the Debug Solution Configuration.
+
+## Running the Sample
+
+When the sample is built, it produces a console application executable in the bin subdirectory. Run this application by double-clicking the application icon, or run it directly from Command Prompt (cmd.exe), PowerShell, or similar. Note that the working directory must be the same as the directory containing the sample executable in order to find the sample input image and the output directory. The input image(s) and output directory are specified relative to the location of the application in all of these samples.
+
+To run this sample under Linux, run the sample from "bin/Debug/net6.0/" (depending on the solution platform) using `./ProcessUsingRegionOfInterestMask`.
+
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
+
+## Image Processing Support in ImageGear .NET
+
+ImageGear .NET can perform a broad range of image cleanup, correction, and transformation functions. For more information on image processing support in ImageGear .NET, [please visit us at Accusoft.](https://www.accusoft.com/products/imagegear-collection/imagegear-dot-net/)
diff --git a/Samples/Image Processing/README.md b/Samples/Image Processing/README.md
index 440e690..9fefd7b 100644
--- a/Samples/Image Processing/README.md
+++ b/Samples/Image Processing/README.md
@@ -2,6 +2,14 @@
These samples demonstrate select image processing capabilities of ImageGear .NET.
+## AdjustContrastForRasterImage
+
+It is often necessary to manually adjust the contrast, brightness, and gamma of a raster image. Use the AdjustContrast method to do this.
+
+## CreateThumbnailImage
+
+After an image is loaded, use ImGearProcessing.CreateThumbnail() to create a thumbnail with specific dimensions. Interpolation options depend on the color space and bit depth of the image.
+
## CropAndResizeRasterImage
Once an image is loaded into ImageGear, it can be cropped. ImageGear crops independently on each side of the image, giving you complete control over what portion of the image to remove.
@@ -10,6 +18,26 @@ Once an image is loaded into ImageGear, it can be cropped. ImageGear crops indep
After an image is scanned, it is often slightly skewed, and can also contain "noise" in the background portion of the image. These can cause OCR to perform poorly. To correct these issues, load a raster image into ImageGear and use the Despeckle and Deskew functions to "fix" the image.
+## EqualizeContrastForRasterImage
+
+ImageGear can improve the contrast of a raster image using the EqualizeContrast method.
+
+## ErodeAndDilateRasterImage
+
+After a document is scanned, there can be some dot noise on the image. Sequential applying of morphological operations such as 'Erode' and 'Dilate' can significantly reduce or even completely remove this noise.
+
+## FlipAndRotateRasterImage
+
+After an image is loaded, use the ImGearProcessing.Flip() method to flip the image across either its horizontal or vertical axis. Use the ImGearProcessing.Rotate() method to rotate the image degrees clockwise using one of several interpolation techniques.
+
## ImageCleanup
-After a document is scanned, there can be undesirable artifacts on the image. Use the various image cleanup operations, such as `RemovePunchHoles` and `CleanBorders`, to clean up the image to make it suitable for further processing.
+After a document is scanned, there can be undesirable artifacts on the image. Use the various image cleanup operations, such as `CheckForNoise`, `RemoveDotLines`, `CleanBorders`, `TextAutoOrientation`, `RemoveLines` and `AutoCrop` to clean up the image to make it suitable for further processing. The sample also demonstrates how to invert black images and white text on a black background.
+
+## ProcessUsingRegionOfInterest
+
+Apply an image processing operation to a rectangluar Region of Interest (ROI) within a raster image instead of its entire area.
+
+## ProcessUsingRegionOfInterestMask
+
+Apply an image processing operation to a bitonal Region of Interest (ROI) mask within a raster image instead of its entire area.
diff --git a/Samples/Image/CompressUsingOptions/README.md b/Samples/Image/CompressUsingOptions/README.md
index 246eb3e..cb6c628 100644
--- a/Samples/Image/CompressUsingOptions/README.md
+++ b/Samples/Image/CompressUsingOptions/README.md
@@ -33,7 +33,7 @@ When the sample is built, it produces a console application executable in the bi
To run this sample under Linux, run the sample from "bin/Debug/net6.0/" using `./CompressUsingOptions`.
-_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com).
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
## Imaging Support in ImageGear .NET
diff --git a/Samples/Image/CreateMetadata/AssemblyInfo.cs b/Samples/Image/CreateMetadata/AssemblyInfo.cs
new file mode 100644
index 0000000..aef002d
--- /dev/null
+++ b/Samples/Image/CreateMetadata/AssemblyInfo.cs
@@ -0,0 +1,35 @@
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("CreateMetadata")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("ImageGear for .NET")]
+[assembly: AssemblyCopyright("")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("dde36122-eb34-41a8-b8b3-c25dbcd2d214")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Samples/Image/CreateMetadata/CreateMetadata.csproj b/Samples/Image/CreateMetadata/CreateMetadata.csproj
new file mode 100644
index 0000000..2a07f18
--- /dev/null
+++ b/Samples/Image/CreateMetadata/CreateMetadata.csproj
@@ -0,0 +1,15 @@
+
+
+
+ Exe
+ net6.0;net48
+ Major
+ false
+ AnyCPU
+
+
+
+
+
+
+
diff --git a/Samples/Image/CreateMetadata/CreateMetadata.sln b/Samples/Image/CreateMetadata/CreateMetadata.sln
new file mode 100644
index 0000000..82189e0
--- /dev/null
+++ b/Samples/Image/CreateMetadata/CreateMetadata.sln
@@ -0,0 +1,24 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.3.32901.215
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CreateMetadata", "CreateMetadata.csproj", "{85ED5555-8092-4AE3-BAD9-503F5F66E23E}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {85ED5555-8092-4AE3-BAD9-503F5F66E23E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {85ED5555-8092-4AE3-BAD9-503F5F66E23E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {85ED5555-8092-4AE3-BAD9-503F5F66E23E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {18DE4E22-8F69-45BC-B647-167B6BB128E8}
+ EndGlobalSection
+EndGlobal
diff --git a/Samples/Image/CreateMetadata/Program.cs b/Samples/Image/CreateMetadata/Program.cs
new file mode 100644
index 0000000..29374e4
--- /dev/null
+++ b/Samples/Image/CreateMetadata/Program.cs
@@ -0,0 +1,52 @@
+using System.IO;
+using ImageGear.Core;
+using ImageGear.Formats;
+using ImageGear.Formats.XMP;
+using ImageGear.Formats.XMP.DublinCore;
+using ImageGear.Formats.XMP.Photoshop;
+using ImageGear.Formats.XMP.RightsManagement;
+
+namespace AddMetadata
+{
+ internal class Program
+ {
+ static void Main()
+ {
+ // Initialize common formats.
+ ImGearCommonFormats.Initialize();
+
+ // Load an image page.
+ ImGearPage imGearPage = null;
+ using (FileStream inputStream = new FileStream(@"../../../../../../Sample Input/water.jpg", FileMode.Open, FileAccess.Read, FileShare.Read))
+ imGearPage = ImGearFileFormats.LoadPage(inputStream);
+
+ // Add an XMP Metadata structure to the image page.
+ imGearPage.Metadata.XMP = new ImGearXMPMetadataRoot();
+ ImGearXMPMetadataRoot xmpMetadata = (ImGearXMPMetadataRoot)imGearPage.Metadata.XMP;
+
+ // Create IPTC Photo Metadata for Creator field, XMP dc:Creator.
+ string creator = "Accusoft Corporation";
+ xmpMetadata.DublinCore = new ImGearDublinCoreXMPMetadata();
+ xmpMetadata.DublinCore.Creator = new ImGearXMPSeq(new string[] { creator });
+
+ // Create IPTC Photo Metadata for Credit Line field, XMP photoshop:Credit.
+ string creditLine = "Accusoft Corporation";
+ xmpMetadata.Photoshop = new ImGearPhotoshopXMPMetadata();
+ xmpMetadata.Photoshop.Credit = new ImGearXMPString(creditLine);
+
+ // Create IPTC Photo Metadata for Copyright Notice field, XMP dc:Rights.
+ string copyrightNotice = "Copyright Accusoft Corporation";
+ xmpMetadata.DublinCore.Rights = new ImGearXMPLangAlt();
+ xmpMetadata.DublinCore.Rights.Default = copyrightNotice;
+
+ // Create IPTC Photo Metadata for Web Statement of Rights, XMP xmpRights:WebStatement.
+ string webStatementOfRights = "https://github.com/Accusoft/imagegear-net-samples/blob/master/LICENSE";
+ xmpMetadata.RightsManagement = new ImGearRightsManagementXMPMetadata();
+ xmpMetadata.RightsManagement.WebStatement = new ImGearXMPString(webStatementOfRights);
+
+ // Save image page.
+ using (FileStream outputStream = new FileStream(@"../../../../../../Sample Output/CreateMetadata.jpg", FileMode.Create))
+ ImGearFileFormats.SavePage(imGearPage, outputStream, ImGearSavingFormats.JPG);
+ }
+ }
+}
diff --git a/Samples/Image/CreateMetadata/README.md b/Samples/Image/CreateMetadata/README.md
new file mode 100644
index 0000000..8aa2bd9
--- /dev/null
+++ b/Samples/Image/CreateMetadata/README.md
@@ -0,0 +1,42 @@
+# Create metadata with the Simplified API (CreateMetadata)
+
+Use ImageGear Simplified Metadata API to create metadata for images that support specific metadata formats.
+
+Metadata describes information such as details about an image's visual content, creation date, capture location, rights usage, and copyright information. Metadata is often used by other software to enhance workflows involving these images. For example, Google Images search results will display XMP metadata associated with the IPTC Photo Metadata Standard that identifies rights and licensing information for an image.
+
+This sample shows how to use ImageGear's Simplified Metadata API to add IPTC Photo Metadata fields for licensing and attribution to an existing JPEG image lacking this metadata.
+
+For more information about the ImageGear .NET API, please refer to the [ImageGear .NET Online Documentation](https://help.accusoft.com/ImageGear/latest/webframe.html).
+
+## System Requirements
+
+For a list of the system and development software necessary to build and run these samples, please refer to the [ImageGear .NET Online Documentation](https://help.accusoft.com/ImageGear/latest/webframe.html#system-requirements.html).
+
+## Building the Sample
+
+Starting with ImageGear v26.0, ImageGear supports .NET Core.
+
+All samples can be built using Microsoft Visual Studio 2022.
+
+To build this sample:
+
+1. Open the .sln file in the project directory using Visual Studio 2022.
+2. Select a Solution Configuration (Debug or Release) and an available Solution Platform (x64 or Any CPU).
+3. Build with Build Solution located in the Build menu.
+
+To build this sample under Linux:
+
+1. Install the Microsoft .NET SDK for your Linux distribution.
+2. Run `dotnet build CreateMetadata.sln`. By default this will build the Debug Solution Configuration.
+
+## Running the Sample
+
+When the sample is built, it produces a console application executable in the bin subdirectory. Run this application by double-clicking the application icon, or run it directly from Command Prompt (cmd.exe), PowerShell, or similar. Note that the working directory must be the same as the directory containing the sample executable in order to find the sample input image and the output directory. The input image(s) and output directory are specified relative to the location of the application in all of these samples.
+
+To run this sample under Linux, run the sample from "bin/Debug/net6.0/" (depending on the solution platform) using `./CreateMetadata.sln`.
+
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
+
+## Imaging Support in ImageGear .NET
+
+ImageGear .NET supports the most commonly used image, graphic, and document formats. For more information on imaging support in ImageGear .NET, [please visit us at Accusoft.](https://www.accusoft.com/products/imagegear-collection/imagegear-dot-net/)
diff --git a/Samples/Image/DetectImageFormat/README.md b/Samples/Image/DetectImageFormat/README.md
index 0a64a31..50d63d6 100644
--- a/Samples/Image/DetectImageFormat/README.md
+++ b/Samples/Image/DetectImageFormat/README.md
@@ -33,7 +33,7 @@ When the sample is built, it produces a console application executable in the bi
To run this sample under Linux, run the sample from "bin/Debug/net6.0/" (depending on the solution platform) using `./DetectImageFormat`.
-_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com).
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
## Imaging Support in ImageGear .NET
diff --git a/Samples/Image/LoadRawImage/AssemblyInfo.cs b/Samples/Image/LoadRawImage/AssemblyInfo.cs
new file mode 100644
index 0000000..77f63a9
--- /dev/null
+++ b/Samples/Image/LoadRawImage/AssemblyInfo.cs
@@ -0,0 +1,35 @@
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("LoadRawImage")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("ImageGear for .NET")]
+[assembly: AssemblyCopyright("")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("7f2813fd-2215-425d-8631-c0dfeff1d2c8")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Samples/Image/LoadRawImage/LoadRawImage.csproj b/Samples/Image/LoadRawImage/LoadRawImage.csproj
new file mode 100644
index 0000000..37ef8fd
--- /dev/null
+++ b/Samples/Image/LoadRawImage/LoadRawImage.csproj
@@ -0,0 +1,14 @@
+
+
+
+ Exe
+ net6.0;net48
+ Major
+ false
+
+
+
+
+
+
+
diff --git a/Samples/Image/LoadRawImage/LoadRawImage.sln b/Samples/Image/LoadRawImage/LoadRawImage.sln
new file mode 100644
index 0000000..3c15d5e
--- /dev/null
+++ b/Samples/Image/LoadRawImage/LoadRawImage.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.1.32319.34
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LoadRawImage", "LoadRawImage.csproj", "{C0B1C07F-4A1C-4076-A5DF-10026A083C27}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {C0B1C07F-4A1C-4076-A5DF-10026A083C27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C0B1C07F-4A1C-4076-A5DF-10026A083C27}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C0B1C07F-4A1C-4076-A5DF-10026A083C27}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C0B1C07F-4A1C-4076-A5DF-10026A083C27}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {A27D5B3F-B753-4D4C-852F-1519CFB9CBB9}
+ EndGlobalSection
+EndGlobal
diff --git a/Samples/Image/LoadRawImage/Program.cs b/Samples/Image/LoadRawImage/Program.cs
new file mode 100644
index 0000000..abbdcd0
--- /dev/null
+++ b/Samples/Image/LoadRawImage/Program.cs
@@ -0,0 +1,36 @@
+using System.IO;
+using ImageGear.Core;
+using ImageGear.Formats;
+
+namespace LoadRawImage
+{
+ class Program
+ {
+ static void Main()
+ {
+ // Initialize common formats.
+ ImGearCommonFormats.Initialize();
+
+ // Define the options for loading the raw image data.
+ ImGearRawLoadOptions imGearRawLoadOptions = new ImGearRawLoadOptions()
+ {
+ Format = ImGearFormats.RAW,
+ Compression = ImGearCompressions.CCITT_G4,
+ BitsPerChannel = 1,
+ Alignment = ImGearRawAlignment.Word,
+ Offset = 0,
+ Width = 2560,
+ Height = 3500
+ };
+
+ // Load the raw image data.
+ ImGearPage imGearPage = null;
+ using (FileStream inputStream = new FileStream(@"../../../../../../Sample Input/G4ImageData.dat", FileMode.Open, FileAccess.Read, FileShare.Read))
+ imGearPage = ImGearFileFormats.LoadPage(inputStream, 0, imGearRawLoadOptions);
+
+ // Save the raw image data to a PNG image.
+ using (FileStream outputStream = new FileStream(@"../../../../../../Sample Output/LoadRawImage.png", FileMode.Create))
+ ImGearFileFormats.SavePage(imGearPage, outputStream, ImGearSavingFormats.PNG);
+ }
+ }
+}
diff --git a/Samples/Image/LoadRawImage/README.md b/Samples/Image/LoadRawImage/README.md
new file mode 100644
index 0000000..c756483
--- /dev/null
+++ b/Samples/Image/LoadRawImage/README.md
@@ -0,0 +1,40 @@
+# Load Raw Image Data (LoadRawImage)
+
+When opening headerless image content, ImageGear can open images without headers as long as a complete description of the image data is provided.
+
+This sample demonstrates how to open images that do not have headers. The image data, usually compressed, is provided to ImageGear, along with a description of the image data. ImageGear then opens the image data and proceeds as it would with any other image.
+
+For more information about the ImageGear .NET API, please refer to the [ImageGear .NET Online Documentation](https://help.accusoft.com/ImageGear/latest/webframe.html).
+
+## System Requirements
+
+For a list of the system and development software necessary to build and run these samples, please refer to the [ImageGear .NET Online Documentation](https://help.accusoft.com/ImageGear/latest/webframe.html#system-requirements.html).
+
+## Building the Sample
+
+Starting with ImageGear v26.0, ImageGear supports .NET Core.
+
+All samples can be built using Microsoft Visual Studio 2022.
+
+To build this sample:
+
+1. Open the .sln file in the project directory using Visual Studio 2022.
+2. Select a Solution Configuration (Debug or Release) and an available Solution Platform (x64 or Any CPU).
+3. Build with Build Solution located in the Build menu.
+
+To build this sample under Linux:
+
+1. Install the Microsoft .NET SDK for your Linux distribution.
+2. Run `dotnet build LoadRawImage.sln`. By default this will build the Debug Solution Configuration.
+
+## Running the Sample
+
+When the sample is built, it produces a console application executable in the bin subdirectory. Run this application by double-clicking the application icon, or run it directly from Command Prompt (cmd.exe), PowerShell, or similar. Note that the working directory must be the same as the directory containing the sample executable in order to find the sample input image and the output directory. The input image(s) and output directory are specified relative to the location of the application in all of these samples.
+
+To run this sample under Linux, run the sample from "bin/Debug/net6.0/" (depending on the solution platform) using `./LoadRawImage`.
+
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
+
+## Imaging Support in ImageGear .NET
+
+ImageGear .NET supports the most commonly used image, graphic, and document formats. For more information on imaging support in ImageGear .NET, [please visit us at Accusoft.](https://www.accusoft.com/products/imagegear-collection/imagegear-dot-net/)
diff --git a/Samples/Image/LoadingAndSaving/README.md b/Samples/Image/LoadingAndSaving/README.md
index 0164751..bde6f0a 100644
--- a/Samples/Image/LoadingAndSaving/README.md
+++ b/Samples/Image/LoadingAndSaving/README.md
@@ -33,7 +33,7 @@ When the sample is built, it produces a console application executable in the bi
To run this sample under Linux, run the sample from "bin/Debug/net6.0/" (depending on the solution platform) using `./LoadingAndSaving`.
-_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com).
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
## Imaging Support in ImageGear .NET
diff --git a/Samples/Image/LoadingWithLoadOptionsAndSaving/AssemblyInfo.cs b/Samples/Image/LoadingWithLoadOptionsAndSaving/AssemblyInfo.cs
new file mode 100644
index 0000000..527da0b
--- /dev/null
+++ b/Samples/Image/LoadingWithLoadOptionsAndSaving/AssemblyInfo.cs
@@ -0,0 +1,35 @@
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("LoadingWithLoadOptionsAndSaving")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("ImageGear for .NET")]
+[assembly: AssemblyCopyright("")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("1C14A92C-2B67-478C-B1FE-9A0C0C6FEE0E")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Samples/Image/LoadingWithLoadOptionsAndSaving/LoadingWithLoadOptionsAndSaving.csproj b/Samples/Image/LoadingWithLoadOptionsAndSaving/LoadingWithLoadOptionsAndSaving.csproj
new file mode 100644
index 0000000..3e3b567
--- /dev/null
+++ b/Samples/Image/LoadingWithLoadOptionsAndSaving/LoadingWithLoadOptionsAndSaving.csproj
@@ -0,0 +1,14 @@
+
+
+
+ Exe
+ net6.0;net48
+ Major
+ false
+
+
+
+
+
+
+
diff --git a/Samples/Image/LoadingWithLoadOptionsAndSaving/LoadingWithLoadOptionsAndSaving.sln b/Samples/Image/LoadingWithLoadOptionsAndSaving/LoadingWithLoadOptionsAndSaving.sln
new file mode 100644
index 0000000..b5a8a6c
--- /dev/null
+++ b/Samples/Image/LoadingWithLoadOptionsAndSaving/LoadingWithLoadOptionsAndSaving.sln
@@ -0,0 +1,31 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.2.33027.314
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LoadingWithLoadOptionsAndSaving", "LoadingWithLoadOptionsAndSaving.csproj", "{EE63499F-1954-4DF6-B254-28BA47DC6B7F}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Debug|x64 = Debug|x64
+ Release|Any CPU = Release|Any CPU
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {EE63499F-1954-4DF6-B254-28BA47DC6B7F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {EE63499F-1954-4DF6-B254-28BA47DC6B7F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {EE63499F-1954-4DF6-B254-28BA47DC6B7F}.Debug|x64.ActiveCfg = Debug|x64
+ {EE63499F-1954-4DF6-B254-28BA47DC6B7F}.Debug|x64.Build.0 = Debug|x64
+ {EE63499F-1954-4DF6-B254-28BA47DC6B7F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {EE63499F-1954-4DF6-B254-28BA47DC6B7F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {EE63499F-1954-4DF6-B254-28BA47DC6B7F}.Release|x64.ActiveCfg = Release|x64
+ {EE63499F-1954-4DF6-B254-28BA47DC6B7F}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {8278F872-8793-4296-A0B5-DC795039FD41}
+ EndGlobalSection
+EndGlobal
diff --git a/Samples/Image/LoadingWithLoadOptionsAndSaving/Program.cs b/Samples/Image/LoadingWithLoadOptionsAndSaving/Program.cs
new file mode 100644
index 0000000..e6e4a92
--- /dev/null
+++ b/Samples/Image/LoadingWithLoadOptionsAndSaving/Program.cs
@@ -0,0 +1,29 @@
+using System.IO;
+using ImageGear.Core;
+using ImageGear.Formats;
+
+namespace LoadingWithLoadOptionsAndSaving
+{
+ class Program
+ {
+ static void Main()
+ {
+ // Initialize common formats.
+ ImGearCommonFormats.Initialize();
+
+ // When image format is already known, specify image format explicitly to bypass auto-detection.
+ ImGearLoadOptions imGearLoadOptions = new ImGearLoadOptions();
+ imGearLoadOptions.Format = ImGearFormats.TIF;
+
+ // Load image page using optional parameters.
+ ImGearPage imGearPage = null;
+ int pageIndex = 1;
+ using (FileStream inputStream = new FileStream(@"../../../../../../Sample Input/multi-page-depth-24.tif", FileMode.Open, FileAccess.Read, FileShare.Read))
+ imGearPage = ImGearFileFormats.LoadPage(inputStream, pageIndex, imGearLoadOptions);
+
+ // Save image page.
+ using (FileStream outputStream = new FileStream(@"../../../../../../Sample Output/LoadingWithLoadOptionsAndSaving.jpg", FileMode.Create))
+ ImGearFileFormats.SavePage(imGearPage, outputStream, ImGearSavingFormats.JPG);
+ }
+ }
+}
diff --git a/Samples/Image/LoadingWithLoadOptionsAndSaving/README.md b/Samples/Image/LoadingWithLoadOptionsAndSaving/README.md
new file mode 100644
index 0000000..457d0b8
--- /dev/null
+++ b/Samples/Image/LoadingWithLoadOptionsAndSaving/README.md
@@ -0,0 +1,42 @@
+# Loading With LoadOptions And Saving (LoadingWithLoadOptionsAndSaving)
+
+This sample demonstrates one of several different uses for loading an image using optional parameters.
+
+There may be a need to load an image specifically by file type, or possibly loading the thumbnail. You might need to stitch several tiles together in a later process. Perhaps modifying the XMP stream or passing it as a single binary is useful. This is where the LoadOptions come into play.
+
+Unlike ImageGear Filter Control Parameters, the LoadOptions expands beyond just normal images, such as Office Files, XMP streams, and thumbnails.
+
+For more information about the ImageGear .NET API, please refer to the [ImageGear .NET Online Documentation](https://help.accusoft.com/ImageGear/latest/webframe.html).
+
+## System Requirements
+
+For a list of the system and development software necessary to build and run these samples, please refer to the [ImageGear .NET Online Documentation](https://help.accusoft.com/ImageGear/latest/webframe.html#system-requirements.html).
+
+## Building the Sample
+
+Starting with ImageGear v26.0, ImageGear supports .NET Core.
+
+All samples can be built using Microsoft Visual Studio 2022.
+
+To build this sample:
+
+1. Open the .sln file in the project directory using Visual Studio 2022.
+2. Select a Solution Configuration (Debug or Release) and an available Solution Platform (x64 or Any CPU).
+3. Build with Build Solution located in the Build menu.
+
+To build this sample under Linux:
+
+1. Install the Microsoft .NET SDK for your Linux distribution.
+2. Run `dotnet build LoadingWithLoadOptionsAndSaving.sln`. By default this will build the Debug Solution Configuration.
+
+## Running the Sample
+
+When the sample is built, it produces a console application executable in the bin subdirectory. Run this application by double-clicking the application icon, or run it directly from Command Prompt (cmd.exe), PowerShell, or similar. Note that the working directory must be the same as the directory containing the sample executable in order to find the sample input image and the output directory. The input image(s) and output directory are specified relative to the location of the application in all of these samples.
+
+To run this sample under Linux, run the sample from "bin/Debug/net6.0/" (depending on the solution platform) using `./LoadingWithLoadOptionsAndSaving`.
+
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
+
+## Imaging Support in ImageGear .NET
+
+ImageGear .NET supports the most commonly used image, graphic, and document formats. For more information on imaging support in ImageGear .NET, [please visit us at Accusoft.](https://www.accusoft.com/products/imagegear-collection/imagegear-dot-net/)
diff --git a/Samples/Image/MetadataGeneralAPI/README.md b/Samples/Image/MetadataGeneralAPI/README.md
index fd53a0b..51ef343 100644
--- a/Samples/Image/MetadataGeneralAPI/README.md
+++ b/Samples/Image/MetadataGeneralAPI/README.md
@@ -33,7 +33,7 @@ When the sample is built, it produces a console application executable in the bi
To run this sample under Linux, run the sample from "bin/Debug/net6.0/" (depending on the solution platform) using `./MetadataGeneralAPI`.
-_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com).
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
## Imaging Support in ImageGear .NET
diff --git a/Samples/Image/MetadataSimplifiedAPI/AssemblyInfo.cs b/Samples/Image/MetadataSimplifiedAPI/AssemblyInfo.cs
new file mode 100644
index 0000000..ef8be00
--- /dev/null
+++ b/Samples/Image/MetadataSimplifiedAPI/AssemblyInfo.cs
@@ -0,0 +1,35 @@
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("MetadataSimplifiedAPI")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("ImageGear for .NET")]
+[assembly: AssemblyCopyright("")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("ddc4ffec-f678-4c32-9b3e-3320f48dc4ef")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Samples/Image/MetadataSimplifiedAPI/MetadataSimplifiedAPI.csproj b/Samples/Image/MetadataSimplifiedAPI/MetadataSimplifiedAPI.csproj
new file mode 100644
index 0000000..37ef8fd
--- /dev/null
+++ b/Samples/Image/MetadataSimplifiedAPI/MetadataSimplifiedAPI.csproj
@@ -0,0 +1,14 @@
+
+
+
+ Exe
+ net6.0;net48
+ Major
+ false
+
+
+
+
+
+
+
diff --git a/Samples/Image/MetadataSimplifiedAPI/MetadataSimplifiedAPI.sln b/Samples/Image/MetadataSimplifiedAPI/MetadataSimplifiedAPI.sln
new file mode 100644
index 0000000..7d60ff9
--- /dev/null
+++ b/Samples/Image/MetadataSimplifiedAPI/MetadataSimplifiedAPI.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.1.32319.34
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MetadataSimplifiedAPI", "MetadataSimplifiedAPI.csproj", "{E4DF871D-89EF-4394-A4BC-EEF10B1DB914}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {E4DF871D-89EF-4394-A4BC-EEF10B1DB914}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E4DF871D-89EF-4394-A4BC-EEF10B1DB914}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E4DF871D-89EF-4394-A4BC-EEF10B1DB914}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E4DF871D-89EF-4394-A4BC-EEF10B1DB914}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {00351980-45A7-4f6b-A2A0-93D6FE646B3A}
+ EndGlobalSection
+EndGlobal
diff --git a/Samples/Image/MetadataSimplifiedAPI/Program.cs b/Samples/Image/MetadataSimplifiedAPI/Program.cs
new file mode 100644
index 0000000..97fb4cc
--- /dev/null
+++ b/Samples/Image/MetadataSimplifiedAPI/Program.cs
@@ -0,0 +1,48 @@
+using System;
+using System.IO;
+using ImageGear.Core;
+using ImageGear.Formats;
+using ImageGear.Formats.EXIF;
+
+namespace MetadataSimplifiedAPI
+{
+ class Program
+ {
+ static void Main()
+ {
+ // Initialize common formats.
+ ImGearCommonFormats.Initialize();
+
+ // Load image page.
+ ImGearMetadataHead imGearMetadataHead = null;
+ using (FileStream inputStream = new FileStream(@"../../../../../../Sample Input/Road.jpg", FileMode.Open, FileAccess.Read, FileShare.Read))
+ imGearMetadataHead = ImGearFileFormats.LoadPageMetadata(inputStream, 0);
+
+ // Get simplified access to EXIF and EXIF GPS metadata.
+ ImGearEXIFMetadata imGearEXIFMetadata = imGearMetadataHead.EXIF as ImGearEXIFMetadata;
+ if (imGearEXIFMetadata != null)
+ {
+ ImGearEXIFGPSMetadata imGearEXIFGPSMetadata = imGearEXIFMetadata.GPS;
+
+ // Read the EXIF Model and EXIF GPS ImgDirection metadata tags.
+ Console.WriteLine("imGearEXIFMetadata.Model: " + imGearEXIFMetadata.Model);
+ if (imGearEXIFGPSMetadata != null)
+ Console.WriteLine("imGearEXIFGPSMetadata.ImgDirection: " + imGearEXIFGPSMetadata.ImgDirection);
+
+ // Create a new EXIF Software metadata tag.
+ imGearEXIFMetadata.Software = "Updated by MetadataSimplifiedAPI sample";
+
+ // Update the EXIF Make metadata tag.
+ imGearEXIFMetadata.Make = imGearEXIFMetadata.Make + " (MetadataSimplifiedAPI)";
+
+ // Delete the EXIF DateTimeDigitized metadata tag.
+ imGearEXIFMetadata.DateTimeDigitized = null;
+
+ // Save image with the updated EXIF metadata tags.
+ using (FileStream inputStream = new FileStream(@"../../../../../../Sample Input/Road.jpg", FileMode.Open, FileAccess.Read, FileShare.Read))
+ using (FileStream outputStream = new FileStream(@"../../../../../../Sample Output/MetadataSimplifiedAPI.jpg", FileMode.Create))
+ ImGearFileFormats.UpdatePageMetadata(inputStream, outputStream, imGearMetadataHead, 0);
+ }
+ }
+ }
+}
diff --git a/Samples/Image/MetadataSimplifiedAPI/README.md b/Samples/Image/MetadataSimplifiedAPI/README.md
new file mode 100644
index 0000000..f0f8e96
--- /dev/null
+++ b/Samples/Image/MetadataSimplifiedAPI/README.md
@@ -0,0 +1,40 @@
+# Access and Update Metadata with a Simplified API (MetadataSimplifiedAPI)
+
+When using ImageGear with raster images, ImageGear can access and modify the metadata contained in the images using a simplified API.
+
+This sample demonstrates how to read, create, update, and delete metadata using the simplified metadata API in ImageGear. The simplified API allows you to read and modify only the metadata of interest without having to interact with the entire metadata tree.
+
+For more information about the ImageGear .NET API, please refer to the [ImageGear .NET Online Documentation](https://help.accusoft.com/ImageGear/latest/webframe.html).
+
+## System Requirements
+
+For a list of the system and development software necessary to build and run these samples, please refer to the [ImageGear .NET Online Documentation](https://help.accusoft.com/ImageGear/latest/webframe.html#system-requirements.html).
+
+## Building the Sample
+
+Starting with ImageGear v26.0, ImageGear supports .NET Core.
+
+All samples can be built using Microsoft Visual Studio 2022.
+
+To build this sample:
+
+1. Open the .sln file in the project directory using Visual Studio 2022.
+2. Select a Solution Configuration (Debug or Release) and an available Solution Platform (x64 or Any CPU).
+3. Build with Build Solution located in the Build menu.
+
+To build this sample under Linux:
+
+1. Install the Microsoft .NET SDK for your Linux distribution.
+2. Run `dotnet build MetadataSimplifiedAPI.sln`. By default this will build the Debug Solution Configuration.
+
+## Running the Sample
+
+When the sample is built, it produces a console application executable in the bin subdirectory. Run this application by double-clicking the application icon, or run it directly from Command Prompt (cmd.exe), PowerShell, or similar. Note that the working directory must be the same as the directory containing the sample executable in order to find the sample input image and the output directory. The input image(s) and output directory are specified relative to the location of the application in all of these samples.
+
+To run this sample under Linux, run the sample from "bin/Debug/net6.0/" (depending on the solution platform) using `./MetadataSimplifiedAPI`.
+
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
+
+## Imaging Support in ImageGear .NET
+
+ImageGear .NET supports the most commonly used image, graphic, and document formats. For more information on imaging support in ImageGear .NET, [please visit us at Accusoft.](https://www.accusoft.com/products/imagegear-collection/imagegear-dot-net/)
diff --git a/Samples/Image/MetadataSimplifiedAPIUseArraysAndStructures/AssemblyInfo.cs b/Samples/Image/MetadataSimplifiedAPIUseArraysAndStructures/AssemblyInfo.cs
new file mode 100644
index 0000000..127c197
--- /dev/null
+++ b/Samples/Image/MetadataSimplifiedAPIUseArraysAndStructures/AssemblyInfo.cs
@@ -0,0 +1,35 @@
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("MetadataSimplifiedAPIArraysAndStructures")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("ImageGear for .NET")]
+[assembly: AssemblyCopyright("")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("45c8157c-4fb2-455b-b0e1-7dbd63ee8173")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Samples/Image/MetadataSimplifiedAPIUseArraysAndStructures/MetadataSimplifiedAPIUseArraysAndStructures.csproj b/Samples/Image/MetadataSimplifiedAPIUseArraysAndStructures/MetadataSimplifiedAPIUseArraysAndStructures.csproj
new file mode 100644
index 0000000..2a07f18
--- /dev/null
+++ b/Samples/Image/MetadataSimplifiedAPIUseArraysAndStructures/MetadataSimplifiedAPIUseArraysAndStructures.csproj
@@ -0,0 +1,15 @@
+
+
+
+ Exe
+ net6.0;net48
+ Major
+ false
+ AnyCPU
+
+
+
+
+
+
+
diff --git a/Samples/Image/MetadataSimplifiedAPIUseArraysAndStructures/MetadataSimplifiedAPIUseArraysAndStructures.sln b/Samples/Image/MetadataSimplifiedAPIUseArraysAndStructures/MetadataSimplifiedAPIUseArraysAndStructures.sln
new file mode 100644
index 0000000..0061a6c
--- /dev/null
+++ b/Samples/Image/MetadataSimplifiedAPIUseArraysAndStructures/MetadataSimplifiedAPIUseArraysAndStructures.sln
@@ -0,0 +1,24 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.3.32901.215
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MetadataSimplifiedAPIUseArraysAndStructures", "MetadataSimplifiedAPIUseArraysAndStructures.csproj", "{E91938F6-909C-4914-ABA8-CE119071D84C}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {E91938F6-909C-4914-ABA8-CE119071D84C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E91938F6-909C-4914-ABA8-CE119071D84C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E91938F6-909C-4914-ABA8-CE119071D84C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {A595DD51-3F7C-4D15-805C-E47A6EB7181B}
+ EndGlobalSection
+EndGlobal
diff --git a/Samples/Image/MetadataSimplifiedAPIUseArraysAndStructures/Program.cs b/Samples/Image/MetadataSimplifiedAPIUseArraysAndStructures/Program.cs
new file mode 100644
index 0000000..a262b4a
--- /dev/null
+++ b/Samples/Image/MetadataSimplifiedAPIUseArraysAndStructures/Program.cs
@@ -0,0 +1,57 @@
+using System;
+using System.Diagnostics;
+using System.IO;
+using ImageGear.Core;
+using ImageGear.Formats;
+using ImageGear.Formats.XMP;
+
+namespace MetadataSimplifiedAPIUseArraysAndStructures
+{
+ internal class Program
+ {
+ static void Main()
+ {
+ // Initialize common formats.
+ ImGearCommonFormats.Initialize();
+
+ // Load image page.
+ ImGearPage imGearPage = null;
+ using (FileStream inputStream = new FileStream(@"../../../../../../Sample Input/water.jpg", FileMode.Open, FileAccess.Read, FileShare.Read))
+ imGearPage = ImGearFileFormats.LoadPage(inputStream);
+
+ // Reset the XMP metadata structure for the image.
+ imGearPage.Metadata.XMP = new ImGearXMPMetadataRoot();
+
+ // Note: Each time you access an array or structure in the Simplified Metadata API, ImageGear recreates the data structure from current values.
+ // To modify values, populate a local object and then assign back to the property. Otherwise, edits are made to a discarded duplicate object.
+
+ // For example, the XMP.DublinCore.Subject property remains unchanged because its getter returns a new object from existing data.
+ ImGearXMPMetadataRoot xmpMetadataRoot = imGearPage.Metadata.XMP as ImGearXMPMetadataRoot;
+ (imGearPage.Metadata.XMP as ImGearXMPMetadataRoot).DublinCore = new ImageGear.Formats.XMP.DublinCore.ImGearDublinCoreXMPMetadata();
+ xmpMetadataRoot.DublinCore.Subject = new ImGearXMPBag();
+ xmpMetadataRoot.DublinCore.Subject.Add(new ImGearXMPString("Subject1"));
+ xmpMetadataRoot.DublinCore.Subject.Add(new ImGearXMPString("Subject2"));
+ Console.WriteLine($"XMP.DublinCore.Subject has {xmpMetadataRoot.DublinCore.Subject.Count} values.");
+
+ // Instead, add values to a local object and set the XMP.DublinCore.Subject property to change its data.
+ ImGearXMPBag subject = new ImGearXMPBag();
+ subject.Add(new ImGearXMPString("Subject3"));
+ subject.Add(new ImGearXMPString("Subject4"));
+ (imGearPage.Metadata.XMP as ImGearXMPMetadataRoot).DublinCore.Subject = subject;
+ Console.WriteLine($"XMP.DublinCore.Subject has {xmpMetadataRoot.DublinCore.Subject.Count} values.");
+
+ // All arrays and structures are recreated each time they are accessed when using the Simplified Metadata API.
+ // Therefore access XMP.DublinCore.Subject once for best performance.
+ subject = (imGearPage.Metadata.XMP as ImGearXMPMetadataRoot).DublinCore.Subject;
+ // Now the array or structure contents can be efficiently accessed as much as needed.
+ for (int i = 0; i < subject.Count; i++)
+ {
+ String value = subject[i].Value;
+ }
+
+ // Save image page.
+ using (FileStream outputStream = new FileStream(@"../../../../../../Sample Output/MetadataSimplifiedAPIUseArraysAndStructures.png", FileMode.Create))
+ ImGearFileFormats.SavePage(imGearPage, outputStream, ImGearSavingFormats.PNG);
+ }
+ }
+}
diff --git a/Samples/Image/MetadataSimplifiedAPIUseArraysAndStructures/README.md b/Samples/Image/MetadataSimplifiedAPIUseArraysAndStructures/README.md
new file mode 100644
index 0000000..5bc46f9
--- /dev/null
+++ b/Samples/Image/MetadataSimplifiedAPIUseArraysAndStructures/README.md
@@ -0,0 +1,42 @@
+# Use (Simplified Metadata API) Arrays and Structures (MetadataSimplifiedAPIUseArraysAndStructures)
+
+Avoid subtle, undesired outcomes when using ImageGear's Simplified Metadata API.
+
+Because the Simplified Metadata API reuses ImageGear's General Metadata tree for storage, getting a value for a property representing either an array or another tree-like data structure returns a cloned object. Optimizing reads to such properties will improve performance. When updating values to such properties, also beware of losing changes from not setting the property's updated value after changes are made.
+
+This sample shows recommended techniques when working with the Simplified Metadata API, using XMP.DublinCore.Subject as an example.
+
+For more information about the ImageGear .NET API, please refer to the [ImageGear .NET Online Documentation](https://help.accusoft.com/ImageGear/latest/webframe.html).
+
+## System Requirements
+
+For a list of the system and development software necessary to build and run these samples, please refer to the [ImageGear .NET Online Documentation](https://help.accusoft.com/ImageGear/latest/webframe.html#system-requirements.html).
+
+## Building the Sample
+
+Starting with ImageGear v26.0, ImageGear supports .NET Core.
+
+All samples can be built using Microsoft Visual Studio 2022.
+
+To build this sample:
+
+1. Open the .sln file in the project directory using Visual Studio 2022.
+2. Select a Solution Configuration (Debug or Release) and an available Solution Platform (x64 or Any CPU).
+3. Build with Build Solution located in the Build menu.
+
+To build this sample under Linux:
+
+1. Install the Microsoft .NET SDK for your Linux distribution.
+2. Run `dotnet build MetadataSimplifiedAPIUseArraysAndStructures.sln`. By default this will build the Debug Solution Configuration.
+
+## Running the Sample
+
+When the sample is built, it produces a console application executable in the bin subdirectory. Run this application by double-clicking the application icon, or run it directly from Command Prompt (cmd.exe), PowerShell, or similar. Note that the working directory must be the same as the directory containing the sample executable in order to find the sample input image and the output directory. The input image(s) and output directory are specified relative to the location of the application in all of these samples.
+
+To run this sample under Linux, run the sample from "bin/Debug/net6.0/" (depending on the solution platform) using `./MetadataSimplifiedAPIUseArraysAndStructures`.
+
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
+
+## Imaging Support in ImageGear .NET
+
+ImageGear .NET supports the most commonly used image, graphic, and document formats. For more information on imaging support in ImageGear .NET, [please visit us at Accusoft.](https://www.accusoft.com/products/imagegear-collection/imagegear-dot-net/)
diff --git a/Samples/Image/README.md b/Samples/Image/README.md
index 8a87cbc..0f603cc 100644
--- a/Samples/Image/README.md
+++ b/Samples/Image/README.md
@@ -6,6 +6,10 @@ These samples demonstrate general raster image functionality in ImageGear .NET.
After an image is loaded, ImageGear provides functionality to manually set conversion and compression options before saving the image in JPEG format.
+## CreateMetadata
+
+This sample uses ImageGear Simplified Metadata API to add IPTC Photo Metadata fields to an existing JPEG image.
+
## DetectImageFormat
After a stream is loaded, ImageGear provides functionality to automatically detect an image's format.
@@ -14,6 +18,38 @@ After a stream is loaded, ImageGear provides functionality to automatically dete
This sample demonstrates two of the most basic raster functions of ImageGear, loading and saving an image using the LoadPage and SavePage functions.
+## LoadingWithLoadOptionsAndSaving
+
+This sample demonstrates loading an image using basic LoadOptions and then saving the image using the SavePage functions.
+
+## LoadRawImage
+
+This sample demonstrates how to open images that do not have headers.
+
## MetadataGeneralAPI
After an image is loaded, ImageGear provides functionality to access both document and page level metadata.
+
+## MetadataSimplifiedAPI
+
+This sample demonstrates how to read, create, update, and delete metadata using the simplified metadata API in ImageGear.
+
+## MetadataSimplifiedAPIUseArraysAndStructures
+
+This sample shows recommended techniques when working with the Simplified Metadata API, using XMP.DublinCore.Subject as an example.
+
+## SetFilterControlParametersGlobally
+
+This sample shows how to use Filter Control Parameters to save a JPEG file with lossless compression instead of lossy compression.
+
+## SimplifiedMetadataWithNullableFields
+
+After an image is loaded, ImageGear provides the ability to access the metadata without knowing the tree or if the information exists.
+
+## SpecifyColorProfilesGlobally
+
+This sample shows how to implicitly use ICM color profiles to convert the color space in a JPEG image from RGB to CMYK.
+
+## SpecifyColorProfilesLocally
+
+This sample shows how to explicitly use ICM color profiles to convert the color space in a JPEG image from RGB to CMYK.
diff --git a/Samples/Image/SetFilterControlParametersGlobally/AssemblyInfo.cs b/Samples/Image/SetFilterControlParametersGlobally/AssemblyInfo.cs
new file mode 100644
index 0000000..59bc81c
--- /dev/null
+++ b/Samples/Image/SetFilterControlParametersGlobally/AssemblyInfo.cs
@@ -0,0 +1,35 @@
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("SetFilterControlParametersGlobally")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("ImageGear for .NET")]
+[assembly: AssemblyCopyright("")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("c8837c1a-1a24-417d-a2bb-79f26af76e14")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Samples/Image/SetFilterControlParametersGlobally/Program.cs b/Samples/Image/SetFilterControlParametersGlobally/Program.cs
new file mode 100644
index 0000000..a6e996a
--- /dev/null
+++ b/Samples/Image/SetFilterControlParametersGlobally/Program.cs
@@ -0,0 +1,29 @@
+using System.IO;
+using ImageGear.Core;
+using ImageGear.Formats;
+
+namespace SetFilterControlParametersGlobally
+{
+ internal class Program
+ {
+ static void Main()
+ {
+ // Initialize common formats.
+ ImGearCommonFormats.Initialize();
+
+ // Set JPEG Filter Control Parameter "SaveType" to 1 so that ImageGear saves JPEG using lossless compression instead of lossy compression.
+ IImGearFormat jpgFormat = ImGearFileFormats.Filters.Get(ImGearFormats.JPG);
+ ImGearControlParameter Param = jpgFormat.Parameters.GetByName("SaveType");
+ Param.Value = 1;
+
+ // Load image page.
+ ImGearPage imGearPage = null;
+ using (FileStream inputStream = new FileStream(@"../../../../../../Sample Input/water.jpg", FileMode.Open, FileAccess.Read, FileShare.Read))
+ imGearPage = ImGearFileFormats.LoadPage(inputStream);
+
+ // Save image page as lossless JPEG.
+ using (FileStream outputStream = new FileStream(@"../../../../../../Sample Output/SetFilterControlParametersGlobally.jpg", FileMode.Create))
+ ImGearFileFormats.SavePage(imGearPage, outputStream, ImGearSavingFormats.JPG);
+ }
+ }
+}
diff --git a/Samples/Image/SetFilterControlParametersGlobally/README.md b/Samples/Image/SetFilterControlParametersGlobally/README.md
new file mode 100644
index 0000000..fbf72e6
--- /dev/null
+++ b/Samples/Image/SetFilterControlParametersGlobally/README.md
@@ -0,0 +1,42 @@
+# Set Filter Control Parameters Globally (SetFilterControlParametersGlobally)
+
+Use Filter Control Parameters to customize how ImageGear reads and writes supported file formats.
+
+Each ImageGear file format Filter provides a set of Control Parameters used when loading and saving examples of that file format.
+
+For example, ImageGear saves JPEG files using lossy compression by default. This sample shows how to change the JPEG Filter Control Parameter `SaveType` so that ImageGear instead saves JPEG with lossless compression.
+
+For more information about the ImageGear .NET API, please refer to the [ImageGear .NET Online Documentation](https://help.accusoft.com/ImageGear/latest/webframe.html).
+
+## System Requirements
+
+For a list of the system and development software necessary to build and run these samples, please refer to the [ImageGear .NET Online Documentation](https://help.accusoft.com/ImageGear/latest/webframe.html#system-requirements.html).
+
+## Building the Sample
+
+Starting with ImageGear v26.0, ImageGear supports .NET Core.
+
+All samples can be built using Microsoft Visual Studio 2022.
+
+To build this sample:
+
+1. Open the .sln file in the project directory using Visual Studio 2022.
+2. Select a Solution Configuration (Debug or Release) and an available Solution Platform (x64 or Any CPU).
+3. Build with Build Solution located in the Build menu.
+
+To build this sample under Linux:
+
+1. Install the Microsoft .NET SDK for your Linux distribution.
+2. Run `dotnet build SetFilterControlParametersGlobally.sln`. By default this will build the Debug Solution Configuration.
+
+## Running the Sample
+
+When the sample is built, it produces a console application executable in the bin subdirectory. Run this application by double-clicking the application icon, or run it directly from Command Prompt (cmd.exe), PowerShell, or similar. Note that the working directory must be the same as the directory containing the sample executable in order to find the sample input image and the output directory. The input image(s) and output directory are specified relative to the location of the application in all of these samples.
+
+To run this sample under Linux, run the sample from "bin/Debug/net6.0/" (depending on the solution platform) using `./SetFilterControlParametersGlobally`.
+
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
+
+## Imaging Support in ImageGear .NET
+
+ImageGear .NET supports the most commonly used image, graphic, and document formats. For more information on imaging support in ImageGear .NET, [please visit us at Accusoft.](https://www.accusoft.com/products/imagegear-collection/imagegear-dot-net/)
diff --git a/Samples/Image/SetFilterControlParametersGlobally/SetFilterControlParametersGlobally.csproj b/Samples/Image/SetFilterControlParametersGlobally/SetFilterControlParametersGlobally.csproj
new file mode 100644
index 0000000..37c9fa3
--- /dev/null
+++ b/Samples/Image/SetFilterControlParametersGlobally/SetFilterControlParametersGlobally.csproj
@@ -0,0 +1,14 @@
+
+
+
+ Exe
+ net6.0;net48
+ Major
+ false
+
+
+
+
+
+
+
diff --git a/Samples/Image/SetFilterControlParametersGlobally/SetFilterControlParametersGlobally.sln b/Samples/Image/SetFilterControlParametersGlobally/SetFilterControlParametersGlobally.sln
new file mode 100644
index 0000000..eff53ff
--- /dev/null
+++ b/Samples/Image/SetFilterControlParametersGlobally/SetFilterControlParametersGlobally.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.3.32901.215
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SetFilterControlParametersGlobally", "SetFilterControlParametersGlobally.csproj", "{8F6745A0-A4C8-4B48-AA92-AAE60C9A03CB}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {8F6745A0-A4C8-4B48-AA92-AAE60C9A03CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {8F6745A0-A4C8-4B48-AA92-AAE60C9A03CB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {8F6745A0-A4C8-4B48-AA92-AAE60C9A03CB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {8F6745A0-A4C8-4B48-AA92-AAE60C9A03CB}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {87E1932C-B53A-4113-8C1F-9B1D5887590B}
+ EndGlobalSection
+EndGlobal
diff --git a/Samples/Image/SetFilterControlParametersLocally/AssemblyInfo.cs b/Samples/Image/SetFilterControlParametersLocally/AssemblyInfo.cs
new file mode 100644
index 0000000..5efdddf
--- /dev/null
+++ b/Samples/Image/SetFilterControlParametersLocally/AssemblyInfo.cs
@@ -0,0 +1,35 @@
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("SetFilterControlParametersLocally")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("ImageGear for .NET")]
+[assembly: AssemblyCopyright("")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("fdc128d0-0c99-40b3-b5ef-ca9bb9c01a3f")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Samples/Image/SetFilterControlParametersLocally/Program.cs b/Samples/Image/SetFilterControlParametersLocally/Program.cs
new file mode 100644
index 0000000..3af017c
--- /dev/null
+++ b/Samples/Image/SetFilterControlParametersLocally/Program.cs
@@ -0,0 +1,34 @@
+using System.IO;
+using ImageGear.Core;
+using ImageGear.Formats;
+
+namespace SetFilterControlParametersLocally
+{
+ internal class Program
+ {
+ static void Main()
+ {
+ // Initialize common formats.
+ ImGearCommonFormats.Initialize();
+
+ // Load image page.
+ ImGearPage imGearPage = null;
+ using (FileStream inputStream = new FileStream(@"../../../../../../Sample Input/water.jpg", FileMode.Open, FileAccess.Read, FileShare.Read))
+ imGearPage = ImGearFileFormats.LoadPage(inputStream);
+
+ // Create a FileFilters object.
+ ImGearFileFilters localFilters = new ImGearFileFilters();
+
+ // Set local JPEG Filter Control Parameter "SaveType" to 1 so that ImageGear saves JPEG using lossless compression instead of lossy compression.
+ localFilters.Get(ImGearFormats.JPG).Parameters.GetByName("SaveType").Value = 1;
+
+ // Create a SaveOptions object to use the local FileFilters object.
+ ImGearSaveOptions saveOptions = new ImGearSaveOptions();
+ saveOptions.Filters = localFilters;
+
+ // Save image page as lossless JPEG.
+ using (FileStream outputStream = new FileStream(@"../../../../../../Sample Output/SetFilterControlParametersLocally.jpg", FileMode.Create))
+ ImGearFileFormats.SavePage(imGearPage, outputStream, 1, ImGearSavingModes.OVERWRITE, ImGearSavingFormats.JPG, saveOptions);
+ }
+ }
+}
diff --git a/Samples/Image/SetFilterControlParametersLocally/README.md b/Samples/Image/SetFilterControlParametersLocally/README.md
new file mode 100644
index 0000000..379b2bb
--- /dev/null
+++ b/Samples/Image/SetFilterControlParametersLocally/README.md
@@ -0,0 +1,42 @@
+# Set Filter Control Parameters Locally (SetFilterControlParametersLocally)
+
+Use local Filter Control Parameters to customize how ImageGear reads and writes supported file formats without affecting other threads.
+
+Each ImageGear file format Filter provides a set of Control Parameters used when loading and saving examples of that file format.
+
+For example, ImageGear saves JPEG files using lossy compression by default. This sample shows how to change the JPEG Filter Control Parameter `SaveType` for one local use of SavePage so that ImageGear instead saves JPEG with lossless compression.
+
+For more information about the ImageGear .NET API, please refer to the [ImageGear .NET Online Documentation](https://help.accusoft.com/ImageGear/latest/webframe.html).
+
+## System Requirements
+
+For a list of the system and development software necessary to build and run these samples, please refer to the [ImageGear .NET Online Documentation](https://help.accusoft.com/ImageGear/latest/webframe.html#system-requirements.html).
+
+## Building the Sample
+
+Starting with ImageGear v26.0, ImageGear supports .NET Core.
+
+All samples can be built using Microsoft Visual Studio 2022.
+
+To build this sample:
+
+1. Open the .sln file in the project directory using Visual Studio 2022.
+2. Select a Solution Configuration (Debug or Release) and an available Solution Platform (x64 or Any CPU).
+3. Build with Build Solution located in the Build menu.
+
+To build this sample under Linux:
+
+1. Install the Microsoft .NET SDK for your Linux distribution.
+2. Run `dotnet build SetFilterControlParametersGlobally.sln`. By default this will build the Debug Solution Configuration.
+
+## Running the Sample
+
+When the sample is built, it produces a console application executable in the bin subdirectory. Run this application by double-clicking the application icon, or run it directly from Command Prompt (cmd.exe), PowerShell, or similar. Note that the working directory must be the same as the directory containing the sample executable in order to find the sample input image and the output directory. The input image(s) and output directory are specified relative to the location of the application in all of these samples.
+
+To run this sample under Linux, run the sample from "bin/Debug/net6.0/" (depending on the solution platform) using `./SetFilterControlParametersGlobally`.
+
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
+
+## Imaging Support in ImageGear .NET
+
+ImageGear .NET supports the most commonly used image, graphic, and document formats. For more information on imaging support in ImageGear .NET, [please visit us at Accusoft.](https://www.accusoft.com/products/imagegear-collection/imagegear-dot-net/)
diff --git a/Samples/Image/SetFilterControlParametersLocally/SetFilterControlParametersLocally.csproj b/Samples/Image/SetFilterControlParametersLocally/SetFilterControlParametersLocally.csproj
new file mode 100644
index 0000000..37c9fa3
--- /dev/null
+++ b/Samples/Image/SetFilterControlParametersLocally/SetFilterControlParametersLocally.csproj
@@ -0,0 +1,14 @@
+
+
+
+ Exe
+ net6.0;net48
+ Major
+ false
+
+
+
+
+
+
+
diff --git a/Samples/Image/SetFilterControlParametersLocally/SetFilterControlParametersLocally.sln b/Samples/Image/SetFilterControlParametersLocally/SetFilterControlParametersLocally.sln
new file mode 100644
index 0000000..a873a74
--- /dev/null
+++ b/Samples/Image/SetFilterControlParametersLocally/SetFilterControlParametersLocally.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.3.32901.215
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SetFilterControlParametersLocally", "SetFilterControlParametersLocally.csproj", "{D822F11C-3EBC-458B-837C-7BAA7B35622F}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {D822F11C-3EBC-458B-837C-7BAA7B35622F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D822F11C-3EBC-458B-837C-7BAA7B35622F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D822F11C-3EBC-458B-837C-7BAA7B35622F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D822F11C-3EBC-458B-837C-7BAA7B35622F}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {5EF57D57-FA2C-48A5-B50E-4CF69AEF5627}
+ EndGlobalSection
+EndGlobal
diff --git a/Samples/Image/SimplifiedMetadataWithNullableFields/AssemblyInfo.cs b/Samples/Image/SimplifiedMetadataWithNullableFields/AssemblyInfo.cs
new file mode 100644
index 0000000..948e34d
--- /dev/null
+++ b/Samples/Image/SimplifiedMetadataWithNullableFields/AssemblyInfo.cs
@@ -0,0 +1,35 @@
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("SimplifiedMetadataWithNullableFields")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("ImageGear for .NET")]
+[assembly: AssemblyCopyright("")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("1941F1E9-34B1-4898-B5EA-C908D77A98A5")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Samples/Image/SimplifiedMetadataWithNullableFields/Program.cs b/Samples/Image/SimplifiedMetadataWithNullableFields/Program.cs
new file mode 100644
index 0000000..7f0f1ef
--- /dev/null
+++ b/Samples/Image/SimplifiedMetadataWithNullableFields/Program.cs
@@ -0,0 +1,35 @@
+using System;
+using System.IO;
+using ImageGear.Core;
+using ImageGear.Formats;
+using ImageGear.Formats.TIF;
+
+namespace SimplifiedMetadataWithNullableFields
+{
+ class Program
+ {
+ static void Main()
+ {
+ // Initialize common formats.
+ ImGearCommonFormats.Initialize();
+
+ // Load image page.
+ ImGearPage imGearPage = null;
+ using (FileStream inputStream = new FileStream(@"../../../../../../Sample Input/Bitonal-Cleanup-Sample.tif", FileMode.Open, FileAccess.Read, FileShare.Read))
+ {
+ imGearPage = ImGearFileFormats.LoadPage(inputStream);
+
+ // If a particular item is not present in the metadata tree, the corresponding property returns null.
+ // To allow this behavior for integers and other value types, corresponding properties, such as ImGearTIFFMetadata.Orientation, use Nullable types.
+ ImGearTIFFOrientation igTIFFOrientation = (imGearPage.Metadata.TIFF as ImGearTIFFMetadata).Orientation.GetValueOrDefault();
+ ushort yCbCrPositioning = (imGearPage.Metadata.TIFF as ImGearTIFFMetadata).YCbCrPositioning.GetValueOrDefault(1);
+ uint tileLength = (imGearPage.Metadata.TIFF as ImGearTIFFMetadata).TileLength.GetValueOrDefault();
+
+ // Display the orientation to the screen.
+ Console.WriteLine("Image orientation is " + igTIFFOrientation.ToString());
+ Console.WriteLine("YCbCrPositioning is " + yCbCrPositioning.ToString());
+ Console.WriteLine("Tile Length is " + tileLength.ToString());
+ }
+ }
+ }
+}
diff --git a/Samples/Image/SimplifiedMetadataWithNullableFields/README.md b/Samples/Image/SimplifiedMetadataWithNullableFields/README.md
new file mode 100644
index 0000000..8e44c64
--- /dev/null
+++ b/Samples/Image/SimplifiedMetadataWithNullableFields/README.md
@@ -0,0 +1,40 @@
+# Accessing Metadata with a Simplified API (SimplifiedMetadataWithNullableFields)
+
+There may be a need to retrieve the metadata from an image, but you don't know the metadata tree or if there is a value or not.
+
+When using ImageGear with images, ImageGear can access the metadata contained in the images using a simplified API. This sample demonstrates how to read metadata using the simplified metadata API in ImageGear. The simplified API allows you to read and modify only the metadata of interest without having to interact with the entire metadata tree.
+
+For more information about the ImageGear .NET API, please refer to the [ImageGear .NET Online Documentation](https://help.accusoft.com/ImageGear/latest/webframe.html).
+
+## System Requirements
+
+For a list of the system and development software necessary to build and run these samples, please refer to the [ImageGear .NET Online Documentation](https://help.accusoft.com/ImageGear/latest/webframe.html#system-requirements.html).
+
+## Building the Sample
+
+Starting with ImageGear v26.0, ImageGear supports .NET Core.
+
+All samples can be built using Microsoft Visual Studio 2022.
+
+To build this sample:
+
+1. Open the .sln file in the project directory using Visual Studio 2022.
+2. Select a Solution Configuration (Debug or Release) and an available Solution Platform (x64 or Any CPU).
+3. Build with Build Solution located in the Build menu.
+
+To build this sample under Linux:
+
+1. Install the Microsoft .NET SDK for your Linux distribution.
+2. Run `dotnet build SimplifiedMetadataWithNullableFields.sln`. By default this will build the Debug Solution Configuration.
+
+## Running the Sample
+
+When the sample is built, it produces a console application executable in the bin subdirectory. Run this application by double-clicking the application icon, or run it directly from Command Prompt (cmd.exe), PowerShell, or similar. Note that the working directory must be the same as the directory containing the sample executable in order to find the sample input image and the output directory. The input image(s) and output directory are specified relative to the location of the application in all of these samples.
+
+To run this sample under Linux, run the sample from "bin/Debug/net6.0/" (depending on the solution platform) using `./SimplifiedMetadataWithNullableFields`.
+
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
+
+## Imaging Support in ImageGear .NET
+
+ImageGear .NET supports the most commonly used image, graphic, and document formats. For more information on imaging support in ImageGear .NET, [please visit us at Accusoft.](https://www.accusoft.com/products/imagegear-collection/imagegear-dot-net/)
diff --git a/Samples/Image/SimplifiedMetadataWithNullableFields/SimplifiedMetadataWithNullableFields.csproj b/Samples/Image/SimplifiedMetadataWithNullableFields/SimplifiedMetadataWithNullableFields.csproj
new file mode 100644
index 0000000..37ef8fd
--- /dev/null
+++ b/Samples/Image/SimplifiedMetadataWithNullableFields/SimplifiedMetadataWithNullableFields.csproj
@@ -0,0 +1,14 @@
+
+
+
+ Exe
+ net6.0;net48
+ Major
+ false
+
+
+
+
+
+
+
diff --git a/Samples/Image/SimplifiedMetadataWithNullableFields/SimplifiedMetadataWithNullableFields.sln b/Samples/Image/SimplifiedMetadataWithNullableFields/SimplifiedMetadataWithNullableFields.sln
new file mode 100644
index 0000000..812122e
--- /dev/null
+++ b/Samples/Image/SimplifiedMetadataWithNullableFields/SimplifiedMetadataWithNullableFields.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.2.33130.433
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SimplifiedMetadataWithNullableFields", "SimplifiedMetadataWithNullableFields.csproj", "{B751D4F8-EB2F-4934-95DA-42F1C87D4A4B}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {B751D4F8-EB2F-4934-95DA-42F1C87D4A4B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B751D4F8-EB2F-4934-95DA-42F1C87D4A4B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B751D4F8-EB2F-4934-95DA-42F1C87D4A4B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B751D4F8-EB2F-4934-95DA-42F1C87D4A4B}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {0027158A-89C2-47F9-976B-C6C08675B978}
+ EndGlobalSection
+EndGlobal
diff --git a/Samples/Image/SpecifyColorProfilesGlobally/AssemblyInfo.cs b/Samples/Image/SpecifyColorProfilesGlobally/AssemblyInfo.cs
new file mode 100644
index 0000000..cb1258d
--- /dev/null
+++ b/Samples/Image/SpecifyColorProfilesGlobally/AssemblyInfo.cs
@@ -0,0 +1,35 @@
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("SpecifyColorProfilesGlobally")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("ImageGear for .NET")]
+[assembly: AssemblyCopyright("")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("844b8c62-0286-440a-8b05-968bbbbcd3ed")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Samples/Image/SpecifyColorProfilesGlobally/Program.cs b/Samples/Image/SpecifyColorProfilesGlobally/Program.cs
new file mode 100644
index 0000000..413b531
--- /dev/null
+++ b/Samples/Image/SpecifyColorProfilesGlobally/Program.cs
@@ -0,0 +1,33 @@
+using System.IO;
+using ImageGear.Core;
+using ImageGear.Formats;
+using ImageGear.Processing;
+
+namespace SpecifyColorProfilesGlobally
+{
+ internal class Program
+ {
+ static void Main()
+ {
+ // Initialize common formats.
+ ImGearCommonFormats.Initialize();
+
+ // Load image page.
+ ImGearRasterPage imGearPage = null;
+ using (FileStream inputStream = new FileStream(@"../../../../../../Sample Input/water.jpg", FileMode.Open, FileAccess.Read, FileShare.Read))
+ imGearPage = (ImGearRasterPage)ImGearFileFormats.LoadPage(inputStream);
+
+ // Enable color profiles and assign ImageGear's redistributed color profiles.
+ ImGearColorProfileManager.EnableProfiles = true;
+ ImGearColorProfileManager.RgbProfile = new ImGearColorProfile(File.OpenRead("ig_rgb_profile.icm"));
+ ImGearColorProfileManager.CmykProfile = new ImGearColorProfile(File.OpenRead("ig_cmyk_profile.icm"));
+
+ // Convert color space RGB to CMYK.
+ ImGearRasterProcessing.ConvertColorSpace(imGearPage, new ImGearColorSpace(ImGearColorSpaceIDs.CMYK));
+
+ // Save image page.
+ using (FileStream outputStream = new FileStream(@"../../../../../../Sample Output/SpecifyColorProfilesGlobally.jpg", FileMode.Create))
+ ImGearFileFormats.SavePage(imGearPage, outputStream, ImGearSavingFormats.JPG);
+ }
+ }
+}
diff --git a/Samples/Image/SpecifyColorProfilesGlobally/README.md b/Samples/Image/SpecifyColorProfilesGlobally/README.md
new file mode 100644
index 0000000..4af3f73
--- /dev/null
+++ b/Samples/Image/SpecifyColorProfilesGlobally/README.md
@@ -0,0 +1,40 @@
+# Specify Color Profiles Globally (SpecifyColorProfilesGlobally)
+
+Specify global color profiles to implicitly use with all color conversion operations.
+
+This sample shows how to implicitly use ImageGear's re-distributed ICM color profiles to convert the color space in a JPEG image from RGB to CMYK. Color profiles contain complex mappings that make it possible to carefully manage the translations of colors between different color spaces and gamuts to improve conversions to different color spaces.
+
+For more information about the ImageGear .NET API, please refer to the [ImageGear .NET Online Documentation](https://help.accusoft.com/ImageGear/latest/webframe.html).
+
+## System Requirements
+
+For a list of the system and development software necessary to build and run these samples, please refer to the [ImageGear .NET Online Documentation](https://help.accusoft.com/ImageGear/latest/webframe.html#system-requirements.html).
+
+## Building the Sample
+
+Starting with ImageGear v26.0, ImageGear supports .NET Core.
+
+All samples can be built using Microsoft Visual Studio 2022.
+
+To build this sample:
+
+1. Open the .sln file in the project directory using Visual Studio 2022.
+2. Select a Solution Configuration (Debug or Release) and an available Solution Platform (x64 or Any CPU).
+3. Build with Build Solution located in the Build menu.
+
+To build this sample under Linux:
+
+1. Install the Microsoft .NET SDK for your Linux distribution.
+2. Run `dotnet build SpecifyColorProfilesGlobally.sln`. By default this will build the Debug Solution Configuration.
+
+## Running the Sample
+
+When the sample is built, it produces a console application executable in the bin subdirectory. Run this application by double-clicking the application icon, or run it directly from Command Prompt (cmd.exe), PowerShell, or similar. Note that the working directory must be the same as the directory containing the sample executable in order to find the sample input image and the output directory. The input image(s) and output directory are specified relative to the location of the application in all of these samples.
+
+To run this sample under Linux, run the sample from "bin/Debug/net6.0/" (depending on the solution platform) using `./SpecifyColorProfilesGlobally`.
+
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
+
+## Imaging Support in ImageGear .NET
+
+ImageGear .NET supports the most commonly used image, graphic, and document formats. For more information on imaging support in ImageGear .NET, [please visit us at Accusoft.](https://www.accusoft.com/products/imagegear-collection/imagegear-dot-net/)
diff --git a/Samples/Image/SpecifyColorProfilesGlobally/SpecifyColorProfilesGlobally.csproj b/Samples/Image/SpecifyColorProfilesGlobally/SpecifyColorProfilesGlobally.csproj
new file mode 100644
index 0000000..2a07f18
--- /dev/null
+++ b/Samples/Image/SpecifyColorProfilesGlobally/SpecifyColorProfilesGlobally.csproj
@@ -0,0 +1,15 @@
+
+
+
+ Exe
+ net6.0;net48
+ Major
+ false
+ AnyCPU
+
+
+
+
+
+
+
diff --git a/Samples/Image/SpecifyColorProfilesGlobally/SpecifyColorProfilesGlobally.sln b/Samples/Image/SpecifyColorProfilesGlobally/SpecifyColorProfilesGlobally.sln
new file mode 100644
index 0000000..7cdd31f
--- /dev/null
+++ b/Samples/Image/SpecifyColorProfilesGlobally/SpecifyColorProfilesGlobally.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.3.32901.215
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SpecifyColorProfilesGlobally", "SpecifyColorProfilesGlobally.csproj", "{ABAED00A-7AF9-4AD2-A342-FE9935FBB789}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {ABAED00A-7AF9-4AD2-A342-FE9935FBB789}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {ABAED00A-7AF9-4AD2-A342-FE9935FBB789}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {ABAED00A-7AF9-4AD2-A342-FE9935FBB789}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {ABAED00A-7AF9-4AD2-A342-FE9935FBB789}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {1AD5D358-A595-4771-9022-F8B6CC7192A0}
+ EndGlobalSection
+EndGlobal
diff --git a/Samples/Image/SpecifyColorProfilesLocally/AssemblyInfo.cs b/Samples/Image/SpecifyColorProfilesLocally/AssemblyInfo.cs
new file mode 100644
index 0000000..56ac48b
--- /dev/null
+++ b/Samples/Image/SpecifyColorProfilesLocally/AssemblyInfo.cs
@@ -0,0 +1,35 @@
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("SpecifyColorProfilesLocally")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("ImageGear for .NET")]
+[assembly: AssemblyCopyright("")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("bd1d82cf-60ea-496f-9d10-cde9525180af")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Samples/Image/SpecifyColorProfilesLocally/Program.cs b/Samples/Image/SpecifyColorProfilesLocally/Program.cs
new file mode 100644
index 0000000..a30b316
--- /dev/null
+++ b/Samples/Image/SpecifyColorProfilesLocally/Program.cs
@@ -0,0 +1,33 @@
+using System.IO;
+using ImageGear.Core;
+using ImageGear.Formats;
+using ImageGear.Processing;
+
+namespace SpecifyColorProfilesLocally
+{
+ internal class Program
+ {
+ static void Main()
+ {
+ // Initialize common formats.
+ ImGearCommonFormats.Initialize();
+
+ // Load image page.
+ ImGearRasterPage imGearPage = null;
+ using (FileStream inputStream = new FileStream(@"../../../../../../Sample Input/water.jpg", FileMode.Open, FileAccess.Read, FileShare.Read))
+ imGearPage = (ImGearRasterPage)ImGearFileFormats.LoadPage(inputStream);
+
+ // Create local ColorProfile objects from ImageGear's redistributed color profiles.
+ ImGearColorProfile rgbProfile = new ImGearColorProfile(File.OpenRead("ig_rgb_profile.icm"));
+ ImGearColorProfile cmykProfile = new ImGearColorProfile(File.OpenRead("ig_cmyk_profile.icm"));
+
+ // Convert color space RGB to CMYK.
+ ImGearRasterProcessing.ConvertColorSpace(imGearPage, new ImGearColorSpace(ImGearColorSpaceIDs.CMYK),
+ rgbProfile, cmykProfile, ImGearRenderingIntents.PERCEPTUAL);
+
+ // Save image page.
+ using (FileStream outputStream = new FileStream(@"../../../../../../Sample Output/SpecifyColorProfilesLocally.jpg", FileMode.Create))
+ ImGearFileFormats.SavePage(imGearPage, outputStream, ImGearSavingFormats.JPG);
+ }
+ }
+}
diff --git a/Samples/Image/SpecifyColorProfilesLocally/README.md b/Samples/Image/SpecifyColorProfilesLocally/README.md
new file mode 100644
index 0000000..15205a9
--- /dev/null
+++ b/Samples/Image/SpecifyColorProfilesLocally/README.md
@@ -0,0 +1,40 @@
+# Specify Color Profiles Locally (SpecifyColorProfilesLocally)
+
+Specify local color profiles to explicitly use with a color conversion operation.
+
+This sample shows how to explicitly use ImageGear's re-distributed ICM color profiles to convert the color space in a JPEG image from RGB to CMYK. Color profiles contain complex mappings that make it possible to carefully manage the translations of colors between different color spaces and gamuts to improve conversions to different color spaces.
+
+For more information about the ImageGear .NET API, please refer to the [ImageGear .NET Online Documentation](https://help.accusoft.com/ImageGear/latest/webframe.html).
+
+## System Requirements
+
+For a list of the system and development software necessary to build and run these samples, please refer to the [ImageGear .NET Online Documentation](https://help.accusoft.com/ImageGear/latest/webframe.html#system-requirements.html).
+
+## Building the Sample
+
+Starting with ImageGear v26.0, ImageGear supports .NET Core.
+
+All samples can be built using Microsoft Visual Studio 2022.
+
+To build this sample:
+
+1. Open the .sln file in the project directory using Visual Studio 2022.
+2. Select a Solution Configuration (Debug or Release) and an available Solution Platform (x64 or Any CPU).
+3. Build with Build Solution located in the Build menu.
+
+To build this sample under Linux:
+
+1. Install the Microsoft .NET SDK for your Linux distribution.
+2. Run `dotnet build SpecifyColorProfilesLocally.sln`. By default this will build the Debug Solution Configuration.
+
+## Running the Sample
+
+When the sample is built, it produces a console application executable in the bin subdirectory. Run this application by double-clicking the application icon, or run it directly from Command Prompt (cmd.exe), PowerShell, or similar. Note that the working directory must be the same as the directory containing the sample executable in order to find the sample input image and the output directory. The input image(s) and output directory are specified relative to the location of the application in all of these samples.
+
+To run this sample under Linux, run the sample from "bin/Debug/net6.0/" (depending on the solution platform) using `./SpecifyColorProfilesLocally`.
+
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
+
+## Imaging Support in ImageGear .NET
+
+ImageGear .NET supports the most commonly used image, graphic, and document formats. For more information on imaging support in ImageGear .NET, [please visit us at Accusoft.](https://www.accusoft.com/products/imagegear-collection/imagegear-dot-net/)
diff --git a/Samples/Image/SpecifyColorProfilesLocally/SpecifyColorProfilesLocally.csproj b/Samples/Image/SpecifyColorProfilesLocally/SpecifyColorProfilesLocally.csproj
new file mode 100644
index 0000000..2a07f18
--- /dev/null
+++ b/Samples/Image/SpecifyColorProfilesLocally/SpecifyColorProfilesLocally.csproj
@@ -0,0 +1,15 @@
+
+
+
+ Exe
+ net6.0;net48
+ Major
+ false
+ AnyCPU
+
+
+
+
+
+
+
diff --git a/Samples/Image/SpecifyColorProfilesLocally/SpecifyColorProfilesLocally.sln b/Samples/Image/SpecifyColorProfilesLocally/SpecifyColorProfilesLocally.sln
new file mode 100644
index 0000000..af74483
--- /dev/null
+++ b/Samples/Image/SpecifyColorProfilesLocally/SpecifyColorProfilesLocally.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.3.32901.215
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SpecifyColorProfilesLocally", "SpecifyColorProfilesLocally.csproj", "{F75BE8B9-D14E-419A-B8D8-20F9E8F137FA}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {F75BE8B9-D14E-419A-B8D8-20F9E8F137FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F75BE8B9-D14E-419A-B8D8-20F9E8F137FA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F75BE8B9-D14E-419A-B8D8-20F9E8F137FA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F75BE8B9-D14E-419A-B8D8-20F9E8F137FA}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {A710C5DC-8D72-42CF-B9DE-A53F3E46901A}
+ EndGlobalSection
+EndGlobal
diff --git a/Samples/Office/OfficeFileToPDFFile/README.md b/Samples/Office/OfficeFileToPDFFile/README.md
index 610dde0..0b735e1 100644
--- a/Samples/Office/OfficeFileToPDFFile/README.md
+++ b/Samples/Office/OfficeFileToPDFFile/README.md
@@ -35,7 +35,7 @@ When the sample is built, it produces a console application executable in the bi
To run this sample under Linux, run the sample from "bin/Debug/net6.0/" or "bin/x64/Debug/net6.0/" (depending on the solution platform) using `./OfficeFileToPDFFile`.
-_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com).
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
## Office Document Support in ImageGear .NET
diff --git a/Samples/Office/OfficeFileToRasterFormat/README.md b/Samples/Office/OfficeFileToRasterFormat/README.md
index b543398..105bb3c 100644
--- a/Samples/Office/OfficeFileToRasterFormat/README.md
+++ b/Samples/Office/OfficeFileToRasterFormat/README.md
@@ -35,7 +35,7 @@ When the sample is built, it produces a console application executable in the bi
To run this sample under Linux, run the sample from "bin/Debug/net6.0/" or "bin/x64/Debug/net6.0/" (depending on the solution platform) using `./OfficeFileToRasterFormat`.
-_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com).
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
## Office Document Support in ImageGear .NET
diff --git a/Samples/Office/ReadOfficeMetadata/README.md b/Samples/Office/ReadOfficeMetadata/README.md
index 334551e..d8db2b0 100644
--- a/Samples/Office/ReadOfficeMetadata/README.md
+++ b/Samples/Office/ReadOfficeMetadata/README.md
@@ -35,7 +35,7 @@ When the sample is built, it produces a console application executable in the bi
To run this sample under Linux, run the sample from "bin/Debug/net6.0/" or "bin/x64/Debug/net6.0/" (depending on the solution platform) using `./ReadOfficeMetadata`.
-_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com).
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
## Office Document Support in ImageGear .NET
diff --git a/Samples/PDF Acroform/AddingWidgets/AddingWidgets.csproj b/Samples/PDF Acroform/AddingWidgets/AddingWidgets.csproj
new file mode 100644
index 0000000..9b1dd0b
--- /dev/null
+++ b/Samples/PDF Acroform/AddingWidgets/AddingWidgets.csproj
@@ -0,0 +1,16 @@
+
+
+
+ Exe
+ net6.0;net48
+ Major
+ false
+ x64
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Samples/PDF Acroform/AddingWidgets/AddingWidgets.sln b/Samples/PDF Acroform/AddingWidgets/AddingWidgets.sln
new file mode 100644
index 0000000..0c1285c
--- /dev/null
+++ b/Samples/PDF Acroform/AddingWidgets/AddingWidgets.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.2.33130.433
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AddingWidgets", "AddingWidgets.csproj", "{6B6E2272-BFF4-4AC5-8411-A9090913071E}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|x64 = Debug|x64
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {6B6E2272-BFF4-4AC5-8411-A9090913071E}.Debug|x64.ActiveCfg = Debug|x64
+ {6B6E2272-BFF4-4AC5-8411-A9090913071E}.Debug|x64.Build.0 = Debug|x64
+ {6B6E2272-BFF4-4AC5-8411-A9090913071E}.Release|x64.ActiveCfg = Release|x64
+ {6B6E2272-BFF4-4AC5-8411-A9090913071E}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {A384097A-78CA-4418-B04D-FA4B0DDEB11C}
+ EndGlobalSection
+EndGlobal
diff --git a/Samples/PDF Acroform/AddingWidgets/AssemblyInfo.cs b/Samples/PDF Acroform/AddingWidgets/AssemblyInfo.cs
new file mode 100644
index 0000000..caf60e4
--- /dev/null
+++ b/Samples/PDF Acroform/AddingWidgets/AssemblyInfo.cs
@@ -0,0 +1,35 @@
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("AddingWidgets")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("ImageGear for .NET")]
+[assembly: AssemblyCopyright("")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("EB248EB0-8AD9-4294-B1B7-F16C33640950")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Samples/PDF Acroform/AddingWidgets/Program.cs b/Samples/PDF Acroform/AddingWidgets/Program.cs
new file mode 100644
index 0000000..d766802
--- /dev/null
+++ b/Samples/PDF Acroform/AddingWidgets/Program.cs
@@ -0,0 +1,106 @@
+using System.IO;
+using ImageGear.Core;
+using ImageGear.Formats;
+using ImageGear.Formats.PDF;
+using ImageGear.Formats.PDF.Forms;
+
+namespace AddingWidgets
+{
+ class Program
+ {
+ static void Main()
+ {
+ // Initialize common formats.
+ ImGearCommonFormats.Initialize();
+
+ // Add PDF format to filters list.
+ ImGearFileFormats.Filters.Add(ImGearPDF.CreatePDFFormat());
+
+ // Initialize PDF support. Initialize for each process or thread.
+ ImGearPDF.Initialize();
+
+ // Load PDF document from a file.
+ using (Stream stream = new FileStream(@"../../../../../../../Sample Input/accusoft-brochure.pdf", FileMode.Open, FileAccess.Read, FileShare.None))
+ {
+ using (ImGearPDFDocument pdfDocument = (ImGearPDFDocument)ImGearFileFormats.LoadDocument(stream))
+ {
+ // If the document does not have a form, create a form for the document.
+ if (pdfDocument.Form == null)
+ pdfDocument.CreateForm();
+
+ // Create the rectangle of new PDF page with the same size as visible area of first page.
+ ImGearRectangle rectangle = ((ImGearPDFPage)pdfDocument.Pages[0]).CropRectangle;
+ ImGearPDFFixedRect pageRectangle = new ImGearPDFFixedRect
+ {
+ Left = ImGearPDF.IntToFixed(0),
+ Top = ImGearPDF.IntToFixed(rectangle.Top),
+ Right = ImGearPDF.IntToFixed(rectangle.Right),
+ Bottom = ImGearPDF.IntToFixed(0)
+ };
+
+ // Create new PDF page in the PDF document with the same dimensions as the first page.
+ using (ImGearPDFPage pdfPage = pdfDocument.CreateNewPage((int)ImGearPDFPageNumber.BEFORE_FIRST_PAGE, pageRectangle))
+ {
+ // Create new field rectangles for new fields on the newly created page.
+ ImGearPDFFixedRect radioButtonLocation1 = new ImGearPDFFixedRect
+ {
+ Left = ImGearPDF.IntToFixed(rectangle.Width / 3 - 200),
+ Top = ImGearPDF.IntToFixed(-rectangle.Height / 3 + 20),
+ Right = ImGearPDF.IntToFixed(rectangle.Width / 3 + 200),
+ Bottom = ImGearPDF.IntToFixed(-rectangle.Height / 3 - 20),
+ };
+
+ ImGearPDFFixedRect radioButtonLocation2 = new ImGearPDFFixedRect
+ {
+ Left = ImGearPDF.IntToFixed(rectangle.Width / 3 + 200),
+ Top = ImGearPDF.IntToFixed(-rectangle.Height / 3 + 20),
+ Right = ImGearPDF.IntToFixed(rectangle.Width / 3 + 600),
+ Bottom = ImGearPDF.IntToFixed(-rectangle.Height / 3 - 20),
+ };
+
+ ImGearPDFFixedRect textFieldLocation1 = new ImGearPDFFixedRect
+ {
+ Left = ImGearPDF.IntToFixed(rectangle.Width / 3 - 200),
+ Top = ImGearPDF.IntToFixed(-rectangle.Height / 6 + 40),
+ Right = ImGearPDF.IntToFixed(rectangle.Width / 3 + 200),
+ Bottom = ImGearPDF.IntToFixed(-rectangle.Height / 6 - 20),
+ };
+
+ ImGearPDFFixedRect textFieldLocation2 = new ImGearPDFFixedRect
+ {
+ Left = ImGearPDF.IntToFixed(rectangle.Width / 3 + 250),
+ Top = ImGearPDF.IntToFixed(-rectangle.Height / 6 + 40),
+ Right = ImGearPDF.IntToFixed(rectangle.Width / 3 + 700),
+ Bottom = ImGearPDF.IntToFixed(-rectangle.Height / 6 - 20),
+ };
+
+ // Create a radio group to hold the radio buttons.
+ RadioGroup radioGroup = pdfDocument.Form.CreateRadioGroup("Color");
+
+ // Set widget and put in locations.
+ RadioButtonWidgetAnnotation radioButton1 = new RadioButtonWidgetAnnotation(pdfPage, radioButtonLocation1);
+
+ RadioButtonWidgetAnnotation radioButton2 = new RadioButtonWidgetAnnotation(pdfPage, radioButtonLocation2);
+
+ // Link option and assign an export.
+ ChoiceOption option1 = radioGroup.AddOption(radioButton1, "Blue");
+ ChoiceOption option2 = radioGroup.AddOption(radioButton2, "Green");
+
+ // Create text boxes and assign locations.
+ TextBoxWidgetAnnotation textWidget1 = new TextBoxWidgetAnnotation(pdfPage, textFieldLocation1);
+ TextField textField = pdfDocument.Form.CreateTextField("Name", textWidget1);
+ TextBoxWidgetAnnotation textWidget2 = new TextBoxWidgetAnnotation(pdfPage, textFieldLocation2);
+ textField.AddWidget(textWidget2);
+
+ // Save the PDF document.
+ using (Stream streamOut = new FileStream(@"../../../../../../../Sample Output/AddingWidgets.pdf", FileMode.Create, FileAccess.Write, FileShare.None))
+ ImGearFileFormats.SaveDocument(pdfDocument, streamOut, 0, ImGearSavingModes.OVERWRITE, ImGearSavingFormats.PDF, new ImGearSaveOptions());
+ }
+ }
+ }
+
+ // Terminate PDF support once for each call to Initialize PDF support.
+ ImGearPDF.Terminate();
+ }
+ }
+}
diff --git a/Samples/PDF Acroform/AddingWidgets/README.md b/Samples/PDF Acroform/AddingWidgets/README.md
new file mode 100644
index 0000000..6700aba
--- /dev/null
+++ b/Samples/PDF Acroform/AddingWidgets/README.md
@@ -0,0 +1,41 @@
+# Adding Widgets (AddingWidgets)
+
+When a PDF form needs to have widgets such as check boxes, combo boxes, list boxes, and radio buttons, ImageGear allows you to create the objects on the forms.
+
+Widget Annotations are the visual elements of a form field. A field can have zero or more widgets attached to it: a TextField, ListBox, ComboBox, and CheckBox usually have exactly one, while the RadioGroup has multiple widgets, one for each radio button.
+In some cases, you may want a field to appear on more than one page, repeating the same value. In that case, fields that normally have just one widget may have multiple widgets attached. Someone filling out the form may use any of those widgets to update the field's value, and this is reflected in all the other widgets as well.
+
+For more information about the ImageGear .NET API, please refer to the [ImageGear .NET Online Documentation](https://help.accusoft.com/ImageGear/latest/webframe.html).
+
+## System Requirements
+
+For a list of the system and development software necessary to build and run these samples, please refer to the [ImageGear .NET Online Documentation](https://help.accusoft.com/ImageGear/latest/webframe.html#system-requirements.html).
+
+## Building the Sample
+
+Starting with ImageGear v26.0, ImageGear supports .NET Core.
+
+All samples can be built using Microsoft Visual Studio 2022.
+
+To build this sample:
+
+1. Open the .sln file in the project directory using Visual Studio 2022.
+2. Select a Solution Configuration (Debug or Release) and an available Solution Platform (x64 or Any CPU).
+3. Build with Build Solution located in the Build menu.
+
+To build this sample under Linux:
+
+1. Install the Microsoft .NET SDK for your Linux distribution.
+2. Run `dotnet build AddingWidgets.sln`. By default this will build the Debug Solution Configuration.
+
+## Running the Sample
+
+When the sample is built, it produces a console application executable in the bin subdirectory. Run this application by double-clicking the application icon, or run it directly from Command Prompt (cmd.exe), PowerShell, or similar. Note that the working directory must be the same as the directory containing the sample executable in order to find the sample input image and the output directory. The input image(s) and output directory are specified relative to the location of the application in all of these samples.
+
+To run this sample under Linux, run the sample from "bin/Debug/net6.0/" or "bin/x64/Debug/net6.0/" (depending on the solution platform) using `./AddingWidgets`.
+
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
+
+## PDF Acroform Support in ImageGear .NET
+
+ImageGear .NET supports adding, updating, and deleting AcroForm fields in new or existing PDFs. For more information on PDF acroform support in ImageGear .NET, [please visit us at Accusoft.](https://www.accusoft.com/products/imagegear-collection/imagegear-dot-net/)
diff --git a/Samples/PDF Acroform/CreatePDFFormField/README.md b/Samples/PDF Acroform/CreatePDFFormField/README.md
index 8379b20..3842994 100644
--- a/Samples/PDF Acroform/CreatePDFFormField/README.md
+++ b/Samples/PDF Acroform/CreatePDFFormField/README.md
@@ -33,7 +33,7 @@ When the sample is built, it produces a console application executable in the bi
To run this sample under Linux, run the sample from "bin/Debug/net6.0/" or "bin/x64/Debug/net6.0/" (depending on the solution platform) using `./CreatePDFFormField`.
-_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com).
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
## PDF Acroform Support in ImageGear .NET
diff --git a/Samples/PDF Acroform/FlattenPDFFormFields/Program.cs b/Samples/PDF Acroform/FlattenPDFFormFields/Program.cs
index d56edf0..5cb0e55 100644
--- a/Samples/PDF Acroform/FlattenPDFFormFields/Program.cs
+++ b/Samples/PDF Acroform/FlattenPDFFormFields/Program.cs
@@ -24,7 +24,7 @@ static void Main()
using (ImGearPDFDocument imGearPDFDocument = (ImGearPDFDocument)ImGearFileFormats.LoadDocument(stream, 0, -1))
{
- // Flatten the PDF form fields
+ // Flatten the PDF form fields.
imGearPDFDocument.FlattenFormFields(false);
// Save the flattened PDF document.
diff --git a/Samples/PDF Acroform/FlattenPDFFormFields/README.md b/Samples/PDF Acroform/FlattenPDFFormFields/README.md
index 8edbb93..4e58a7c 100644
--- a/Samples/PDF Acroform/FlattenPDFFormFields/README.md
+++ b/Samples/PDF Acroform/FlattenPDFFormFields/README.md
@@ -33,7 +33,7 @@ When the sample is built, it produces a console application executable in the bi
To run this sample under Linux, run the sample from "bin/Debug/net6.0/" or "bin/x64/Debug/net6.0/" (depending on the solution platform) using `./FlattenPDFFormFields`.
-_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com).
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
## PDF Acroform Support in ImageGear .NET
diff --git a/Samples/PDF Acroform/ModifyFieldAppearance/AssemblyInfo.cs b/Samples/PDF Acroform/ModifyFieldAppearance/AssemblyInfo.cs
new file mode 100644
index 0000000..bed9d4f
--- /dev/null
+++ b/Samples/PDF Acroform/ModifyFieldAppearance/AssemblyInfo.cs
@@ -0,0 +1,35 @@
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("ModifyFieldAppearance")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("ImageGear for .NET")]
+[assembly: AssemblyCopyright("")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("AABE9A80-1184-4EEF-9AAF-AC63182F7A54")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Samples/PDF Acroform/ModifyFieldAppearance/ModifyFieldAppearance.csproj b/Samples/PDF Acroform/ModifyFieldAppearance/ModifyFieldAppearance.csproj
new file mode 100644
index 0000000..56bf030
--- /dev/null
+++ b/Samples/PDF Acroform/ModifyFieldAppearance/ModifyFieldAppearance.csproj
@@ -0,0 +1,16 @@
+
+
+
+ Exe
+ net6.0;net48
+ Major
+ false
+ x64
+
+
+
+
+
+
+
+
diff --git a/Samples/PDF Acroform/ModifyFieldAppearance/ModifyFieldAppearance.sln b/Samples/PDF Acroform/ModifyFieldAppearance/ModifyFieldAppearance.sln
new file mode 100644
index 0000000..32bf7ab
--- /dev/null
+++ b/Samples/PDF Acroform/ModifyFieldAppearance/ModifyFieldAppearance.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.2.33130.433
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ModifyFieldAppearance", "ModifyFieldAppearance.csproj", "{96C6C481-83E3-4361-A2A0-3E726D7DFA41}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {96C6C481-83E3-4361-A2A0-3E726D7DFA41}.Debug|Any CPU.ActiveCfg = Debug|x64
+ {96C6C481-83E3-4361-A2A0-3E726D7DFA41}.Debug|Any CPU.Build.0 = Debug|x64
+ {96C6C481-83E3-4361-A2A0-3E726D7DFA41}.Release|Any CPU.ActiveCfg = Release|x64
+ {96C6C481-83E3-4361-A2A0-3E726D7DFA41}.Release|Any CPU.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {5EDA0E86-CF02-4EAA-B2F0-016823FB6DAF}
+ EndGlobalSection
+EndGlobal
diff --git a/Samples/PDF Acroform/ModifyFieldAppearance/Program.cs b/Samples/PDF Acroform/ModifyFieldAppearance/Program.cs
new file mode 100644
index 0000000..5ffc9fd
--- /dev/null
+++ b/Samples/PDF Acroform/ModifyFieldAppearance/Program.cs
@@ -0,0 +1,65 @@
+using System.IO;
+using System.Drawing;
+using ImageGear.Core;
+using ImageGear.Formats;
+using ImageGear.Formats.PDF;
+using ImageGear.Formats.PDF.Forms;
+
+namespace ModifyFieldAppearance
+{
+ class Program
+ {
+ static void Main()
+ {
+ // Initialize common formats.
+ ImGearCommonFormats.Initialize();
+
+ // Add PDF format to filters list.
+ ImGearFileFormats.Filters.Add(ImGearPDF.CreatePDFFormat());
+
+ // Initialize PDF support. Initialize for each process or thread.
+ ImGearPDF.Initialize();
+
+ // Load PDF document from a file.
+ using (Stream stream = new FileStream(@"../../../../../../../Sample Input/BlankFormFields.pdf", FileMode.Open, FileAccess.Read, FileShare.None))
+ {
+ using (ImGearPDFDocument pdfDocument = (ImGearPDFDocument)ImGearFileFormats.LoadDocument(stream))
+ {
+ // If the document does not have a form, create a form for the document.
+ if (pdfDocument.Form == null)
+ pdfDocument.CreateForm();
+
+ // Text Box items for decoration.
+ pdfDocument.Form.Fields[0].TextColor = Color.Red;
+ pdfDocument.Form.Fields[0].FontSize = 45;
+ pdfDocument.Form.Fields[0].FontName = "Helvetica";
+
+ // Cycle through each widget and change decorations.
+ foreach (Field field in pdfDocument.Form.Fields)
+ {
+ foreach (WidgetAnnotation widget in field.Widgets)
+ {
+ // Set fill and border colors.
+ widget.FillColor = Color.Red;
+ widget.BorderColor = Color.YellowGreen;
+
+ // Set a thick border width (size 3).
+ // Any integer can also be used.
+ widget.BorderWidth = AnnotationBorderWidth.THICK;
+
+ // Set a border style.
+ widget.BorderStyle = AnnotationBorderStyle.DASHED;
+ }
+ }
+
+ // Save the PDF document.
+ using (Stream streamOut = new FileStream(@"../../../../../../../Sample Output/ModifyFieldAppearance.pdf", FileMode.Create, FileAccess.Write, FileShare.None))
+ ImGearFileFormats.SaveDocument(pdfDocument, streamOut, 0, ImGearSavingModes.OVERWRITE, ImGearSavingFormats.PDF, new ImGearSaveOptions());
+ }
+ }
+
+ // Terminate PDF support once for each call to Initialize PDF support.
+ ImGearPDF.Terminate();
+ }
+ }
+}
diff --git a/Samples/PDF Acroform/ModifyFieldAppearance/README.md b/Samples/PDF Acroform/ModifyFieldAppearance/README.md
new file mode 100644
index 0000000..7933217
--- /dev/null
+++ b/Samples/PDF Acroform/ModifyFieldAppearance/README.md
@@ -0,0 +1,40 @@
+# Modify Field Appearance (ModifyFieldAppearance)
+
+Sometimes Fields need to visually stand out for emphasis or to show importance. Fields and their widgets have various properties to control appearance when a PDF page is rendered or displayed.
+
+This sample shows how to change appearance for a few preexisting Acroform Fields and their Widgets. Read or update text style information for Fields that display text (which includes TextField, ListBox, ComboBox, CheckBox, SignatureField, and PushButton fields) using FontName, FontSize, and TextColor properties. Read or update Widget appearance using its BorderStyle, BorderColor, BorderWidth and FillColor properties.
+
+For more information about the ImageGear .NET API, please refer to the [ImageGear .NET Online Documentation](https://help.accusoft.com/ImageGear/latest/webframe.html).
+
+## System Requirements
+
+For a list of the system and development software necessary to build and run these samples, please refer to the [ImageGear .NET Online Documentation](https://help.accusoft.com/ImageGear/latest/webframe.html#system-requirements.html).
+
+## Building the Sample
+
+Starting with ImageGear v26.0, ImageGear supports .NET Core.
+
+All samples can be built using Microsoft Visual Studio 2022.
+
+To build this sample:
+
+1. Open the .sln file in the project directory using Visual Studio 2022.
+2. Select a Solution Configuration (Debug or Release) and an available Solution Platform (x64 or Any CPU).
+3. Build with Build Solution located in the Build menu.
+
+To build this sample under Linux:
+
+1. Install the Microsoft .NET SDK for your Linux distribution.
+2. Run `dotnet build ModifyFieldAppearance.sln`. By default this will build the Debug Solution Configuration.
+
+## Running the Sample
+
+When the sample is built, it produces a console application executable in the bin subdirectory. Run this application by double-clicking the application icon, or run it directly from Command Prompt (cmd.exe), PowerShell, or similar. Note that the working directory must be the same as the directory containing the sample executable in order to find the sample input image and the output directory. The input image(s) and output directory are specified relative to the location of the application in all of these samples.
+
+To run this sample under Linux, run the sample from "bin/Debug/net6.0/" or "bin/x64/Debug/net6.0/" (depending on the solution platform) using `./ModifyFieldAppearance`.
+
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
+
+## PDF Acroform Support in ImageGear .NET
+
+ImageGear .NET supports adding, updating, and deleting AcroForm fields in new or existing PDFs. For more information on PDF acroform support in ImageGear .NET, [please visit us at Accusoft.](https://www.accusoft.com/products/imagegear-collection/imagegear-dot-net/)
diff --git a/Samples/PDF Acroform/README.md b/Samples/PDF Acroform/README.md
index e2d0552..1bc26d4 100644
--- a/Samples/PDF Acroform/README.md
+++ b/Samples/PDF Acroform/README.md
@@ -2,18 +2,26 @@
These samples demonstrate PDF Acroform support in ImageGear .NET.
+## AddingWidgets
+
+ImageGear allows adding widgets (radio button, checkboxes, listboxes, etc.) to PDF Acroforms.
+
## CreatePDFFormField
Starting with a PDF document, new or existing, first the PDF document is set to contain forms. Then form controls can be added to any page in the PDF document.
-## SetPDFFormFields
+## FlattenPDFFormFields
-This sample demonstrates how to set the values of form fields and save those values to a PDF file. ImageGear provides methods and properties to set current values or arrays of values for Acroform fields.
+ImageGear allows the form fields in a PDF document to be converted into content on the pages so that the fields are no longer interactive.
+
+## ModifyFieldAppearance
+
+This sample demonstrates how to accentuate a widget to fit better in the PDF form, or to emphasize important items.
## ReadPDFFormFields
This sample demonstrates how to read the values from form fields. ImageGear provides methods and properties to read current and default values or arrays of values from Acroform fields.
-## FlattenPDFFormFields
+## SetPDFFormFields
-ImageGear allows the form fields in a PDF document to be converted into content on the pages so that the fields are no longer interactive.
+This sample demonstrates how to set the values of form fields and save those values to a PDF file. ImageGear provides methods and properties to set current values or arrays of values for Acroform fields.
diff --git a/Samples/PDF Acroform/ReadPDFFormFields/README.md b/Samples/PDF Acroform/ReadPDFFormFields/README.md
index db6b4c9..c24de65 100644
--- a/Samples/PDF Acroform/ReadPDFFormFields/README.md
+++ b/Samples/PDF Acroform/ReadPDFFormFields/README.md
@@ -33,7 +33,7 @@ When the sample is built, it produces a console application executable in the bi
To run this sample under Linux, run the sample from "bin/Debug/net6.0/" or "bin/x64/Debug/net6.0/" (depending on the solution platform) using `./ReadPDFFormFields`.
-_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com).
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
## PDF Acroform Support in ImageGear .NET
diff --git a/Samples/PDF Acroform/SetPDFFormFields/README.md b/Samples/PDF Acroform/SetPDFFormFields/README.md
index 7c14c3e..1452a2f 100644
--- a/Samples/PDF Acroform/SetPDFFormFields/README.md
+++ b/Samples/PDF Acroform/SetPDFFormFields/README.md
@@ -33,7 +33,7 @@ When the sample is built, it produces a console application executable in the bi
To run this sample under Linux, run the sample from "bin/Debug/net6.0/" or "bin/x64/Debug/net6.0/" (depending on the solution platform) using `./SetPDFFormFields`.
-_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com).
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
## PDF Acroform Support in ImageGear .NET
diff --git a/Samples/PDF Compression/CompressPDFFile/Program.cs b/Samples/PDF Compression/CompressPDFFile/Program.cs
index 7f230e1..a6474fc 100644
--- a/Samples/PDF Compression/CompressPDFFile/Program.cs
+++ b/Samples/PDF Compression/CompressPDFFile/Program.cs
@@ -18,7 +18,17 @@ static void Main()
ImGearPDF.Initialize();
// Create compression options with default values.
- ImGearCompressOptions compressOptions = new ImGearCompressOptions();
+ ImGearCompressOptions compressOptions = new ImGearCompressOptions()
+ {
+ IsDownsampleImagesEnabled = true,
+ IsFieldFlatteningEnabled = false,
+ IsRemoveImageThumbnailEnabled = true,
+ IsRemoveMetadataEnabled = false,
+ RecompressImageJbig2CompressionLevel = ImGearJbig2CompressionLevel.LosslessGeneric,
+ RecompressImageJpeg2kCompressionLevel = ImGearJpeg2kCompressionLevel.LossyLow,
+ RecompressImageJpegCompressionLevel = ImGearJpegCompressionLevel.LossyLow,
+ RecompressUsingJpeg2k = false
+ };
// Open file for PDF file reading.
using (FileStream stream = new FileStream(@"../../../../../../../Sample Input/compression-info.pdf", FileMode.Open, FileAccess.Read, FileShare.Read))
@@ -27,7 +37,7 @@ static void Main()
using (ImGearPDFDocument pdfDocument = (ImGearPDFDocument)ImGearFileFormats.LoadDocument(stream))
{
// Save the PDF document with compression.
- pdfDocument.SaveCompressed(@"../../../../../../../Sample Output/CompressPDFFile.pdf");
+ pdfDocument.SaveCompressed(@"../../../../../../../Sample Output/CompressPDFFile.pdf", compressOptions);
}
// Terminate PDF support once for each call to Initialize PDF support.
diff --git a/Samples/PDF Compression/CompressPDFFile/README.md b/Samples/PDF Compression/CompressPDFFile/README.md
index 4c8f13d..f04510e 100644
--- a/Samples/PDF Compression/CompressPDFFile/README.md
+++ b/Samples/PDF Compression/CompressPDFFile/README.md
@@ -33,7 +33,7 @@ When the sample is built, it produces a console application executable in the bi
To run this sample under Linux, run the sample from "bin/Debug/net6.0/" or "bin/x64/Debug/net6.0/" (depending on the solution platform) using `./CompressPDFFile`.
-_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com).
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
## PDF Compression Support in ImageGear .NET
diff --git a/Samples/PDF XFA/OpenPDFWithXFA/README.md b/Samples/PDF XFA/OpenPDFWithXFA/README.md
index 518aa3a..04d0a15 100644
--- a/Samples/PDF XFA/OpenPDFWithXFA/README.md
+++ b/Samples/PDF XFA/OpenPDFWithXFA/README.md
@@ -33,7 +33,7 @@ When the sample is built, it produces a console application executable in the bi
To run this sample under Linux, run the sample from "bin/Debug/net6.0/" or "bin/x64/Debug/net6.0/" (depending on the solution platform) using `./OpenPDFWithXFA`.
-_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com).
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
## PDF XFA Support in ImageGear .NET
diff --git a/Samples/PDF and JPEG/AddImageToPDFAsAPage/README.md b/Samples/PDF and JPEG/AddImageToPDFAsAPage/README.md
index f6a768d..c3887cd 100644
--- a/Samples/PDF and JPEG/AddImageToPDFAsAPage/README.md
+++ b/Samples/PDF and JPEG/AddImageToPDFAsAPage/README.md
@@ -33,7 +33,7 @@ When the sample is built, it produces a console application executable in the bi
To run this sample under Linux, run the sample from "bin/Debug/net6.0/" or "bin/x64/Debug/net6.0/" (depending on the solution platform) using `./AddImageToPDFAsAPage`.
-_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com).
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
## PDF and JPEG Support in ImageGear .NET
diff --git a/Samples/PDF and JPEG/PlaceImageOnAnExistingPDFPage/README.md b/Samples/PDF and JPEG/PlaceImageOnAnExistingPDFPage/README.md
index ae45b1f..b17d64b 100644
--- a/Samples/PDF and JPEG/PlaceImageOnAnExistingPDFPage/README.md
+++ b/Samples/PDF and JPEG/PlaceImageOnAnExistingPDFPage/README.md
@@ -33,7 +33,7 @@ When the sample is built, it produces a console application executable in the bi
To run this sample under Linux, run the sample from "bin/Debug/net6.0/" or "bin/x64/Debug/net6.0/" (depending on the solution platform) using `./PlaceImageOnAnExistingPDFPage`.
-_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com).
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
## PDF and JPEG Support in ImageGear .NET
diff --git a/Samples/PDF/AddWatermarkToPDFPage/AddWatermarkToPDFPage.csproj b/Samples/PDF/AddWatermarkToPDFPage/AddWatermarkToPDFPage.csproj
new file mode 100644
index 0000000..9b1dd0b
--- /dev/null
+++ b/Samples/PDF/AddWatermarkToPDFPage/AddWatermarkToPDFPage.csproj
@@ -0,0 +1,16 @@
+
+
+
+ Exe
+ net6.0;net48
+ Major
+ false
+ x64
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Samples/PDF/AddWatermarkToPDFPage/AddWatermarkToPDFPage.sln b/Samples/PDF/AddWatermarkToPDFPage/AddWatermarkToPDFPage.sln
new file mode 100644
index 0000000..4915bb7
--- /dev/null
+++ b/Samples/PDF/AddWatermarkToPDFPage/AddWatermarkToPDFPage.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.4.33110.190
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AddWatermarkToPDFPage", "AddWatermarkToPDFPage.csproj", "{F8250223-DAEF-456B-98E3-4F6DABEC8382}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|x64 = Debug|x64
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {F8250223-DAEF-456B-98E3-4F6DABEC8382}.Debug|x64.ActiveCfg = Debug|x64
+ {F8250223-DAEF-456B-98E3-4F6DABEC8382}.Debug|x64.Build.0 = Debug|x64
+ {F8250223-DAEF-456B-98E3-4F6DABEC8382}.Release|x64.ActiveCfg = Release|x64
+ {F8250223-DAEF-456B-98E3-4F6DABEC8382}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {EF9659D5-7A45-491E-8996-3E8F439387A2}
+ EndGlobalSection
+EndGlobal
diff --git a/Samples/PDF/AddWatermarkToPDFPage/AssemblyInfo.cs b/Samples/PDF/AddWatermarkToPDFPage/AssemblyInfo.cs
new file mode 100644
index 0000000..b3508f8
--- /dev/null
+++ b/Samples/PDF/AddWatermarkToPDFPage/AssemblyInfo.cs
@@ -0,0 +1,35 @@
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("AddWatermarkToPDFPage")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("ImageGear for .NET")]
+[assembly: AssemblyCopyright("")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("0ebcb9f8-f924-466b-b926-711cffcbefb8")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Samples/PDF/AddWatermarkToPDFPage/Program.cs b/Samples/PDF/AddWatermarkToPDFPage/Program.cs
new file mode 100644
index 0000000..e7a8cc9
--- /dev/null
+++ b/Samples/PDF/AddWatermarkToPDFPage/Program.cs
@@ -0,0 +1,111 @@
+using System;
+using System.IO;
+using ImageGear.Core;
+using ImageGear.Formats;
+using ImageGear.Formats.PDF;
+
+namespace AddWatermarkToPDFPage
+{
+ class Program
+ {
+ static void Main()
+ {
+ // Initialize common formats.
+ ImGearCommonFormats.Initialize();
+
+ // Add PDF format to filters list.
+ ImGearFileFormats.Filters.Add(ImGearPDF.CreatePDFFormat());
+
+ // Initialize PDF support. Initialize for each process or thread.
+ ImGearPDF.Initialize();
+
+ const Int32 BITS_PER_BYTE = 8;
+
+ // Load a PDF document.
+ using (Stream pdfStream = new FileStream(@"../../../../../../../Sample Input/multi-page.pdf", FileMode.Open, FileAccess.Read, FileShare.None))
+ using (Stream imgStream = new FileStream(@"../../../../../../../Sample Input/water.jpg", FileMode.Open, FileAccess.Read, FileShare.None))
+ {
+ using (ImGearPDFDocument pdfDocument = (ImGearPDFDocument)ImGearFileFormats.LoadDocument(pdfStream))
+ using (ImGearDocument watermarkDocument = ImGearFileFormats.LoadDocument(imgStream))
+ {
+ ImGearPDFPage pdfPage = pdfDocument.Pages[1] as ImGearPDFPage;
+ ImGearPage watermarkPage = watermarkDocument.Pages[0];
+
+ // Acquire the PDF page content.
+ using (ImGearPDEContent content = pdfPage.GetContent())
+ {
+ // Extract pixel data from RGB24 image.
+ Int32 strideInBytes = (watermarkPage.DIB.Width * watermarkPage.DIB.BitDepth + BITS_PER_BYTE - 1)
+ / BITS_PER_BYTE;
+ Byte[] pixelData = new Byte[strideInBytes * watermarkPage.DIB.Height];
+ for (int row = 0; row < watermarkPage.DIB.Height; row++)
+ {
+ ImGearArrayRef raster = watermarkPage.DIB.GetRaster(row);
+ Array.Copy((Byte[])raster.Content, raster.Offset, pixelData, row * strideInBytes,
+ strideInBytes);
+ }
+
+ // Create a DeviceRGB PDE Colorspace for RGB24 image.
+ ImGearPDEColorSpace igPDEColorSpace = new ImGearPDEColorSpace(
+ new ImGearPDFAtom("DeviceRGB"));
+
+ // Create a PDE Image attributes for image Form XObject.
+ ImGearPDEImageAttrs igPDEImageAttrs = new ImGearPDEImageAttrs();
+ igPDEImageAttrs.Width = watermarkPage.DIB.Width;
+ igPDEImageAttrs.Height = watermarkPage.DIB.Height;
+ igPDEImageAttrs.Flags = ImGearPDEImageAttrFlags.EXTERNAL;
+ igPDEImageAttrs.BitsPerComponent = 8;
+
+ // Create a transform matrix that places the image at the bottom-left corner
+ // of the PDF page.
+ ImGearPDFFixedMatrix igPDETransformMatrix = new ImGearPDFFixedMatrix();
+ igPDETransformMatrix.A = ImGearPDF.DoubleToFixed(((double)watermarkPage.DIB.Width));
+ igPDETransformMatrix.B = (int)ImGearPDFFixedValues.ZERO;
+ igPDETransformMatrix.C = (int)ImGearPDFFixedValues.ZERO;
+ igPDETransformMatrix.D = ImGearPDF.DoubleToFixed(((double)watermarkPage.DIB.Height));
+ igPDETransformMatrix.H = (int)ImGearPDFFixedValues.ZERO;
+ igPDETransformMatrix.V = (int)ImGearPDFFixedValues.ZERO;
+
+ // Create a filter to compress RGB24 pixel data using the discrete cosine
+ // transform (DCT) technique based on the JPEG standard.
+ ImGearPDEFilterArray igPDEFilterArray = new ImGearPDEFilterArray();
+ ImGearPDFBasDict igDict = new ImGearPDFBasDict((ImGearPDFDocument)pdfPage.Document,
+ false, 3);
+ igDict.PutInt(new ImGearPDFAtom("Columns"), false, watermarkPage.DIB.Width);
+ igDict.PutInt(new ImGearPDFAtom("Rows"), false, watermarkPage.DIB.Height);
+ igDict.PutInt(new ImGearPDFAtom("Colors"), false, 3);
+ ImGearPDEFilterSpec igPDEFilterSpec = new ImGearPDEFilterSpec();
+ igPDEFilterSpec.Name = new ImGearPDFAtom("DCTDecode");
+ igPDEFilterSpec.DecodeParams = igDict;
+ igPDEFilterSpec.EncodeParams = igDict;
+ igPDEFilterArray.AddSpec(igPDEFilterSpec);
+
+ // Create the PDE image.
+ using (ImGearPDEImage igPDEImage = new ImGearPDEImage(igPDEImageAttrs,
+ igPDETransformMatrix, ImGearPDEImageDataFlags.DECODED, igPDEColorSpace, null,
+ igPDEFilterArray, null, pixelData))
+ {
+ // Add the PDEImage to the PDF page graphics.
+ content.AddElement((int)ImGearPDEInsertElement.AFTER_LAST, igPDEImage);
+ pdfPage.SetContent();
+
+ // Force refresh of PDF page content.
+ pdfPage.ResetDisplayCache();
+ }
+
+ // Save the PDF document.
+ using (Stream streamOut = new FileStream(@"../../../../../../../Sample Output/AddWatermarkToPDFPage.pdf", FileMode.Create, FileAccess.Write, FileShare.None))
+ ImGearFileFormats.SaveDocument(pdfDocument, streamOut, 0, ImGearSavingModes.OVERWRITE, ImGearSavingFormats.PDF, new ImGearSaveOptions());
+ }
+
+ // Release the PDF page content.
+ pdfPage.ReleaseContent();
+ }
+
+ }
+
+ // Terminate PDF support once for each call to Initialize PDF support.
+ ImGearPDF.Terminate();
+ }
+ }
+}
diff --git a/Samples/PDF/AddWatermarkToPDFPage/README.md b/Samples/PDF/AddWatermarkToPDFPage/README.md
new file mode 100644
index 0000000..fa41dbe
--- /dev/null
+++ b/Samples/PDF/AddWatermarkToPDFPage/README.md
@@ -0,0 +1,40 @@
+# Add a Watermark to a PDF (AddWatermarkToPDFPage)
+
+When using ImageGear with PDF files, ImageGear can add an image as a PDE element at a specified location.
+
+This sample demonstrates how to watermark a page in a PDF document using PDE element operations with a raster image loaded into ImageGear.
+
+For more information about the ImageGear .NET API, please refer to the [ImageGear .NET Online Documentation](https://help.accusoft.com/ImageGear/latest/webframe.html).
+
+## System Requirements
+
+For a list of the system and development software necessary to build and run these samples, please refer to the [ImageGear .NET Online Documentation](https://help.accusoft.com/ImageGear/latest/webframe.html#system-requirements.html).
+
+## Building the Sample
+
+Starting with ImageGear v26.0, ImageGear supports .NET Core.
+
+All samples can be built using Microsoft Visual Studio 2022.
+
+To build this sample:
+
+1. Open the .sln file in the project directory using Visual Studio 2022.
+2. Select a Solution Configuration (Debug or Release) and an available Solution Platform (x64 or Any CPU).
+3. Build with Build Solution located in the Build menu.
+
+To build this sample under Linux:
+
+1. Install the Microsoft .NET SDK for your Linux distribution.
+2. Run `dotnet build AddWatermarkToPDFPage.sln`. By default this will build the Debug Solution Configuration.
+
+## Running the Sample
+
+When the sample is built, it produces a console application executable in the bin subdirectory. Run this application by double-clicking the application icon, or run it directly from Command Prompt (cmd.exe), PowerShell, or similar. Note that the working directory must be the same as the directory containing the sample executable in order to find the sample input image and the output directory. The input image(s) and output directory are specified relative to the location of the application in all of these samples.
+
+To run this sample under Linux, run the sample from "bin/Debug/net6.0/" or "bin/x64/Debug/net6.0/" (depending on the solution platform) using `./AddWatermarkToPDFPage`.
+
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
+
+## PDF Support in ImageGear .NET
+
+ImageGear .NET is a robust, multi-platform, multi-language PDF solution. For more information on PDF support in ImageGear .NET, [please visit us at Accusoft.](https://www.accusoft.com/products/imagegear-collection/imagegear-dot-net/)
diff --git a/Samples/PDF/ConvertPDFToPDFA_2b/AssemblyInfo.cs b/Samples/PDF/ConvertPDFToPDFA_2b/AssemblyInfo.cs
new file mode 100644
index 0000000..c9f545c
--- /dev/null
+++ b/Samples/PDF/ConvertPDFToPDFA_2b/AssemblyInfo.cs
@@ -0,0 +1,35 @@
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("ConvertPDFToPDFA_2b")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("ImageGear for .NET")]
+[assembly: AssemblyCopyright("")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("7ac0c6ad-0fa2-46fd-a291-84b06cecb654")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Samples/PDF/ConvertPDFToPDFA_2b/ConvertPDFToPDFA_2b.csproj b/Samples/PDF/ConvertPDFToPDFA_2b/ConvertPDFToPDFA_2b.csproj
new file mode 100644
index 0000000..180e527
--- /dev/null
+++ b/Samples/PDF/ConvertPDFToPDFA_2b/ConvertPDFToPDFA_2b.csproj
@@ -0,0 +1,16 @@
+
+
+
+ Exe
+ net6.0;net48
+ Major
+ false
+ x64
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Samples/PDF/ConvertPDFToPDFA_2b/ConvertPDFToPDFA_2b.sln b/Samples/PDF/ConvertPDFToPDFA_2b/ConvertPDFToPDFA_2b.sln
new file mode 100644
index 0000000..2ca60de
--- /dev/null
+++ b/Samples/PDF/ConvertPDFToPDFA_2b/ConvertPDFToPDFA_2b.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.1.32319.34
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ConvertPDFToPDFA_2b", "ConvertPDFToPDFA_2b.csproj", "{89F1416A-B2BA-451c-ACFF-08BD29B2C568}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|x64 = Debug|x64
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {89F1416A-B2BA-451c-ACFF-08BD29B2C568}.Debug|x64.ActiveCfg = Debug|x64
+ {89F1416A-B2BA-451c-ACFF-08BD29B2C568}.Debug|x64.Build.0 = Debug|x64
+ {89F1416A-B2BA-451c-ACFF-08BD29B2C568}.Release|x64.ActiveCfg = Release|x64
+ {89F1416A-B2BA-451c-ACFF-08BD29B2C568}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {A723759E-966E-4124-B470-05FD7E9AC7CB}
+ EndGlobalSection
+EndGlobal
diff --git a/Samples/PDF/ConvertPDFToPDFA_2b/Program.cs b/Samples/PDF/ConvertPDFToPDFA_2b/Program.cs
new file mode 100644
index 0000000..8631e81
--- /dev/null
+++ b/Samples/PDF/ConvertPDFToPDFA_2b/Program.cs
@@ -0,0 +1,51 @@
+using System.IO;
+using ImageGear.Formats;
+using ImageGear.Formats.PDF;
+
+namespace ConvertPDFToPDFA_2b
+{
+ class Program
+ {
+ static void Main()
+ {
+ // Initialize common formats.
+ ImGearCommonFormats.Initialize();
+
+ // Add PDF format to filters list.
+ ImGearFileFormats.Filters.Add(ImGearPDF.CreatePDFFormat());
+
+ // Initialize PDF support. Initialize for each process or thread.
+ ImGearPDF.Initialize();
+
+ // Load a PDF document.
+ using (Stream stream = new FileStream(@"../../../../../../../Sample Input/multi-page.pdf", FileMode.Open, FileAccess.Read, FileShare.Read))
+ {
+ using (ImGearPDFDocument imGearPDFDocument = (ImGearPDFDocument)ImGearFileFormats.LoadDocument(stream, 0, -1))
+ {
+
+ // Create PDF/A conversion options for PDF/A-2b with a 300 DPI fallback rasterization resolution.
+ using (ImGearPDFPreflightConversionOptions options = new ImGearPDFPreflightConversionOptions(ImGearPDFPreflightProfile.PDFA_2B_2011, 300))
+ {
+
+ // Attempt to create a new ImGearPDFDocument object that is PDF/A-2b compliant.
+ using (ImGearPDFPreflight imGearPDFPreflight = new ImGearPDFPreflight(imGearPDFDocument))
+ {
+ ImGearPDFPreflightConversionResult imGearPDFPreflightConversionResult = imGearPDFPreflight.Convert(options);
+ if (imGearPDFPreflightConversionResult.Succeeded)
+ {
+
+ // Save the PDF/A-2b compliant PDF document.
+ using (Stream outputStream = new FileStream(@"../../../../../../../Sample Output/ConvertPDFToPDFA_2b.pdf", FileMode.Create, FileAccess.Write))
+ imGearPDFPreflightConversionResult.Document.Save(outputStream, ImGearSavingFormats.PDF, 0, 0, -1, ImGearSavingModes.OVERWRITE);
+ }
+ imGearPDFPreflightConversionResult.Document?.Dispose();
+ }
+ }
+ }
+ }
+
+ // Terminate PDF support once for each call to Initialize PDF support.
+ ImGearPDF.Terminate();
+ }
+ }
+}
diff --git a/Samples/PDF/ConvertPDFToPDFA_2b/README.md b/Samples/PDF/ConvertPDFToPDFA_2b/README.md
new file mode 100644
index 0000000..3446c12
--- /dev/null
+++ b/Samples/PDF/ConvertPDFToPDFA_2b/README.md
@@ -0,0 +1,40 @@
+# Convert PDF to PDF/A-2b (ConvertPDFToPDFA_2b)
+
+When using ImageGear with PDF files, ImageGear can convert the PDF to be PDF/A-2b compliant.
+
+This sample demonstrates how to take a PDF document loaded into ImageGear, and convert that PDF document to be compliant with the PDF/A-2b specification. In case any page of the PDF document can not be modified into compliance, the page can be rasterized, which is always compliant.
+
+For more information about the ImageGear .NET API, please refer to the [ImageGear .NET Online Documentation](https://help.accusoft.com/ImageGear/latest/webframe.html).
+
+## System Requirements
+
+For a list of the system and development software necessary to build and run these samples, please refer to the [ImageGear .NET Online Documentation](https://help.accusoft.com/ImageGear/latest/webframe.html#system-requirements.html).
+
+## Building the Sample
+
+Starting with ImageGear v26.0, ImageGear supports .NET Core.
+
+All samples can be built using Microsoft Visual Studio 2022.
+
+To build this sample:
+
+1. Open the .sln file in the project directory using Visual Studio 2022.
+2. Select a Solution Configuration (Debug or Release) and an available Solution Platform (x64 or Any CPU).
+3. Build with Build Solution located in the Build menu.
+
+To build this sample under Linux:
+
+1. Install the Microsoft .NET SDK for your Linux distribution.
+2. Run `dotnet build ConvertPDFToPDFA_2b.sln`. By default this will build the Debug Solution Configuration.
+
+## Running the Sample
+
+When the sample is built, it produces a console application executable in the bin subdirectory. Run this application by double-clicking the application icon, or run it directly from Command Prompt (cmd.exe), PowerShell, or similar. Note that the working directory must be the same as the directory containing the sample executable in order to find the sample input image and the output directory. The input image(s) and output directory are specified relative to the location of the application in all of these samples.
+
+To run this sample under Linux, run the sample from "bin/Debug/net6.0/" or "bin/x64/Debug/net6.0/" (depending on the solution platform) using `./ConvertPDFToPDFA_2b`.
+
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
+
+## PDF Support in ImageGear .NET
+
+ImageGear .NET is a robust, multi-platform, multi-language PDF solution. For more information on PDF support in ImageGear .NET, [please visit us at Accusoft.](https://www.accusoft.com/products/imagegear-collection/imagegear-dot-net/)
diff --git a/Samples/PDF/DeletePDFPage/README.md b/Samples/PDF/DeletePDFPage/README.md
index 4eccce2..0d0db29 100644
--- a/Samples/PDF/DeletePDFPage/README.md
+++ b/Samples/PDF/DeletePDFPage/README.md
@@ -33,7 +33,7 @@ When the sample is built, it produces a console application executable in the bi
To run this sample under Linux, run the sample from "bin/Debug/net6.0/" or "bin/x64/Debug/net6.0/" (depending on the solution platform) using `./DeletePDFPage`.
-_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com).
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
## PDF Support in ImageGear .NET
diff --git a/Samples/PDF/IntrinsicallyRotatePDFPage/README.md b/Samples/PDF/IntrinsicallyRotatePDFPage/README.md
index 4e2cfe9..71f75d0 100644
--- a/Samples/PDF/IntrinsicallyRotatePDFPage/README.md
+++ b/Samples/PDF/IntrinsicallyRotatePDFPage/README.md
@@ -33,7 +33,7 @@ When the sample is built, it produces a console application executable in the bi
To run this sample under Linux, run the sample from "bin/Debug/net6.0/" or "bin/x64/Debug/net6.0/" (depending on the solution platform) using `./IntrinsicallyRotatePDFPage`.
-_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com).
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
## PDF Support in ImageGear .NET
diff --git a/Samples/PDF/LoadEncryptedPDF/README.md b/Samples/PDF/LoadEncryptedPDF/README.md
index af46d85..a7fca84 100644
--- a/Samples/PDF/LoadEncryptedPDF/README.md
+++ b/Samples/PDF/LoadEncryptedPDF/README.md
@@ -33,7 +33,7 @@ When the sample is built, it produces a console application executable in the bi
To run this sample under Linux, run the sample from "bin/Debug/net6.0/" or "bin/x64/Debug/net6.0/" (depending on the solution platform) using `./LoadEncryptedPDF`.
-_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com).
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
## Imaging Support in ImageGear .NET
diff --git a/Samples/PDF/LoadPDFSaveWithFlags/AssemblyInfo.cs b/Samples/PDF/LoadPDFSaveWithFlags/AssemblyInfo.cs
new file mode 100644
index 0000000..c7ede1c
--- /dev/null
+++ b/Samples/PDF/LoadPDFSaveWithFlags/AssemblyInfo.cs
@@ -0,0 +1,35 @@
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("LoadPDFSaveWithFlags")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("ImageGear for .NET")]
+[assembly: AssemblyCopyright("")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("AE89FEB2-8E90-4E42-84FB-C5DD010568CF")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Samples/PDF/LoadPDFSaveWithFlags/LoadPDFSaveWithFlags.csproj b/Samples/PDF/LoadPDFSaveWithFlags/LoadPDFSaveWithFlags.csproj
new file mode 100644
index 0000000..2f0c38c
--- /dev/null
+++ b/Samples/PDF/LoadPDFSaveWithFlags/LoadPDFSaveWithFlags.csproj
@@ -0,0 +1,16 @@
+
+
+
+ Exe
+ net6.0;net48
+ Major
+ false
+ x64
+
+
+
+
+
+
+
+
diff --git a/Samples/PDF/LoadPDFSaveWithFlags/LoadPDFSaveWithFlags.sln b/Samples/PDF/LoadPDFSaveWithFlags/LoadPDFSaveWithFlags.sln
new file mode 100644
index 0000000..cec615b
--- /dev/null
+++ b/Samples/PDF/LoadPDFSaveWithFlags/LoadPDFSaveWithFlags.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.1.32319.34
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LoadPDFSaveWithFlags", "LoadPDFSaveWithFlags.csproj", "{F774BA6F-2342-4B6D-90E9-71B48433CC17}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|x64 = Debug|x64
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {F774BA6F-2342-4B6D-90E9-71B48433CC17}.Debug|x64.ActiveCfg = Debug|x64
+ {F774BA6F-2342-4B6D-90E9-71B48433CC17}.Debug|x64.Build.0 = Debug|x64
+ {F774BA6F-2342-4B6D-90E9-71B48433CC17}.Release|x64.ActiveCfg = Release|x64
+ {F774BA6F-2342-4B6D-90E9-71B48433CC17}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {C915F220-F3AC-4F55-B509-6841021EC6B6}
+ EndGlobalSection
+EndGlobal
diff --git a/Samples/PDF/LoadPDFSaveWithFlags/Program.cs b/Samples/PDF/LoadPDFSaveWithFlags/Program.cs
new file mode 100644
index 0000000..4bed99f
--- /dev/null
+++ b/Samples/PDF/LoadPDFSaveWithFlags/Program.cs
@@ -0,0 +1,44 @@
+using System.IO;
+using ImageGear.Formats;
+using ImageGear.Formats.PDF;
+
+namespace LoadPDFSaveWithFlags
+{
+ class Program
+ {
+ static void Main()
+ {
+ // Initialize common formats.
+ ImGearCommonFormats.Initialize();
+
+ // Add PDF format to filters list.
+ ImGearFileFormats.Filters.Add(ImGearPDF.CreatePDFFormat());
+
+ // Initialize PDF support. Initialize for each process or thread.
+ ImGearPDF.Initialize();
+
+ // Load a PDF document.
+ using (Stream stream = new FileStream(@"../../../../../../../Sample Input/samplepdf.pdf", FileMode.Open, FileAccess.Read, FileShare.Read))
+ {
+ using (ImGearPDFDocument imGearPDFDocument = (ImGearPDFDocument)ImGearFileFormats.LoadDocument(stream, 0, -1))
+ {
+
+ // Choose PDF save flags that can reduce the size of a PDF document.
+ ImGearPDFSaveFlags saveFlags = ImGearPDFSaveFlags.ADD_FLATE | ImGearPDFSaveFlags.REPLACE_LZW | ImGearPDFSaveFlags.REMOVE_ASCII_FILTERS | ImGearPDFSaveFlags.COMPRESSED | ImGearPDFSaveFlags.FULL | ImGearPDFSaveFlags.OPTIMIZE_XOBJECTS | ImGearPDFSaveFlags.OPTIMIZE_CONTENT_STREAMS | ImGearPDFSaveFlags.OPTIMIZE_FONTS | ImGearPDFSaveFlags.COLLECT_GARBAGE;
+
+ ImGearControlParameter parameter = ImGearFileFormats.Filters.Get(ImGearFormats.PDF).Parameters.GetByName("SaveFlags");
+
+ // Update the PDF filter control parameter 'SaveFlags' used when writing PDF documents.
+ parameter.Value = saveFlags;
+
+ // Save the PDF document.
+ using (Stream outputStream = new FileStream(@"../../../../../../../Sample Output/LoadPDFSaveWithFlags.pdf", FileMode.Create, FileAccess.Write))
+ imGearPDFDocument.Save(outputStream, ImGearSavingFormats.PDF, 0, 0, -1, ImGearSavingModes.OVERWRITE);
+ }
+ }
+
+ // Terminate PDF support once for each call to Initialize PDF support.
+ ImGearPDF.Terminate();
+ }
+ }
+}
diff --git a/Samples/PDF/LoadPDFSaveWithFlags/README.md b/Samples/PDF/LoadPDFSaveWithFlags/README.md
new file mode 100644
index 0000000..e2e2539
--- /dev/null
+++ b/Samples/PDF/LoadPDFSaveWithFlags/README.md
@@ -0,0 +1,40 @@
+# Loading And Saving a PDF file with Flags (LoadPDFSaveWithFlags)
+
+When using ImageGear to save PDF files, it may be useful to reduce the size to allow for more efficient transmission or storage.
+
+This sample demonstrates saving a PDF file using various flags. There are instances with fonts used in the creation of the PDF that their encodings and descriptors are identical, taking up unnecessary space. Also, streams should be optimized, merging substreams and reducing the size of the outputted PDF. Unreferenced items can increase the space making the PDF larger than expected. Objects using the creation or editing of the PDF will use more space. Removing, or reducing the impact of these obstacles will also reduce the overall size, making transportation and storage easier.
+
+For more information about the ImageGear .NET API, please refer to the [ImageGear .NET Online Documentation](https://help.accusoft.com/ImageGear/latest/webframe.html).
+
+## System Requirements
+
+For a list of the system and development software necessary to build and run these samples, please refer to the [ImageGear .NET Online Documentation](https://help.accusoft.com/ImageGear/latest/webframe.html#system-requirements.html).
+
+## Building the Sample
+
+Starting with ImageGear v26.0, ImageGear supports .NET Core.
+
+All samples can be built using Microsoft Visual Studio 2022.
+
+To build this sample:
+
+1. Open the .sln file in the project directory using Visual Studio 2022.
+2. Select a Solution Configuration (Debug or Release) and an available Solution Platform (x64 or Any CPU).
+3. Build with Build Solution located in the Build menu.
+
+To build this sample under Linux:
+
+1. Install the Microsoft .NET SDK for your Linux distribution.
+2. Run `dotnet build LoadPDFSaveWithFlags.sln`. By default this will build the Debug Solution Configuration.
+
+## Running the Sample
+
+When the sample is built, it produces a console application executable in the bin subdirectory. Run this application by double-clicking the application icon, or run it directly from Command Prompt (cmd.exe), PowerShell, or similar. Note that the working directory must be the same as the directory containing the sample executable in order to find the sample input image and the output directory. The input image(s) and output directory are specified relative to the location of the application in all of these samples.
+
+To run this sample under Linux, run the sample from "bin/Debug/net6.0/" or "bin/x64/Debug/net6.0/" (depending on the solution platform) using `./LoadPDFSaveWithFlags`.
+
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
+
+## PDF Support in ImageGear .NET
+
+ImageGear .NET is a robust, multi-platform, multi-language PDF solution. For more information on PDF support in ImageGear .NET, [please visit us at Accusoft.](https://www.accusoft.com/products/imagegear-collection/imagegear-dot-net/)
diff --git a/Samples/PDF/LoadSinglePDFPage/AssemblyInfo.cs b/Samples/PDF/LoadSinglePDFPage/AssemblyInfo.cs
new file mode 100644
index 0000000..a96d80e
--- /dev/null
+++ b/Samples/PDF/LoadSinglePDFPage/AssemblyInfo.cs
@@ -0,0 +1,35 @@
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("LoadSinglePDFPage")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("ImageGear for .NET")]
+[assembly: AssemblyCopyright("")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("6032a779-8a09-4e25-8989-d58ca6c6aa22")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Samples/PDF/LoadSinglePDFPage/LoadSinglePDFPage.csproj b/Samples/PDF/LoadSinglePDFPage/LoadSinglePDFPage.csproj
new file mode 100644
index 0000000..04ecc30
--- /dev/null
+++ b/Samples/PDF/LoadSinglePDFPage/LoadSinglePDFPage.csproj
@@ -0,0 +1,16 @@
+
+
+
+ Exe
+ net6.0;net48
+ Major
+ false
+ x64
+
+
+
+
+
+
+
+
diff --git a/Samples/PDF/LoadSinglePDFPage/LoadSinglePDFPage.sln b/Samples/PDF/LoadSinglePDFPage/LoadSinglePDFPage.sln
new file mode 100644
index 0000000..6e24f85
--- /dev/null
+++ b/Samples/PDF/LoadSinglePDFPage/LoadSinglePDFPage.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.3.32901.215
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LoadSinglePDFPage", "LoadSinglePDFPage.csproj", "{F87D465A-E152-4496-9CB0-2F149EE48863}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|x64 = Debug|x64
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {F87D465A-E152-4496-9CB0-2F149EE48863}.Debug|x64.ActiveCfg = Debug|x64
+ {F87D465A-E152-4496-9CB0-2F149EE48863}.Debug|x64.Build.0 = Debug|x64
+ {F87D465A-E152-4496-9CB0-2F149EE48863}.Release|x64.ActiveCfg = Release|x64
+ {F87D465A-E152-4496-9CB0-2F149EE48863}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {CEC9FD86-F1A4-4957-B274-AD72DD268378}
+ EndGlobalSection
+EndGlobal
diff --git a/Samples/PDF/LoadSinglePDFPage/Program.cs b/Samples/PDF/LoadSinglePDFPage/Program.cs
new file mode 100644
index 0000000..3b0a233
--- /dev/null
+++ b/Samples/PDF/LoadSinglePDFPage/Program.cs
@@ -0,0 +1,38 @@
+using System;
+using System.IO;
+using ImageGear.Core;
+using ImageGear.Formats;
+using ImageGear.Formats.PDF;
+
+namespace LoadSinglePDFPage
+{
+ class Program
+ {
+ static void Main()
+ {
+ // Initialize common formats.
+ ImGearCommonFormats.Initialize();
+
+ // Add PDF format to filters list.
+ ImGearFileFormats.Filters.Add(ImGearPDF.CreatePDFFormat());
+
+ // Initialize PDF support. Initialize for each process or thread.
+ ImGearPDF.Initialize();
+
+ // Load the first page of the PDF document.
+ using (Stream stream = new FileStream(@"../../../../../../../Sample Input/multi-page.pdf", FileMode.Open, FileAccess.Read, FileShare.Read))
+ {
+ using (ImGearPDFPage pdfPage = (ImGearPDFPage)ImGearFileFormats.LoadPage(stream, 0))
+ {
+
+ // Report the PDF page's physical size in default user space units, typically 72 DPI.
+ ImGearRectangle mediaRect = pdfPage.MediaRect;
+ Console.WriteLine($"MediaRect is {{Left={mediaRect.Left}, Top={mediaRect.Top}, Right={mediaRect.Right}, Bottom={mediaRect.Bottom}}}");
+ }
+ }
+
+ // Terminate PDF support once for each call to Initialize PDF support.
+ ImGearPDF.Terminate();
+ }
+ }
+}
diff --git a/Samples/PDF/LoadSinglePDFPage/README.md b/Samples/PDF/LoadSinglePDFPage/README.md
new file mode 100644
index 0000000..ee254c9
--- /dev/null
+++ b/Samples/PDF/LoadSinglePDFPage/README.md
@@ -0,0 +1,40 @@
+# Load Single PDF Page (LoadSinglePDFPage)
+
+ImageGear provides API for direct access to individual PDF pages.
+
+After reading the PDF file into a stream, create an ImGearPDFPage object from that stream and a page index. This example reports the second PDF page's physical size in default user space units, typically 72 DPI, read from the MediaRect property.
+
+For more information about the ImageGear .NET API, please refer to the [ImageGear .NET Online Documentation](https://help.accusoft.com/ImageGear/latest/webframe.html).
+
+## System Requirements
+
+For a list of the system and development software necessary to build and run these samples, please refer to the [ImageGear .NET Online Documentation](https://help.accusoft.com/ImageGear/latest/webframe.html#system-requirements.html).
+
+## Building the Sample
+
+Starting with ImageGear v26.0, ImageGear supports .NET Core.
+
+All samples can be built using Microsoft Visual Studio 2022.
+
+To build this sample:
+
+1. Open the .sln file in the project directory using Visual Studio 2022.
+2. Select a Solution Configuration (Debug or Release) and an available Solution Platform (x64 or Any CPU).
+3. Build with Build Solution located in the Build menu.
+
+To build this sample under Linux:
+
+1. Install the Microsoft .NET SDK for your Linux distribution.
+2. Run `dotnet build LoadSinglePDFPage.sln`. By default this will build the Debug Solution Configuration.
+
+## Running the Sample
+
+When the sample is built, it produces a console application executable in the bin subdirectory. Run this application by double-clicking the application icon, or run it directly from Command Prompt (cmd.exe), PowerShell, or similar. Note that the working directory must be the same as the directory containing the sample executable in order to find the sample input image and the output directory. The input image(s) and output directory are specified relative to the location of the application in all of these samples.
+
+To run this sample under Linux, run the sample from "bin/Debug/net6.0/" or "bin/x64/Debug/net6.0/" (depending on the solution platform) using `./LoadSinglePDFPage`.
+
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
+
+## PDF Support in ImageGear .NET
+
+ImageGear .NET is a robust, multi-platform, multi-language PDF solution. For more information on PDF support in ImageGear .NET, [please visit us at Accusoft.](https://www.accusoft.com/products/imagegear-collection/imagegear-dot-net/)
diff --git a/Samples/PDF/LoadingAndSavingPDF/README.md b/Samples/PDF/LoadingAndSavingPDF/README.md
index 7d1f842..e058582 100644
--- a/Samples/PDF/LoadingAndSavingPDF/README.md
+++ b/Samples/PDF/LoadingAndSavingPDF/README.md
@@ -33,7 +33,7 @@ When the sample is built, it produces a console application executable in the bi
To run this sample under Linux, run the sample from "bin/Debug/net6.0/" or "bin/x64/Debug/net6.0/" (depending on the solution platform) using `./LoadingAndSavingPDF`.
-_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com).
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
## PDF Support in ImageGear .NET
diff --git a/Samples/PDF/ManagePDFMetadata/AssemblyInfo.cs b/Samples/PDF/ManagePDFMetadata/AssemblyInfo.cs
new file mode 100644
index 0000000..8d9a33e
--- /dev/null
+++ b/Samples/PDF/ManagePDFMetadata/AssemblyInfo.cs
@@ -0,0 +1,35 @@
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("ManagePDFMetadata")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("ImageGear for .NET")]
+[assembly: AssemblyCopyright("")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("40c00905-e2ab-4319-92e7-c71c8d1804c8")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Samples/PDF/ManagePDFMetadata/ManagePDFMetadata.csproj b/Samples/PDF/ManagePDFMetadata/ManagePDFMetadata.csproj
new file mode 100644
index 0000000..04ecc30
--- /dev/null
+++ b/Samples/PDF/ManagePDFMetadata/ManagePDFMetadata.csproj
@@ -0,0 +1,16 @@
+
+
+
+ Exe
+ net6.0;net48
+ Major
+ false
+ x64
+
+
+
+
+
+
+
+
diff --git a/Samples/PDF/ManagePDFMetadata/ManagePDFMetadata.sln b/Samples/PDF/ManagePDFMetadata/ManagePDFMetadata.sln
new file mode 100644
index 0000000..747f825
--- /dev/null
+++ b/Samples/PDF/ManagePDFMetadata/ManagePDFMetadata.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.3.32901.215
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ManagePDFMetadata", "ManagePDFMetadata.csproj", "{68E89839-C348-4886-AE12-B9E16FD346A2}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|x64 = Debug|x64
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {68E89839-C348-4886-AE12-B9E16FD346A2}.Debug|x64.ActiveCfg = Debug|x64
+ {68E89839-C348-4886-AE12-B9E16FD346A2}.Debug|x64.Build.0 = Debug|x64
+ {68E89839-C348-4886-AE12-B9E16FD346A2}.Release|x64.ActiveCfg = Release|x64
+ {68E89839-C348-4886-AE12-B9E16FD346A2}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {372D671E-7FA6-48D5-B3B5-9AB0046C47C1}
+ EndGlobalSection
+EndGlobal
diff --git a/Samples/PDF/ManagePDFMetadata/Program.cs b/Samples/PDF/ManagePDFMetadata/Program.cs
new file mode 100644
index 0000000..6de3b48
--- /dev/null
+++ b/Samples/PDF/ManagePDFMetadata/Program.cs
@@ -0,0 +1,76 @@
+using System;
+using System.IO;
+using ImageGear.Formats;
+using ImageGear.Formats.PDF;
+
+namespace ManagePDFMetadata
+{
+ internal class Program
+ {
+ static void Main()
+ {
+ // Initialize common formats.
+ ImGearCommonFormats.Initialize();
+
+ // Add PDF format to the format list.
+ ImGearFileFormats.Filters.Add(ImGearPDF.CreatePDFFormat());
+
+ // Initialize PDF format for each using thread.
+ ImGearPDF.Initialize();
+
+ // Load a PDF document.
+ ImGearPDFDocument igPDFDocument = null;
+ using (Stream stream = new FileStream(@"../../../../../../../Sample Input/multi-page.pdf", FileMode.Open, FileAccess.Read, FileShare.Read))
+ igPDFDocument = (ImGearPDFDocument)ImGearFileFormats.LoadDocument(stream, 0, -1);
+
+ // Read and update Author.
+ string author = igPDFDocument.GetInfo("Author");
+ string newAuthor = "Accusoft Corporation";
+ igPDFDocument.SetInfo("Author", newAuthor);
+ Console.WriteLine($"Author: \"{author}\" -> \"{newAuthor}\"");
+
+ // Read Created. (ImageGear will overwrite its value on document save.)
+ string created = igPDFDocument.GetInfo("Created");
+ Console.WriteLine($"Created: \"{created}\"");
+
+ // Read and update Creator.
+ string creator = igPDFDocument.GetInfo("Creator");
+ string newCreator = "ManagePDFMetadata Sample";
+ igPDFDocument.SetInfo("Creator", newCreator);
+ Console.WriteLine($"Creator: \"{creator}\" -> \"{newCreator}\"");
+
+ // Read and update Keywords.
+ string keywords = igPDFDocument.GetInfo("Keywords");
+ string newKeywords = "brochure document photo imaging SDK";
+ igPDFDocument.SetInfo("Keywords", newKeywords);
+ Console.WriteLine($"Keywords: \"{keywords}\" -> \"{newKeywords}\"");
+
+ // Read Modified. (ImageGear will overwrite its value on document save.)
+ string modified = igPDFDocument.GetInfo("Modified");
+ Console.WriteLine($"Modified: \"{modified}\"");
+
+ // Read Producer. (ImageGear will overwrite its value on document save.)
+ string producer = igPDFDocument.GetInfo("Producer");
+ Console.WriteLine($"Producer: \"{producer}\"");
+
+ // Read and update Subject.
+ string subject = igPDFDocument.GetInfo("Subject");
+ string newSubject = "ImageGear";
+ igPDFDocument.SetInfo("Subject", newSubject);
+ Console.WriteLine($"Subject: \"{subject}\" -> \"{newSubject}\"");
+
+ // Read and update Title.
+ string title = igPDFDocument.GetInfo("Title");
+ string newTitle = "ImageGear Product Brochure (2015)";
+ igPDFDocument.SetInfo("Title", newTitle);
+ Console.WriteLine($"Title: \"{title}\" -> \"{newTitle}\"");
+
+ // Save the PDF document.
+ using (Stream outputStream = new FileStream(@"../../../../../../../Sample Output/ManagePDFMetadata.pdf", FileMode.Create, FileAccess.Write))
+ igPDFDocument.Save(outputStream, ImGearSavingFormats.PDF, 0, 0, -1, ImGearSavingModes.OVERWRITE);
+
+ // Terminate PDF support once for each call to Initialize PDF support.
+ ImGearPDF.Terminate();
+ }
+ }
+}
diff --git a/Samples/PDF/ManagePDFMetadata/README.md b/Samples/PDF/ManagePDFMetadata/README.md
new file mode 100644
index 0000000..a3e208a
--- /dev/null
+++ b/Samples/PDF/ManagePDFMetadata/README.md
@@ -0,0 +1,40 @@
+# Manage PDF Metadata (ManagePDFMetadata)
+
+Use ImageGear to read and update PDF metadata that provides descriptive and adminstrative information about a PDF.
+
+This sample reads and updates PDF metadata values for standard PDF document information dictionary keys (Author, Created, Creator, Keywords, Modified, Producer, Subject, and Title) before saving the updated PDF to a new file. PDF metadata describes details about the document's content and origin. This metadata is often used by other software to enhance workflows involving PDF documents.
+
+For more information about the ImageGear .NET API, please refer to the [ImageGear .NET Online Documentation](https://help.accusoft.com/ImageGear/latest/webframe.html).
+
+## System Requirements
+
+For a list of the system and development software necessary to build and run these samples, please refer to the [ImageGear .NET Online Documentation](https://help.accusoft.com/ImageGear/latest/webframe.html#system-requirements.html).
+
+## Building the Sample
+
+Starting with ImageGear v26.0, ImageGear supports .NET Core.
+
+All samples can be built using Microsoft Visual Studio 2022.
+
+To build this sample:
+
+1. Open the .sln file in the project directory using Visual Studio 2022.
+2. Select a Solution Configuration (Debug or Release) and an available Solution Platform (x64 or Any CPU).
+3. Build with Build Solution located in the Build menu.
+
+To build this sample under Linux:
+
+1. Install the Microsoft .NET SDK for your Linux distribution.
+2. Run `dotnet build ManagePDFMetadata.sln`. By default this will build the Debug Solution Configuration.
+
+## Running the Sample
+
+When the sample is built, it produces a console application executable in the bin subdirectory. Run this application by double-clicking the application icon, or run it directly from Command Prompt (cmd.exe), PowerShell, or similar. Note that the working directory must be the same as the directory containing the sample executable in order to find the sample input image and the output directory. The input image(s) and output directory are specified relative to the location of the application in all of these samples.
+
+To run this sample under Linux, run the sample from "bin/Debug/net6.0/" or "bin/x64/Debug/net6.0/" (depending on the solution platform) using `./ManagePDFMetadata`.
+
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
+
+## PDF Support in ImageGear .NET
+
+ImageGear .NET is a robust, multi-platform, multi-language PDF solution. For more information on PDF support in ImageGear .NET, [please visit us at Accusoft.](https://www.accusoft.com/products/imagegear-collection/imagegear-dot-net/)
diff --git a/Samples/PDF/MergeTwoPDFFiles/README.md b/Samples/PDF/MergeTwoPDFFiles/README.md
index cca6156..5dc7258 100644
--- a/Samples/PDF/MergeTwoPDFFiles/README.md
+++ b/Samples/PDF/MergeTwoPDFFiles/README.md
@@ -33,7 +33,7 @@ When the sample is built, it produces a console application executable in the bi
To run this sample under Linux, run the sample from "bin/Debug/net6.0/" or "bin/x64/Debug/net6.0/" (depending on the solution platform) using `./MergeTwoPDFFiles`.
-_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com).
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
## PDF Support in ImageGear .NET
diff --git a/Samples/PDF/MultipageTIFFtoPDFFile/README.md b/Samples/PDF/MultipageTIFFtoPDFFile/README.md
index 37e4900..0783959 100644
--- a/Samples/PDF/MultipageTIFFtoPDFFile/README.md
+++ b/Samples/PDF/MultipageTIFFtoPDFFile/README.md
@@ -33,7 +33,7 @@ When the sample is built, it produces a console application executable in the bi
To run this sample under Linux, run the sample from "bin/Debug/net6.0/" or "bin/x64/Debug/net6.0/" (depending on the solution platform) using `./MultipageTIFFtoPDFFile`.
-_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com).
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
## PDF Support in ImageGear .NET
diff --git a/Samples/PDF/PDFContentAddText/README.md b/Samples/PDF/PDFContentAddText/README.md
index 4a8ddd1..875b187 100644
--- a/Samples/PDF/PDFContentAddText/README.md
+++ b/Samples/PDF/PDFContentAddText/README.md
@@ -33,7 +33,7 @@ When the sample is built, it produces a console application executable in the bi
To run this sample under Linux, run the sample from "bin/Debug/net6.0/" or "bin/x64/Debug/net6.0/" (depending on the solution platform) using `./PDFContentAddText`.
-_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com).
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
## PDF Support in ImageGear .NET
diff --git a/Samples/PDF/PDFContentExtractText/README.md b/Samples/PDF/PDFContentExtractText/README.md
index f11c45f..8e507ac 100644
--- a/Samples/PDF/PDFContentExtractText/README.md
+++ b/Samples/PDF/PDFContentExtractText/README.md
@@ -33,7 +33,7 @@ When the sample is built, it produces a console application executable in the bi
To run this sample under Linux, run the sample from "bin/Debug/net6.0/" or "bin/x64/Debug/net6.0/" (depending on the solution platform) using `./PDFContentExtractText`.
-_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com).
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
## PDF Support in ImageGear .NET
diff --git a/Samples/PDF/PDFFileToMultipageTIFF/README.md b/Samples/PDF/PDFFileToMultipageTIFF/README.md
index 56622e2..03dc69c 100644
--- a/Samples/PDF/PDFFileToMultipageTIFF/README.md
+++ b/Samples/PDF/PDFFileToMultipageTIFF/README.md
@@ -33,7 +33,7 @@ When the sample is built, it produces a console application executable in the bi
To run this sample under Linux, run the sample from "bin/Debug/net6.0/" or "bin/x64/Debug/net6.0/" (depending on the solution platform) using `./PDFFileToMultipageTIFF`.
-_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com).
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
## PDF Support in ImageGear .NET
diff --git a/Samples/PDF/PDFFileToMultipageTIFFAtHighResolution/AssemblyInfo.cs b/Samples/PDF/PDFFileToMultipageTIFFAtHighResolution/AssemblyInfo.cs
new file mode 100644
index 0000000..4b11073
--- /dev/null
+++ b/Samples/PDF/PDFFileToMultipageTIFFAtHighResolution/AssemblyInfo.cs
@@ -0,0 +1,35 @@
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("PDFFileToMultipageTIFFAtHighResolution")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("ImageGear for .NET")]
+[assembly: AssemblyCopyright("")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("70c72d8c-3c92-492c-abfa-3352e99e3e99")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Samples/PDF/PDFFileToMultipageTIFFAtHighResolution/PDFFileToMultipageTIFFAtHighResolution.csproj b/Samples/PDF/PDFFileToMultipageTIFFAtHighResolution/PDFFileToMultipageTIFFAtHighResolution.csproj
new file mode 100644
index 0000000..04ecc30
--- /dev/null
+++ b/Samples/PDF/PDFFileToMultipageTIFFAtHighResolution/PDFFileToMultipageTIFFAtHighResolution.csproj
@@ -0,0 +1,16 @@
+
+
+
+ Exe
+ net6.0;net48
+ Major
+ false
+ x64
+
+
+
+
+
+
+
+
diff --git a/Samples/PDF/PDFFileToMultipageTIFFAtHighResolution/PDFFileToMultipageTIFFAtHighResolution.sln b/Samples/PDF/PDFFileToMultipageTIFFAtHighResolution/PDFFileToMultipageTIFFAtHighResolution.sln
new file mode 100644
index 0000000..088542b
--- /dev/null
+++ b/Samples/PDF/PDFFileToMultipageTIFFAtHighResolution/PDFFileToMultipageTIFFAtHighResolution.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.3.32901.215
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PDFFileToMultipageTIFFAtHighResolution", "PDFFileToMultipageTIFFAtHighResolution.csproj", "{9D17336C-16F2-4267-8298-E70815CB1628}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|x64 = Debug|x64
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {9D17336C-16F2-4267-8298-E70815CB1628}.Debug|x64.ActiveCfg = Debug|x64
+ {9D17336C-16F2-4267-8298-E70815CB1628}.Debug|x64.Build.0 = Debug|x64
+ {9D17336C-16F2-4267-8298-E70815CB1628}.Release|x64.ActiveCfg = Release|x64
+ {9D17336C-16F2-4267-8298-E70815CB1628}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {6A420E58-C9EF-44E1-90A2-5495E8B820EF}
+ EndGlobalSection
+EndGlobal
diff --git a/Samples/PDF/PDFFileToMultipageTIFFAtHighResolution/Program.cs b/Samples/PDF/PDFFileToMultipageTIFFAtHighResolution/Program.cs
new file mode 100644
index 0000000..29f442b
--- /dev/null
+++ b/Samples/PDF/PDFFileToMultipageTIFFAtHighResolution/Program.cs
@@ -0,0 +1,54 @@
+using System.IO;
+using ImageGear.Formats;
+using ImageGear.Formats.PDF;
+
+namespace PDFFileToMultipageTIFFAtHighResolution
+{
+ internal class Program
+ {
+ static void Main()
+ {
+ // Initialize common formats.
+ ImGearCommonFormats.Initialize();
+
+ // Add PDF format to filters list.
+ ImGearFileFormats.Filters.Add(ImGearPDF.CreatePDFFormat());
+
+ // Initialize PDF support. Initialize for each process or thread.
+ ImGearPDF.Initialize();
+
+ // Load a PDF document.
+ ImGearPDFDocument imGearPDFDocument = null;
+ using (Stream inputStream = new FileStream(@"../../../../../../../Sample Input/multi-page.pdf", FileMode.Open, FileAccess.Read, FileShare.Read))
+ imGearPDFDocument = ImGearFileFormats.LoadDocument(inputStream) as ImGearPDFDocument;
+
+ // Change global PDF filter control parameters for rasterization resolution.
+ ImGearFileFormats.Filters.Get(ImGearFormats.PDF).Parameters.GetByName("ResolutionX").Value = 300;
+ ImGearFileFormats.Filters.Get(ImGearFormats.PDF).Parameters.GetByName("ResolutionY").Value = 300;
+
+ // Save the PDF document to a multi-page TIFF file.
+ // Use null ImGearRasterSaveOptions to avoid overriding ResolutionX and ResolutionY with ScaleX and ScaleY defaults.
+ using (Stream outputStream = new FileStream(@"../../../../../../../Sample Output/PDFFileToMultipageTIFFAtHighResolution-300DPI.tif", FileMode.Create))
+ ImGearFileFormats.SaveDocument(imGearPDFDocument, outputStream, 0, ImGearSavingModes.OVERWRITE, ImGearSavingFormats.TIF_DEFLATE, null);
+
+ // Set scaling factor for rasterized image. Scale = 1 (default) corresponds to 72 dpi, 2 to 144 dpi, etc.
+ // The default BitDepth cannot be used.
+ ImGearRasterSaveOptions rasterSaveOptions = new ImGearRasterSaveOptions()
+ {
+ BitDepth = 24,
+ ScaleX = 4.0,
+ ScaleY = 4.0
+ };
+
+ // Save the PDF document to a multi-page TIFF file.
+ using (Stream outputStream = new FileStream(@"../../../../../../../Sample Output/PDFFileToMultipageTIFFAtHighResolution-ScaleFactor4.tif", FileMode.Create))
+ ImGearFileFormats.SaveDocument(imGearPDFDocument, outputStream, 0, ImGearSavingModes.OVERWRITE, ImGearSavingFormats.TIF_DEFLATE, rasterSaveOptions);
+
+ // Dispose the document.
+ imGearPDFDocument.Dispose();
+
+ // Terminate PDF support once for each call to Initialize PDF support.
+ ImGearPDF.Terminate();
+ }
+ }
+}
diff --git a/Samples/PDF/PDFFileToMultipageTIFFAtHighResolution/README.md b/Samples/PDF/PDFFileToMultipageTIFFAtHighResolution/README.md
new file mode 100644
index 0000000..2da43d0
--- /dev/null
+++ b/Samples/PDF/PDFFileToMultipageTIFFAtHighResolution/README.md
@@ -0,0 +1,40 @@
+# PDF File to Multipage TIFF at High Resolution (PDFFileToMultipageTIFFAtHighResolution)
+
+Rasterizing PDF at high resolution can improve image quality when converting to raster formats such as TIFF.
+
+This sample demonstrates using both techniques to convert PDF to TIFF at 300 DPI and scale factor 4.0. ImageGear normally rasterizes PDF pages at 72 DPI. Rasterizing at higher resolutions can potentially improve raster image quality by scaling PDF page content.
+
+For more information about the ImageGear .NET API, please refer to the [ImageGear .NET Online Documentation](https://help.accusoft.com/ImageGear/latest/webframe.html).
+
+## System Requirements
+
+For a list of the system and development software necessary to build and run these samples, please refer to the [ImageGear .NET Online Documentation](https://help.accusoft.com/ImageGear/latest/webframe.html#system-requirements.html).
+
+## Building the Sample
+
+Starting with ImageGear v26.0, ImageGear supports .NET Core.
+
+All samples can be built using Microsoft Visual Studio 2022.
+
+To build this sample:
+
+1. Open the .sln file in the project directory using Visual Studio 2022.
+2. Select a Solution Configuration (Debug or Release) and an available Solution Platform (x64 or Any CPU).
+3. Build with Build Solution located in the Build menu.
+
+To build this sample under Linux:
+
+1. Install the Microsoft .NET SDK for your Linux distribution.
+2. Run `dotnet build PDFFileToMultipageTIFFAtHighResolution.sln`. By default this will build the Debug Solution Configuration.
+
+## Running the Sample
+
+When the sample is built, it produces a console application executable in the bin subdirectory. Run this application by double-clicking the application icon, or run it directly from Command Prompt (cmd.exe), PowerShell, or similar. Note that the working directory must be the same as the directory containing the sample executable in order to find the sample input image and the output directory. The input image(s) and output directory are specified relative to the location of the application in all of these samples.
+
+To run this sample under Linux, run the sample from "bin/Debug/net6.0/" or "bin/x64/Debug/net6.0/" (depending on the solution platform) using `./PDFFileToMultipageTIFFAtHighResolution`.
+
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
+
+## PDF Support in ImageGear .NET
+
+ImageGear .NET is a robust, multi-platform, multi-language PDF solution. For more information on PDF support in ImageGear .NET, [please visit us at Accusoft.](https://www.accusoft.com/products/imagegear-collection/imagegear-dot-net/)
diff --git a/Samples/PDF/README.md b/Samples/PDF/README.md
index 530a56c..186ec2a 100644
--- a/Samples/PDF/README.md
+++ b/Samples/PDF/README.md
@@ -2,6 +2,14 @@
These samples demonstrate general PDF functionality in ImageGear .NET
+## AddWatermarkToPDFPage
+
+This sample demonstrates how to watermark a page in a PDF document using PDE element operations with a raster image loaded into ImageGear.
+
+## ConvertPDFToPDFA_2b
+
+This sample demonstrates how to take a PDF document loaded into ImageGear, and convert that PDF document to be compliant with the PDF/A-2b specification.
+
## DeletePDFPage
Pages can be removed from the front (0), end (Pages.Count - 1), or specific page number from a PDF file.
@@ -14,6 +22,18 @@ In order to rotate a PDF page, each object on the page must be rotated about the
This sample demonstrates two of the most basic PDF functions of ImageGear, loading and saving a PDF file using the LoadDocument and SaveDocument functions.
+## LoadPDFSaveWithFlags
+
+This sample demonstrates reducing the size of a PDF using flags to reduce duplication of streams, cleaning up unreferenced objects, and optimizing fonts.
+
+## LoadSinglePDFPage
+
+Load a single PDF page and report its physical dimensions with the MediaRect property.
+
+## ManagePDFMetadata
+
+Read and update PDF metadata using the GetInfo and SetInfo methods, respectively.
+
## MergeTwoPDFFiles
Any PDF document can have pages from other PDF documents inserted into it. The InsertPages function can insert a range of pages.
@@ -34,6 +54,10 @@ Text is extracted from a range of PDF pages using the ExtractText function.
Converting a PDF file to a raster image format is very easy with ImageGear.
+## PDFFileToMultipageTIFFAtHighResolution
+
+Convert a PDF file to TIFF at high resolution to improve image quality.
+
## SaveAllImagesOnPDFPage
After a PDF page is loaded, the objects on the page can be traversed.
diff --git a/Samples/PDF/SaveAllImagesOnPDFPage/README.md b/Samples/PDF/SaveAllImagesOnPDFPage/README.md
index 3dd4414..5cbfb7c 100644
--- a/Samples/PDF/SaveAllImagesOnPDFPage/README.md
+++ b/Samples/PDF/SaveAllImagesOnPDFPage/README.md
@@ -33,7 +33,7 @@ When the sample is built, it produces a console application executable in the bi
To run this sample under Linux, run the sample from "bin/Debug/net6.0/" or "bin/x64/Debug/net6.0/" (depending on the solution platform) using `./SaveAllImagesOnPDFPage`.
-_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com).
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
## PDF Support in ImageGear .NET
diff --git a/Samples/PDF/SetPDFSecurity/README.md b/Samples/PDF/SetPDFSecurity/README.md
index 7757be8..054acf4 100644
--- a/Samples/PDF/SetPDFSecurity/README.md
+++ b/Samples/PDF/SetPDFSecurity/README.md
@@ -33,7 +33,7 @@ When the sample is built, it produces a console application executable in the bi
To run this sample under Linux, run the sample from "bin/Debug/net6.0/" or "bin/x64/Debug/net6.0/" (depending on the solution platform) using `./SetPDFSecurity`.
-_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com).
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
## PDF Support in ImageGear .NET
diff --git a/Samples/PDF/SplitPDFIntoMultiplePDFs/AssemblyInfo.cs b/Samples/PDF/SplitPDFIntoMultiplePDFs/AssemblyInfo.cs
new file mode 100644
index 0000000..cad96b8
--- /dev/null
+++ b/Samples/PDF/SplitPDFIntoMultiplePDFs/AssemblyInfo.cs
@@ -0,0 +1,35 @@
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("SplitPDFIntoMultiplePDFs")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("ImageGear for .NET")]
+[assembly: AssemblyCopyright("")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("e47f18f4-28ae-4de6-8330-739D9a5d47e7")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Samples/PDF/SplitPDFIntoMultiplePDFs/Program.cs b/Samples/PDF/SplitPDFIntoMultiplePDFs/Program.cs
new file mode 100644
index 0000000..149d081
--- /dev/null
+++ b/Samples/PDF/SplitPDFIntoMultiplePDFs/Program.cs
@@ -0,0 +1,54 @@
+using System.IO;
+using ImageGear.Core;
+using ImageGear.Formats;
+using ImageGear.Formats.PDF;
+
+namespace SplitPDFIntoMultiplePDFs
+{
+ class Program
+ {
+ static void Main()
+ {
+ const int FIRST_PAGE = 0;
+ const int PAGE_COUNT = 1;
+
+ // Initialize common formats.
+ ImGearCommonFormats.Initialize();
+
+ // Add PDF format to filters list.
+ ImGearFileFormats.Filters.Add(ImGearPDF.CreatePDFFormat());
+
+ // Initialize PDF support. Initialize for each process or thread.
+ ImGearPDF.Initialize();
+
+ // Load a PDF document.
+ using (Stream stream = new FileStream(@"../../../../../../../Sample Input/multi-page.pdf", FileMode.Open, FileAccess.Read, FileShare.Read))
+ {
+ using (ImGearPDFDocument imGearPDFDocument = (ImGearPDFDocument)ImGearFileFormats.LoadDocument(stream, 0, -1))
+ {
+ // For each page in document.
+ for (int i = 0; i < imGearPDFDocument.Pages.Count; i++)
+ {
+ // Construct the output filepath.
+ string outputFileName = string.Format("{0}_{1}.pdf", "SplitPDFIntoMultiplePDFs", i + 1);
+ string outputDirectory = @"../../../../../../../Sample Output";
+ string outputPath = System.IO.Path.Combine(outputDirectory, outputFileName);
+
+ // Create a new empty PDF document.
+ using (ImGearPDFDocument imGearTargetPDFDocument = new ImGearPDFDocument())
+ {
+ // Insert page into new PDF document.
+ imGearTargetPDFDocument.InsertPages((int)ImGearPDFPageNumber.BEFORE_FIRST_PAGE, imGearPDFDocument, i, PAGE_COUNT, ImGearPDFInsertFlags.DEFAULT);
+
+ // Save new PDF document to file.
+ imGearTargetPDFDocument.Save(outputPath, ImGearSavingFormats.PDF, FIRST_PAGE, FIRST_PAGE, PAGE_COUNT, ImGearSavingModes.OVERWRITE);
+ }
+ }
+ }
+ }
+
+ // Terminate PDF support once for each call to Initialize PDF support.
+ ImGearPDF.Terminate();
+ }
+ }
+}
diff --git a/Samples/PDF/SplitPDFIntoMultiplePDFs/README.md b/Samples/PDF/SplitPDFIntoMultiplePDFs/README.md
new file mode 100644
index 0000000..c34c29d
--- /dev/null
+++ b/Samples/PDF/SplitPDFIntoMultiplePDFs/README.md
@@ -0,0 +1,40 @@
+# Splitting a PDF Into Multiple PDFs (SplitPDFIntoMultiplePDFs)
+
+When multiple PDF files need to be created from a single PDF document, ImageGear can split a PDF into multiple PDF documents.
+
+This sample demonstrates how to create multiple PDF files from a PDF document. To split a PDF document using ImageGear, new ImGearPDFDocument objects are created and ImGearPDFDocument.InsertPages() is used to add an existing page.
+
+For more information about the ImageGear .NET API, please refer to the [ImageGear .NET Online Documentation](https://help.accusoft.com/ImageGear/latest/webframe.html).
+
+## System Requirements
+
+For a list of the system and development software necessary to build and run these samples, please refer to the [ImageGear .NET Online Documentation](https://help.accusoft.com/ImageGear/latest/webframe.html#system-requirements.html).
+
+## Building the Sample
+
+Starting with ImageGear v26.0, ImageGear supports .NET Core.
+
+All samples can be built using Microsoft Visual Studio 2022.
+
+To build this sample:
+
+1. Open the .sln file in the project directory using Visual Studio 2022.
+2. Select a Solution Configuration (Debug or Release) and an available Solution Platform (x64 or Any CPU).
+3. Build with Build Solution located in the Build menu.
+
+To build this sample under Linux:
+
+1. Install the Microsoft .NET SDK for your Linux distribution.
+2. Run `dotnet build SplitPDFIntoMultiplePDFs.sln`. By default this will build the Debug Solution Configuration.
+
+## Running the Sample
+
+When the sample is built, it produces a console application executable in the bin subdirectory. Run this application by double-clicking the application icon, or run it directly from Command Prompt (cmd.exe), PowerShell, or similar. Note that the working directory must be the same as the directory containing the sample executable in order to find the sample input image and the output directory. The input image(s) and output directory are specified relative to the location of the application in all of these samples.
+
+To run this sample under Linux, run the sample from "bin/Debug/net6.0/" or "bin/x64/Debug/net6.0/" (depending on the solution platform) using `./SplitPDFIntoMultiplePDFs`.
+
+_**NOTE:** ImageGear .NET runs in evaluation mode if started without a license. In evaluation mode, documents and images will be watermarked when exported or displayed. If you would like to work with a full-featured evaluation of the product, [please contact Accusoft at info@accusoft.com](mailto:info@accusoft.com)._
+
+## PDF Support in ImageGear .NET
+
+ImageGear .NET is a robust, multi-platform, multi-language PDF solution. For more information on PDF support in ImageGear .NET, [please visit us at Accusoft.](https://www.accusoft.com/products/imagegear-collection/imagegear-dot-net/)
diff --git a/Samples/PDF/SplitPDFIntoMultiplePDFs/SplitPDFIntoMultiplePDFs.csproj b/Samples/PDF/SplitPDFIntoMultiplePDFs/SplitPDFIntoMultiplePDFs.csproj
new file mode 100644
index 0000000..04ecc30
--- /dev/null
+++ b/Samples/PDF/SplitPDFIntoMultiplePDFs/SplitPDFIntoMultiplePDFs.csproj
@@ -0,0 +1,16 @@
+
+
+
+ Exe
+ net6.0;net48
+ Major
+ false
+ x64
+
+
+
+
+
+
+
+
diff --git a/Samples/PDF/SplitPDFIntoMultiplePDFs/SplitPDFIntoMultiplePDFs.sln b/Samples/PDF/SplitPDFIntoMultiplePDFs/SplitPDFIntoMultiplePDFs.sln
new file mode 100644
index 0000000..5625329
--- /dev/null
+++ b/Samples/PDF/SplitPDFIntoMultiplePDFs/SplitPDFIntoMultiplePDFs.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.4.33110.190
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SplitPDFIntoMultiplePDFs", "SplitPDFIntoMultiplePDFs.csproj", "{E47F18F4-28AE-4DE6-8330-739D9A5D47E7}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|x64 = Debug|x64
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {E47F18F4-28AE-4DE6-8330-739D9A5D47E7}.Debug|x64.ActiveCfg = Debug|x64
+ {E47F18F4-28AE-4DE6-8330-739D9A5D47E7}.Debug|x64.Build.0 = Debug|x64
+ {E47F18F4-28AE-4DE6-8330-739D9A5D47E7}.Release|x64.ActiveCfg = Release|x64
+ {E47F18F4-28AE-4DE6-8330-739D9A5D47E7}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {CFA4F019-F132-4C50-A529-CB0FBB689063}
+ EndGlobalSection
+EndGlobal
diff --git a/Samples/README.md b/Samples/README.md
index 796f94e..b1c4036 100644
--- a/Samples/README.md
+++ b/Samples/README.md
@@ -16,7 +16,7 @@ These samples demonstrate select image processing capabilities of ImageGear .NET
## General PDF Samples
-These samples demonstrate general PDF functionality in ImageGear .NET
+These samples demonstrate general PDF functionality in ImageGear .NET.
## PDF Acroform Samples