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
Tim Ledbetter
e6c1429311
LibGfx: Check bounds of color table accesses in BMPLoader
...
Previously, it was possible to crash the decoder by crafting a file
with invalid color table index values.
2023-10-03 08:33:53 +02:00
Tim Ledbetter
dd81bea9ef
LibGfx: Don't read past EOF in JPEGLoader
...
Previously, it was possible to pass JPEGLoader a crafted input which
would read past the end of the stream. We now return an error in such
cases.
2023-10-02 20:09:25 +02:00
Nicolas Ramz
b8f8b22aa5
LibGfx/ILBM: Add support for uncompressed files
2023-09-14 21:00:54 +01:00
Sergey Bugaev
8ebddc1ff6
LibGfx: Misc 32-bit build fixes
2023-09-06 07:21:07 -06:00
MacDue
bbf66ea055
LibGfx: Remove maximum size limit for decoded images
...
It is unlikely this is needed anymore, and as pointed out things should
now safely return OOM if the bitmap is too large to allocate.
Also, no recently added decoders respected this limit anyway.
Fixes #20872
2023-09-03 14:36:54 +02:00
Tim Schumacher
8a853278d0
LibCompress: Port ZlibDecompressor
to AK::Stream
2023-08-23 12:03:37 +01:00
Nicolas Ramz
fda5590313
LibGfx/ILBM: Add an IFF-ILBM decoder :)
...
IFF was a generic container fileformat that was popular on the Amiga
since it was the only file format supported by Deluxe Paint.
ILBM is an image format popular in the late eighties/nineties
that uses the IFF container.
This is a very first version of the decoder that only supports
(byterun) compressed files with bpp <= 8.
Only the minimal chunks are decoded: CMAP, BODY, BMHD.
I am planning to add support for the following variants:
- EHB (32 colours + lighter 32 colours)
- HAM6 / HAM8 (special mode that allowed to display the whole Amiga
4096 colours / 262 144 colours palette)
- TrueColor (24bit)
Things that could be fun to do:
- Still images could be animated using color cycle information
2023-08-15 18:36:11 +01:00
Nicolas Ramz
66d6388b8a
LibGfx/WebP: Move FourCC into ImageDecoder.h
...
It will be shared with upcoming ILBM decoder.
2023-08-15 18:36:11 +01:00
Lucas CHOLLET
ea85c99a01
LibGfx/JPEGXL: Add support for cropped images
...
Due to the way JPEG XL encodes its lossless images, it is sometimes
interesting to embed a large image and crop the result at the end. This
patch adds the functionality to crop a frame.
Note that JPEG XL supports image composition (almost like layers in
image editing software programs) and I tried to make these changes be
a step toward image composing. It's a small step as we are still unable
to read multiple frames, and we only support the `kReplace` blending
mode.
2023-08-12 08:46:10 +02:00
Lucas CHOLLET
49c55447d9
LibGfx/JPEGXL: Put frame's image inside the Frame
struct
...
The image was previously managed as an output parameter of the
`read_frame` function. This reorganisation also brings us closer to the
spec. As it is specified that each frame have its own image that will
later on compose a greater bitmap.
2023-08-12 08:46:10 +02:00
Lucas CHOLLET
70e4d3a9b6
LibGfx/JPEGXL: Support images with the have_crop
option in FrameHeader
...
This commit only allows us to read these values. The decoder will still
output the image as if no cropping was requested.
2023-08-12 08:46:10 +02:00
Lucas CHOLLET
729e35ef21
LibGfx/JPEGXL: Remove unused variables in JPEGXLLoadingContext
...
These two variables are already fields of `Frame`, they make no sense at
the context scope.
2023-08-12 00:15:58 +02:00