Nico Weber
7ad11fa59a
LibGfx: Mark a few ICC:NamedColor2TagData methods as const
2023-02-19 23:46:36 +01:00
Nico Weber
47cfcf5dca
LibGfx: Move NamedColorHeader to BinaryFormat.h
2023-02-19 23:46:36 +01:00
Nico Weber
937d018fc6
LibGfx: Use ICC::Profile::try_for_each_tag in encode_tag_datas()
2023-02-19 23:46:36 +01:00
Nico Weber
8179327068
LibGfx: Add fallible ICC::Profile::try_for_each_tag
...
Similar to 13b18a1
or d0f3f3d
.
2023-02-19 23:46:36 +01:00
Nico Weber
0f0694edb1
LibGfx: Remove an ICC writing FIXME, and a comment
2023-02-19 23:46:36 +01:00
Nico Weber
e2dde64628
LibGfx: Use static_cast in ICC writing code
...
It's what project leadership wants.
2023-02-19 22:31:41 +01:00
Nico Weber
0e66a5c3ed
LibGfx: Write multiLocalizedUnicodeType with multiple strings correctly
...
Found by reencoding Tests/LibGfx/test-inputs/icc-v2.png, the 'dscm' tag.
2023-02-19 22:31:41 +01:00
Nico Weber
07bf2d944c
LibGfx: Add a FIXME to ICC encode_tag_data()
2023-02-19 22:31:41 +01:00
Nico Weber
7e769c7217
LibGfx: Partially implement serialization of TextDescriptionTagData
...
It only implements serialization of the 7-bit ASCII string, not yet
serialization of the UCS-2 and Macintosh ScriptCode strings.
With this, matrix-based v2 profiles can be reencoded :^)
2023-02-19 22:31:41 +01:00
Nico Weber
b2cf773d85
LibGfx: Make TextDescriptionTagData verify input is 7-bit ASCII
...
TextDescriptionTagData::from_bytes() errors out if that isn't the case,
but let's make sure other potential future callers get it right too.
2023-02-19 22:31:41 +01:00
Nico Weber
e76f1caf79
LibGfx: Re-alphabetize TagData classes
...
This moves TextDescriptionTagData below SignatureTagData.
It just moves code around and doesn't change anything.
2023-02-19 22:31:41 +01:00
Nico Weber
4d972ab975
LibGfx: Add spec comment to ICC encode_tag_table()
2023-02-19 22:31:41 +01:00
Sam Atkins
2db168acc1
LibTextCodec+Everywhere: Port Decoders to new Strings
2023-02-19 17:15:47 +01:00
Nico Weber
19e91e5211
LibGfx: Dedupe identical tag data objects when writing ICC data
...
With this, common v4 profiles, such as embedded into jpgs by iPhones
(when configured to write jpegs) or Pixel phones, are identical to
the input when reexported :^)
2023-02-19 08:12:04 +00:00
Nico Weber
2504f2035c
LibGfx: Implement serialization of ViewingConditionsTagData
2023-02-19 08:12:04 +00:00
Nico Weber
933002ae5a
LibGfx: Move ICC ViewingConditionsHeader to BinaryFormat.h
2023-02-19 08:12:04 +00:00
Nico Weber
22c0e6b60e
LibGfx: Implement serialization of MeasurementTagData
2023-02-19 00:01:44 +01:00
Nico Weber
8e5392f9c0
LibGfx: Move ICC MeasurementHeader to BinaryFormat.h
2023-02-19 00:01:44 +01:00
Nico Weber
a1de65c34f
LibGfx: Implement serialization of TextTagData
2023-02-19 00:01:44 +01:00
Nico Weber
eaa0e3484b
LibGfx: Make TextTagData verify input is 7-bit ASCII
...
TextTagData::from_bytes() errors out if that isn't the case, but
let's make sure other potential future callers get it right too.
2023-02-19 00:01:44 +01:00
Nico Weber
df5dbc180f
LibGfx: Implement serialization of SignatureTagData
2023-02-19 00:01:44 +01:00
Nico Weber
3690305794
LibGfx: Implement serialization of CurveTagData
2023-02-19 00:01:44 +01:00
Nico Weber
1ca7f109a1
LibGfx: Implement serialization of CicpTagData
2023-02-19 00:01:44 +01:00
Nico Weber
fd590fe55d
LibGfx: Implement serialization of ChromaticityTagData
2023-02-19 00:01:44 +01:00
Nico Weber
ececea9a1c
LibGfx: Implement serialization of ParametricCurveTagData
...
With this, simple v4 matrix profiles using parametric curves, such as
Compact-ICC-Profiles/profiles/sRGB-v4.icc, can be completely serialized
and the serialized file can be read again by `icc` :^)
2023-02-19 00:01:44 +01:00
Nico Weber
685e2da302
LibGfx: Implement serialization of S15Fixed16ArrayTagData
2023-02-19 00:01:44 +01:00
Nico Weber
931594fce3
LibGfx: Implement serialization of XYZTagData
2023-02-19 00:01:44 +01:00
Nico Weber
eb6dccb675
LibGfx: Implement serialization of MultiLocalizedUnicodeTagData
2023-02-19 00:01:44 +01:00
Nico Weber
4a62cf35fc
LibGfx: Move MultiLocalizedUnicodeRawRecord to BinaryFormat.h
2023-02-19 00:01:44 +01:00
Nico Weber
4e72a35398
LibGfx: Add scaffolding for writing tag data
...
This doesn't deduplicate identical TagDatas yet.
It also doesn't implement actual serialization of TagData yet.
2023-02-19 00:01:44 +01:00
Nico Weber
1457e36b79
LibGfx: Write ICC tag table
...
All offsets and sizes are set to 0 for now, so this still doesn't
produce a valid icc file. It gets closer, though.
2023-02-19 00:01:44 +01:00
Nico Weber
9bd7048519
LibGfx: Move ICC TagTableEntry to BinaryFormat.h
2023-02-19 00:01:44 +01:00
Nico Weber
026d9ceaf9
LibGfx: Extract encode_header() function in ICC writing code
2023-02-19 00:01:44 +01:00
Nico Weber
8b8b7b232e
LibGfx: Add start of an ICC profile writer
...
For now, this can write the profile header.
`icc` refuses to dump its contents since the required copyrightTag,
profileDescriptionTag, and required per-device-class tags are missing,
but it looks ok in a hex editor.
2023-02-17 20:05:50 -07:00
Nico Weber
e8a2c17f8f
LibGfx: Add an accessor for the raw ICC Version minor_and_bugfix byte
...
This is makes it easier to write this value back out.
2023-02-17 20:05:50 -07:00
Nico Weber
0ab3f45135
LibGfx: Add a XYZ->XYZNumber conversion constructor
...
This is useful for converting XYZs back to the on-disk format.
2023-02-17 20:05:50 -07:00
Nico Weber
0ca620a286
LibGfx: Move ICC ProfileFileSignature into a constant in BinaryFormat.h
...
...so that it can be used by ICC writing code too.
2023-02-17 20:05:50 -07:00
Nico Weber
78d849bce2
LibGfx: Make ICCHeader use RenderingIntent enum
...
No behavior change.
2023-02-17 20:05:50 -07:00
Nico Weber
429467f46c
LibGfx: Move ICC on-disk structs to new BinaryFormat.h
...
Removes some existing code duplication and allows future files to use
these structs too.
2023-02-17 20:05:50 -07:00
Sam Atkins
d6075ef5b5
LibTextCodec+Everywhere: Make TextCodec::decoder_for() take a StringView
...
We don't need a full String/DeprecatedString inside this function, so we
might as well not force users to create one.
2023-02-15 12:48:26 -05:00
Nico Weber
9ba3c8e36d
LibGfx: Move ICC::Profile towards "Fallible Constructors" pattern
...
Not quite there yet due to check_required_tags() / check_tag_types(),
but getting closer :^)
2023-02-15 10:15:24 +01:00
Nico Weber
db614b47dd
LibGfx: Move ICC::Profile::read_header() out of class
...
This one is slightly more involved: To make it nice, extract
all the Profile fields that belong to the header into a separate
struct.
2023-02-15 10:15:24 +01:00
Nico Weber
272e5321e3
LibGfx: Move ICC::Profile::read_tag_table() out of class
2023-02-15 10:15:24 +01:00
Nico Weber
006dff6878
LibGfx: Move ICC::Profile::read_tag() out of class
2023-02-15 10:15:24 +01:00
Nico Weber
1c259b7a5a
LibGfx: Validate ICC namedColor2Tag consistency
2023-02-14 19:28:13 +01:00
Nico Weber
45e391dae9
LibGfx: Add v2 "ncol" tag, expand comment
...
I had missed this in 21cc0c0cb2
because this tag is missing in
"Table 32 — Tag list" in the v2 ICC spec O_o. But it's in
"6.4.26 namedColorTag".
Also add a comment pointing to a page saying that all these tags
are very deprecated and not even recommended for new v2 profiles.
(That's how I noticed that namedColorTag was missing.)
2023-02-14 19:28:13 +01:00
Nico Weber
6f95ec5821
LibGfx: Validate presence of curves for lutAToBType and lutBToAType
2023-02-13 00:15:02 +00:00
Nico Weber
7e915b145b
LibGfx: Let ICC code validate tag data alignment
...
Both when reading the main tag table and when reading embedded
curve data in lutAToBType or lutBToAType.
2023-02-12 20:07:45 +00:00
Nico Weber
c4b650cf4e
LibGfx: Implement curve parsing for lutAToBType and lutBToAType
...
With this, we parse all data of all permitted tag types of all
required tags in all ICC profile types :^)
(`icc` doesn't dump this data yet, though.)
2023-02-12 20:07:45 +00:00
Nico Weber
bb19dc00af
LibGfx: Add a size-less ParametricCurveTagData::from_bytes() overload
...
The curve data in lutAToBType and lutBToAType can store 'para' data, but
other than in the main ICC tag table, the size of the tag data isn't
explicitly stored. So it must be computed from the data contents.
Extract the function body into a helper can call that from both
variants.
2023-02-12 20:07:45 +00:00