| |
| |  |  |  | |  |
status of this document: work in progress
|
Table of Contents
Last updated: May 18. 2000
|
Basic
Description
PBMs, PGMs and PPMs are a family of bitmap
formats, where PBMs store black&white images, PGMs store grayscale
images and PPMs store color images. |
Basic
File Format
Since PGMs are not binary files (as most other
bitmap formats), but ASCII files, "fields" are not determined by a length
in bytes, but seperated by whitespace. Note that there can be comments,
which are considered as whitespace, and that no line should be longer than
70 characters. The CRs and LFs in the file do not have to correspond to
the end of a pixel row.
| Name |
Description |
| Header |
|
| |
Signature |
2 byte format signature:
"P1" (ASCII codes 80 and 49): PBM ASCII
black&white
"P2" (ASCII codes 80 and 50): PGM ASCII
grayscale
"P3" (ASCII codes 80 and 51): PPM ASCII
colored
"P4" (ASCII codes 80 and 52): PBM RAW
black&white
"P5" (ASCII codes 80 and 53): PGM RAW
grayscale
"P6" (ASCII codes 80 and 54): PPM RAW
colored |
| (Whitespace) |
|
| Width |
Bitmap Width |
| (Whitespace) |
|
| Height |
Bitmap Height |
| Data Precision |
present in PGM and PPM files, but not
in PBM |
| |
(Whitespace) |
PBM: not present
PGM: Value to be considered as white.
PPM: Value to be considered as max. for
all three color components.
This value needs to be >0, and can be
>255 if in ASCII format! |
| MaxValue |
| Raster Data Block |
see below |
Definition of
- Whitespace: one or more characters
from the following set: TAB, LF, CR, SPACE. (= ASCII codes: 8, 10, 13,
32)
- Comment: The caracter "#" (ASCII
code 35) followed by any number of characters, up to a LF or CR.
|
|
|
|
Raster
Data encoding
PBM ASCII black & white. (Signature=P1)
| Name |
Description |
| |
|
(Whitespace) |
|
| Pixel |
ASCII pixel. 0 (ASCII 48) =white, 1 (ASCII
49) = black. |
| repeated Width times |
| repeated Height times |
PGM ASCII grayscale. (Signature=P2)
| Name |
Description |
| |
|
(Whitespace) |
|
| Pixel |
A pixel's gray value.
Must be between 0 and Header.MaxValue |
| repeated Width times |
| repeated Height times |
PPM ASCII color. (Signature=P3)
| Name |
Description |
| |
|
(Whitespace) |
|
| Pixel Red |
A pixel's red component
Must be between 0 and Header.MaxValue |
| (Whitespace) |
|
| Pixel Green |
A pixel's green component
Must be between 0 and Header.MaxValue |
| (Whitespace) |
|
| Pixel Blue |
A pixel's blue component
Must be between 0 and Header.MaxValue |
| repeated Width times |
| repeated Height times |
PBM RAW black & white. (Signature=P4)
There cannot be any whitespace or comments
in between pixels, as they would be interpreted as pixels.
| Name |
Size |
Description |
| Seperator |
1 byte |
A single byte of whitespace (preferably
a LF) that seperates MaxValue from the Pixel data |
|
PixelData |
1 byte |
A single byte with the pixel data for
8 pixels. Within each byte every bit represents one pixel |
|
1 bit (bit 7) |
leftmost pixel |
| ... |
|
| 1 bit (bit 0) |
rightmost pixel. Pixels wrap along lines,
so this pixel could already actualy be on then next line. |
| repeated (Width*Height+7)
div 8 times. (where div is integer division) |
PGM RAW grayscale. (Signature=P5)
There cannot be any whitespace or comments
in between pixels, as they would be interpreted as pixels. MaxValue cannot
be more than 255.
| Name |
Size |
Description |
| Seperator |
1 byte |
A single byte of whitespace (preferably
a LF) that seperates MaxValue from the Pixel data |
| |
|
Pixel |
1 byte |
A single byte with the pixel's gray value. |
| repeated Width times |
| repeated Height times |
PPM RAW color. (Signature=P6)
There cannot be any whitespace or comments
in between pixels, as they would be interpreted as pixels. MaxValue cannot
be more than 255.
| Name |
Size |
Description |
| Seperator |
1 byte |
A single byte of whitespace (preferably
a LF) that seperates MaxValue from the Pixel data |
| |
|
Red |
1 byte |
A single byte with the pixel's red component. |
| Green |
1 byte |
A single byte with the pixel's green component. |
| Blue |
1 byte |
A single byte with the pixel's blue component. |
| repeated Width times |
| repeated Height times |
Example:
A grayscale bitmap with 24x7 pixels, where
15 is white (equivalent to 5 bits color depth)
P2
# feep.pgm
24 7
15
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 3 3 3 3 0 0 7
7 7 7 0 0 11 11 11 11 0 0 15 15 15
15 0
0 3 0 0 0 0 0 7
0 0 0 0 0 11 0 0 0 0
0 15 0 0 15 0
0 3 3 3 0 0 0 7
7 7 0 0 0 11 11 11 0 0 0 15 15
15 15 0
0 3 0 0 0 0 0 7
0 0 0 0 0 11 0 0 0 0
0 15 0 0 0 0
0 3 0 0 0 0 0 7
7 7 7 0 0 11 11 11 11 0 0 15
0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 |
|
Portability
The PGM format was designed with portability
in mind (hence it's name), and is therefore easy to implement on any platform.
When reading PGMs one should make as few assumptions as possible, for example
expect more than 70 characters per line. |
Trademarks,
Patents and Royalties
None known.
(please read the disclaimer) |
Cross-Checking
Software
This section is for programmers, who wish
to cross-check their implementation with others. This is an incomplete
list of programs, which are available as freeware / shareware / try-before-buy
etc.
The following software is able to decode
PBMs, PGMs and PPMs:
The following software is able to encode PBMs,
PGMs and PPMs
|
Online
Resources
? |
Paper
Resources
? |
|  | |  |  | |
|
| |
Disclaimer
| |  |  |  | |  |
This is not the official format documentation.
Although we're doing our best to keep this information as accurate as possible,
there is no way of checking all of it under all possible circumstances.
We're not taking any responsibility for the results of this information
or lack thereof. The 'trademarks, patents and royalties' section is here
just for your convenience, and is in no way complete. Please send us a
note, if you find any incorrect of missing information to fileformats@daubnet.com.
|  | |  |  | |
|