mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 05:37:43 +00:00
LibPDF: Add basic ICCBased color space handling
This commit is contained in:
parent
1238e65d30
commit
e1115cfe48
3 changed files with 39 additions and 0 deletions
|
@ -40,6 +40,9 @@ PDFErrorOr<NonnullRefPtr<ColorSpace>> ColorSpace::create(Document* document, Fly
|
||||||
if (color_space_name == CommonNames::CalRGB)
|
if (color_space_name == CommonNames::CalRGB)
|
||||||
return TRY(CalRGBColorSpace::create(document, move(parameters)));
|
return TRY(CalRGBColorSpace::create(document, move(parameters)));
|
||||||
|
|
||||||
|
if (color_space_name == CommonNames::ICCBased)
|
||||||
|
return TRY(ICCBasedColorSpace::create(document, page, move(parameters)));
|
||||||
|
|
||||||
dbgln("Unknown color space: {}", color_space_name);
|
dbgln("Unknown color space: {}", color_space_name);
|
||||||
TODO();
|
TODO();
|
||||||
}
|
}
|
||||||
|
@ -258,4 +261,26 @@ Color CalRGBColorSpace::color(Vector<Value> const& arguments) const
|
||||||
return Color(red, green, blue);
|
return Color(red, green, blue);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PDFErrorOr<NonnullRefPtr<ColorSpace>> ICCBasedColorSpace::create(Document* document, Page const& page, Vector<Value>&& parameters)
|
||||||
|
{
|
||||||
|
if (parameters.is_empty())
|
||||||
|
return Error { Error::Type::MalformedPDF, "ICCBased color space expected one parameter" };
|
||||||
|
|
||||||
|
auto param = TRY(document->resolve(parameters[0]));
|
||||||
|
if (!param.has<NonnullRefPtr<Object>>() || !param.get<NonnullRefPtr<Object>>()->is<StreamObject>())
|
||||||
|
return Error { Error::Type::MalformedPDF, "ICCBased color space expects a stream parameter" };
|
||||||
|
|
||||||
|
auto dict = param.get<NonnullRefPtr<Object>>()->cast<StreamObject>()->dict();
|
||||||
|
if (!dict->contains(CommonNames::Alternate))
|
||||||
|
TODO();
|
||||||
|
|
||||||
|
auto alternate = TRY(dict->get_name(document, CommonNames::Alternate))->name();
|
||||||
|
return TRY(ColorSpace::create(document, alternate, page));
|
||||||
|
}
|
||||||
|
|
||||||
|
Color ICCBasedColorSpace::color(Vector<Value> const&) const
|
||||||
|
{
|
||||||
|
VERIFY_NOT_REACHED();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -89,4 +89,16 @@ private:
|
||||||
Array<float, 9> m_matrix { 1, 0, 0, 0, 1, 0, 0, 0, 1 };
|
Array<float, 9> m_matrix { 1, 0, 0, 0, 1, 0, 0, 0, 1 };
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class ICCBasedColorSpace final : public ColorSpace {
|
||||||
|
public:
|
||||||
|
static PDFErrorOr<NonnullRefPtr<ColorSpace>> create(Document*, Page const&, Vector<Value>&& parameters);
|
||||||
|
|
||||||
|
~ICCBasedColorSpace() override = default;
|
||||||
|
|
||||||
|
Color color(Vector<Value> const& arguments) const override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
ICCBasedColorSpace() = delete;
|
||||||
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
|
|
||||||
#define ENUMERATE_COMMON_NAMES(A) \
|
#define ENUMERATE_COMMON_NAMES(A) \
|
||||||
A(AIS) \
|
A(AIS) \
|
||||||
|
A(Alternate) \
|
||||||
A(ASCII85Decode) \
|
A(ASCII85Decode) \
|
||||||
A(ASCIIHexDecode) \
|
A(ASCIIHexDecode) \
|
||||||
A(BG) \
|
A(BG) \
|
||||||
|
@ -63,6 +64,7 @@
|
||||||
A(H) \
|
A(H) \
|
||||||
A(HT) \
|
A(HT) \
|
||||||
A(HTO) \
|
A(HTO) \
|
||||||
|
A(ICCBased) \
|
||||||
A(ID) \
|
A(ID) \
|
||||||
A(JBIG2Decode) \
|
A(JBIG2Decode) \
|
||||||
A(JPXDecode) \
|
A(JPXDecode) \
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue