Skip to content

bitbank2/PNGdec

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

51 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PNGdec

Copyright (c) 2021 BitBank Software, Inc.
Written by Larry Bank
[email protected]

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:


Documentation:
---------------
Detailed information about the API is in the Wiki
See the examples folder for easy starting points

About

An optimized PNG decoder suitable for microcontrollers and PCs

Resources

License

Stars

Watchers

Forks

Sponsor this project

 

Packages

No packages published

Languages