Sam Atkins
2c24192e1f
LibGfx: Move FourCC to its own file
...
These are used in fonts too, so let's not limit them to ImageLoader.
2023-11-24 08:42:46 +01:00
Lucas CHOLLET
1afdf7f3c7
LibGfx/TIFF: Take the TIFF value by rvalue reference in handle_tag()
2023-11-18 11:14:37 +00:00
Lucas CHOLLET
4ab2903e25
LibGfx/TIFF: Make TIFFLoadingContext::handle_tag
be a free function
...
And move it to another file. This code is going to be generated soon, so
let's put it in another file.
2023-11-18 11:14:37 +00:00
Lucas CHOLLET
34d91dec5b
LibGfx/TIFF: Extract metadata-related definition to their own file
2023-11-18 11:14:37 +00:00
Lucas CHOLLET
1d1e7abba7
LibGfx/TIFF: Put the TIFFLoadingContext
class in a TIFF namespace
2023-11-18 11:14:37 +00:00
Lucas CHOLLET
b78f93d0b5
LibGfx/TIFF: Put metadata fields in their own struct
2023-11-18 11:14:37 +00:00
Nico Weber
bfe27228a3
LibPDF+LibGfx: Don't invert CMYK channels in JPEG data in PDFs
...
This is a hack: Ideally we'd have a CMYK Bitmap pixel format,
and we'd convert to rgb at blit time. Then we could also apply color
profiles (which for CMYK images are CMYK-based).
Also, the colors for our CMYK->RGB conversion are off for PDFs,
and we have distinct codepaths for this in Gfx::Color (for paths)
and JPEGs. So when we fix that, we'll have to fix it in two places.
But this doesn't require a lot of code and it's a huge visual
progression, so let's go with it for now.
2023-11-17 22:32:40 +00:00
Nico Weber
000d9da73c
LibGfx: Allow passing FilterType::None to unfilter_scanline()
...
Makes calling this in LibPDF less awkward, and there's no reason
not to allow this.
2023-11-17 19:09:50 +01:00
Nico Weber
574357ef00
LibGfx: Use ceil_div() in png decoder
...
No behavior change, arguably easier to read.
2023-11-17 19:09:50 +01:00
Nico Weber
5a70813d11
LibGfx: Make unfilter_scanline() a static PNGImageDecoderPlugin method
...
That way, LibPDF will be able to call it.
No behavior change.
2023-11-17 19:09:50 +01:00
Nico Weber
588d6fab22
LibGfx+LibPDF: Create filter_type() for converting u8 to FilterType
...
...and use it in LibPDF.
No behavior change.
2023-11-17 19:09:50 +01:00
Nico Weber
6b2c60404d
LibGfx: Use PNG::paeth_predictor() in png decoding path
...
Increases code reuse between encoder and decoder a tiny bit.
No behavior change.
(We should use the vectorized version in the future! But first,
we should learn to do the prediction in-place.)
2023-11-17 19:09:50 +01:00
Lucas CHOLLET
272be6b20a
LibGfx/TIFF: Add support for LZW compression
2023-11-12 13:56:27 +01:00
Lucas CHOLLET
4f5a0227e2
LibGfx/TIFF: Add support for the differencing predictor
...
The differencing predictor is a different way to encode pixels in TIFF
images. Every pixel is encoded as a difference with the previous column
of the image, except the first column, obviously.
This parameter is materialized by a new tag for which reading was also
implemented.
2023-11-12 13:56:27 +01:00
Nicolas Ramz
68e916490b
LibGfx/JPEGWriter: Fix crash on macOS when csize coefficient is 0
...
This fixes #21108
2023-11-09 16:07:28 +01:00
Tim Schumacher
a2f60911fe
AK: Rename GenericTraits to DefaultTraits
...
This feels like a more fitting name for something that provides the
default values for Traits.
2023-11-09 10:05:51 -05:00
Lucas CHOLLET
5e2b049de8
LibCompress/LZW: Use a LittleEndianBitStream
...
No need to manually implement bit stream logic when we have a helper for
this task.
2023-11-08 18:19:34 +01:00
Lucas CHOLLET
00ad8419cf
LibGfx+LibCompress: Extract the LZW decoder and move it to LibCompress
...
Let's put this state-of-the-art decoder from the 80's in its own file in
order to reuse it with other formats, such as TIFF or PDF.
2023-11-08 18:19:34 +01:00
Lucas CHOLLET
a86c0ac003
LibGfx/GIF: Use east-side const
2023-11-08 18:19:34 +01:00
Tim Ledbetter
b96a5f4265
LibGfx/ILBM: Avoid overflow when creating bitplane data buffer
2023-11-08 09:36:01 +01:00
Tim Ledbetter
5e1017bcf1
LibGfx/ILBM: Avoid buffer overrun when reading bitplane data
2023-11-08 09:36:01 +01:00
Tim Ledbetter
f56ae8c0e9
LibGfx/ILBM: Ensure CMAP chunk size matches expected value
...
The color map should be 3 bytes per pixel and should contain
`2^nPlanes` pixels. We now return an error if the color map isn't the
size we expect.
2023-11-08 09:36:01 +01:00
Tim Ledbetter
61eb754f63
LibGfx/ILBM: Add validation for header fields
...
We now exit early if a header field is set to a value that we don't
currently support.
2023-11-08 09:36:01 +01:00
Tim Ledbetter
bed7b33daa
LibGfx/ILBM: Don't attempt to decode a BODY chunk without a color map
...
While this isn't disallowed by the specification, it is not something
we currently support. Instead of crashing we now return an error in
this case.
2023-11-08 09:36:01 +01:00
Tim Ledbetter
75731f9c50
LibGfx/ILBM: Avoid buffer overruns when decompressing data
2023-11-08 09:36:01 +01:00
Tim Ledbetter
ae6c39e501
LibGfx/ILBM: Ensure decompressed body chunk data is the correct length
2023-11-08 09:36:01 +01:00
Lucas CHOLLET
81794df280
LibGfx/TIFF: Add support for images with PackBits compression
2023-11-08 09:28:36 +01:00
Lucas CHOLLET
472a886dfc
LibGfx/TIFF: Refactor the decoding loop
...
This is done to ease the introduction of the support of other
compressions.
2023-11-08 09:28:36 +01:00
Lucas CHOLLET
75caccafa4
LibGfx: Add a TIFF loader
2023-11-06 12:29:30 -07:00
Lucas CHOLLET
dc5bb5a4cc
LibGfx: Sort entries in the definition of ImagePluginInitializer
2023-11-06 12:29:30 -07:00
Tim Ledbetter
438e9e146c
LibGfx/JPEG: Refill reservoir if necessary when discarding bits
...
This condition was hit 157 times out of the 109,233 JPEG images in the
Govdocs1 corpus. This change allows all of these
images to load correctly.
2023-11-05 09:01:15 +01:00
Tim Ledbetter
9ed8c0b183
LibGfx/JPEG: Propagate errors when creating JPEGLoadingContext
...
This allows the JPEG fuzzer to make progress.
2023-10-29 21:39:29 +01:00
Lucas CHOLLET
e721c74598
LibGfx: Provide an implementation for ImageDecoderPlugin::icc_data()
2023-10-29 07:21:10 +00:00
Tim Ledbetter
2311e28d63
LibGfx/BMPLoader: Mitigate potential overflows when decoding bitmap DIB
2023-10-25 05:52:29 +02:00
Tim Ledbetter
8ec26f3b54
LibGfx/BMPLoader: Account for header size when checking DIB bounds
2023-10-25 05:52:29 +02:00
Tim Ledbetter
023309fdc4
LibGfx/JPEGLoader: Check array access bounds when building lookup table
2023-10-20 07:17:27 +02:00
circl
a9208a18ca
LibGfx/BMPLoader: Make sure height passed to Gfx::Bitmap is positive
...
BMP files encode the direction of the rows with the sign of the height.
Our BMP decoder already makes all the proper checks, however when
constructing the Gfx::Bitmap, didn't actually make the height positive.
Boog neutralized :^)
2023-10-19 08:31:36 +02:00
Tim Ledbetter
f4a89c31c6
LibGfx/ILBM: Explicitly fail decoding if body chunk isn't present
...
Previously, the decoder would crash in this case.
2023-10-17 10:24:27 +02:00
Tim Ledbetter
9e3ee0e2b5
LibGfx/ILBM: Avoid buffer overrun when reading header chunk
2023-10-15 08:37:27 +02:00
Andreas Kling
a396bb0c0b
LibGfx: Remove indexed palette formats from Bitmap and Painter
...
Nobody was actually using these formats anymore, and this simplifies
and shrinks the code. :^)
2023-10-12 07:39:05 +02:00
Andreas Kling
bcbaad0b1d
LibGfx: Make BMP decoder always produce BGRA8888 or BGRx8888 bitmaps
...
This was the only remaining codec that produced IndexedN bitmaps.
By removing them, we'll be able to get rid of those formats and simplify
the Bitmap and Painter classes.
2023-10-12 07:39:05 +02:00
Tim Ledbetter
a673062084
LibGfx/BMPLoader: Ensure data offset cannot point past EOF
2023-10-11 14:36:12 -04:00
Tim Ledbetter
bc6638682d
LibGfx/BMPLoader: Ensure DIB size and offset are within expected range
2023-10-10 05:50:02 +02:00
Tim Ledbetter
4cc2fc4afa
LibGfx/PNGLoader: Remove redundant IHDR bit depth validation
2023-10-08 10:46:00 +02:00
Tim Ledbetter
bc6ae54b59
LibGfx/PNGLoader: Don't allow multiple consecutive IHDR chunks
2023-10-08 10:46:00 +02:00
Tim Ledbetter
1abc52a689
LibGfx/DDSLoader: Avoid integer overflow in decode_color_block()
2023-10-06 22:18:27 +02:00
Tim Ledbetter
b25efa219b
LibGfx/DDSLoader: Allow image dimensions that are not divisible by 4
2023-10-06 22:18:27 +02:00
Tim Ledbetter
b64ed060d8
LibGfx/PNGLoader: Add validation for IHDR width, height and bit depth
2023-10-06 08:21:58 +02:00
Nicolas Ramz
7b4b5b735b
LibGfx/ILBMLoader: Add support for EHB mode
2023-10-03 16:09:55 -06:00
Tim Ledbetter
0b824ab7a6
LibGfx: Check bounds of color table access in TinyVGLoader
2023-10-03 22:59:38 +01:00