Represents the different types of png files, with numbers matching what the spec gives for filevalues.
Creates a new PNG object from the given header parameters, ready to receive data.
Extracts the palette chunk from a PNG object as an array of RGBA quads.
Takes the transparency info and returns an AND mask suitable for use in a Windows ico
Opens a file and pulls the PngHeader out, leaving the rest of the data alone.
The return value should be casted to indexed or truecolor depending on what the file is. You can also use getAsTrueColorImage to forcibly convert it if needed.
Given an input range of bytes, return a lazy PNG file
Creates the PNG data structure out of an IndexedImage. This structure will have the minimum number of colors needed to represent the image faithfully in the file and will be ready for writing to a file.
Creates the PNG data structure out of a TrueColorImage. This implementation currently always make the file a true color with alpha png type.
Easily reads a png file into a MemoryImage
Given an in-memory array of bytes from a PNG file, returns the parsed out PNG object.
Lazily breaks the buffered input range into png chunks, as defined in the PNG spec
Same as above, but takes a regular input range instead of a buffered one. Provided for easier compatibility with standard input ranges (for example, std.stdio.File.byChunk)
Easily reads a png from a data array into a MemoryImage.
Replaces the palette data in a PNG object.
Png files apply a filter to each line in the datastream, hoping to aid in compression. This undoes that as you load.
this is just like writePng(filename, pngFromImage(image)), but it manages its own memory and writes straight to the file instead of using intermediate buffers that might not get gc'd right
Saves a MemoryImage to a png file. See also: writeImageToPngFile which uses memory a little more efficiently
Saves an image from an existing array of pixel data. Note that depth other than 8 may not be implemented yet. Also note depth of 16 must be stored big endian
Turns a PNG structure into an array of bytes, ready to be written to a file.
turns a range of png scanlines into a png file in the output range. really weird
All PNG files are supposed to open with these bytes according to the spec
Allows appending to front on a regular input range, if that range is an array. It appends to the array rather than creating an array of arrays; it's meant to make the illusion of one continuous front rather than simply adding capability to walk backward to an existing input range.
A PNG file consists of the magic number then a stream of chunks. This struct represents those chunks.
Lazily reads out basic info from a png (header, palette, image data) It will only allocate memory to read a palette, and only copies on the header and the palette. It ignores everything else.
Represents the PNG file's data. This struct is intended to be passed around by pointer.
The first chunk in a PNG file is a header that contains this info
* Buffered input range - generic, non-image code Is the given range a buffered input range? That is, an input range that also provides consumeFromFront(int) and appendToFront()
Originally written in 2009. This is why some of it is still written in a C-like style!
PNG file read and write. Leverages color.d's MemoryImage interfaces for interop.
The main high-level functions you want are readPng, readPngFromBytes, writePng, and maybe writeImageToPngFile or writePngLazy for some circumstances.
The other functions are low-level implementations and helpers for dissecting the png file format.