mirror of
https://github.com/UglyToad/PdfPig.git
synced 2026-03-10 00:23:29 +08:00
Add support for named color spaces and indirect references when parsing ColorSpaceDetails
This commit is contained in:
@@ -64,6 +64,7 @@
|
|||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static class ColorSpaceDetailsParser
|
internal static class ColorSpaceDetailsParser
|
||||||
@@ -110,11 +111,10 @@
|
|||||||
if (cannotRecurse)
|
if (cannotRecurse)
|
||||||
{
|
{
|
||||||
return UnsupportedColorSpaceDetails.Instance;
|
return UnsupportedColorSpaceDetails.Instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((!imageDictionary.TryGet(NameToken.ColorSpace, scanner, out ArrayToken colorSpaceArray) &&
|
if (!TryGetColorSpaceArray(imageDictionary, resourceStore, scanner, out var colorSpaceArray)
|
||||||
!imageDictionary.TryGet(NameToken.Cs, scanner, out colorSpaceArray))
|
|| colorSpaceArray.Length != 4)
|
||||||
|| colorSpaceArray.Length != 4)
|
|
||||||
{
|
{
|
||||||
// Error instead?
|
// Error instead?
|
||||||
return UnsupportedColorSpaceDetails.Instance;
|
return UnsupportedColorSpaceDetails.Instance;
|
||||||
@@ -123,7 +123,7 @@
|
|||||||
var first = colorSpaceArray[0] as NameToken;
|
var first = colorSpaceArray[0] as NameToken;
|
||||||
|
|
||||||
if (first == null || !ColorSpaceMapper.TryMap(first, resourceStore, out var innerColorSpace)
|
if (first == null || !ColorSpaceMapper.TryMap(first, resourceStore, out var innerColorSpace)
|
||||||
|| innerColorSpace != ColorSpace.Indexed)
|
|| innerColorSpace != ColorSpace.Indexed)
|
||||||
{
|
{
|
||||||
return UnsupportedColorSpaceDetails.Instance;
|
return UnsupportedColorSpaceDetails.Instance;
|
||||||
}
|
}
|
||||||
@@ -207,8 +207,7 @@
|
|||||||
return UnsupportedColorSpaceDetails.Instance;
|
return UnsupportedColorSpaceDetails.Instance;
|
||||||
case ColorSpace.Separation:
|
case ColorSpace.Separation:
|
||||||
{
|
{
|
||||||
if ((!imageDictionary.TryGet(NameToken.ColorSpace, scanner, out ArrayToken colorSpaceArray) &&
|
if (!TryGetColorSpaceArray(imageDictionary, resourceStore, scanner, out var colorSpaceArray)
|
||||||
!imageDictionary.TryGet(NameToken.Cs, scanner, out colorSpaceArray))
|
|
||||||
|| colorSpaceArray.Length != 4)
|
|| colorSpaceArray.Length != 4)
|
||||||
{
|
{
|
||||||
// Error instead?
|
// Error instead?
|
||||||
@@ -284,7 +283,23 @@
|
|||||||
return UnsupportedColorSpaceDetails.Instance;
|
return UnsupportedColorSpaceDetails.Instance;
|
||||||
default:
|
default:
|
||||||
return UnsupportedColorSpaceDetails.Instance;
|
return UnsupportedColorSpaceDetails.Instance;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static bool TryGetColorSpaceArray(DictionaryToken imageDictionary, IResourceStore resourceStore,
|
||||||
|
IPdfTokenScanner scanner,
|
||||||
|
out ArrayToken colorSpaceArray)
|
||||||
|
{
|
||||||
|
var colorSpace = imageDictionary.GetObjectOrDefault(NameToken.ColorSpace, NameToken.Cs);
|
||||||
|
|
||||||
|
if (!DirectObjectFinder.TryGet(colorSpace, scanner, out colorSpaceArray)
|
||||||
|
&& DirectObjectFinder.TryGet(colorSpace, scanner, out NameToken colorSpaceName) &&
|
||||||
|
resourceStore.TryGetNamedColorSpace(colorSpaceName, out var colorSpaceNamedToken))
|
||||||
|
{
|
||||||
|
colorSpaceArray = colorSpaceNamedToken.Data as ArrayToken;
|
||||||
|
}
|
||||||
|
|
||||||
|
return colorSpaceArray != null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user