# PNGdec
**Repository Path**: xuekuling/PNGdec
## Basic Information
- **Project Name**: PNGdec
- **Description**: No description available
- **Primary Language**: C
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2024-10-25
- **Last Updated**: 2024-10-25
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
PNGdec
------
Copyright (c) 2021 BitBank Software, Inc.
Written by Larry Bank
bitbank@pobox.com
What is it?
------------
An 'embedded-friendly' (aka Arduino) PNG image decoding library
Why did you write it?
---------------------
Starting in the late 80's I wrote my own imaging codecs for the existing standards (CCITT G3/G4 was the first). I soon added GIF, JPEG and not long after that, the PNG specification was ratified. All of this code was "clean room" - written just from the specification. I used my imaging library in many projects and products over the years and recently decided that some of my codecs could get a new lease on life as open source, embedded-friendly libraries for microcontrollers.
What's special about it?
------------------------
The PNG image specification was written at a time when computers had megabytes of RAM and conserving memory wasn't a big priority. The memory allocated for decoding the compressed data (zlib) and for holding the uncompressed image can be quite a bit more than is available on modern microcontrollers (usually measured in K bytes). Three goals for this project are: easy to compile+use on all embedded systems, use a minimal amount of RAM and be self-contained. One of the dependencies I like to remove when working on embedded software is malloc/free. When compiling on a system with a tiny amount of RAM, heap memory management might not even exist.
Feature summary:
----------------
- Runs on any MCU with at least 48K of free RAM
- No external dependencies (including malloc/free)
- Decode an image line by line with a callback function
- Decode an image to a user supplied buffer (no callback needed)
- Supports all standard options except interlacing (too much RAM needed)
- Function provided to turn any pixel format into RGB565 for LCD displays
- Optionally disable zlib's internal CRC check - improves speed by 10-30%
- Arduino-style C++ library class with simple API
- Can by built as straight C as well
How fast is it?
---------------
The examples folder contains a sketch to measure the performance of decoding a 240x200 image of varying bit depths. Here's the results when run on a few common MCUs: