Palm bitmap
(Deleted text about renditions. Not clear that it's notable, and the terminology might be unofficial.) |
Dexvertbot (Talk | contribs) m (→Sample files) |
||
(16 intermediate revisions by 3 users not shown) | |||
Line 3: | Line 3: | ||
|subcat=Graphics | |subcat=Graphics | ||
}} | }} | ||
− | '''Palm bitmap''' ( | + | '''Palm bitmap''', or '''Palm BitmapType''' (also called '''Palm Pilot Tbmp''', '''Palm Pilot Bitmap''', '''Palm pixmap''', etc.), is a native bitmap format of Palm OS. It supports a variety of image types and compression schemes. |
− | == Format == | + | It can be found embedded in some Palm file formats, and apparently has also been used by itself as a file format. In a [[PRC (Palm OS)|PRC]] file, resources named "Tbmp", "tAIB", and probably others, use this format. |
− | + | ||
+ | == Format details == | ||
+ | There can be multiple images in a file. Each image begins with a header. In some cases the header is followed by a color table, or a "DirectInfoType" structure. The pixel data follows. | ||
+ | |||
+ | There are about four different versions of the bitmap format. This section summarizes the information in the Palm OS Reference (see the Links section below), and uses some terms defined there. It does not include every detail. "Same" means the field is the same as in the previous version. Different bitmap versions often appear in the same file. | ||
+ | |||
+ | Some newer-format bitmaps begin with an extra 16-byte "dummy" header, whose would-be ''pixelSize'' field is set to 0xff. This header must be skipped over to get to the real header. | ||
+ | |||
+ | Multi-byte numeric fields are normally big-endian. Little-endian variants of the format evidently exist, but are not covered here. For one thing, the documentation implies there is a V3 variant with version=0x83. | ||
+ | |||
+ | === Header === | ||
+ | {| class="wikitable" | ||
+ | ! Offs. !! BitmapTypeV0 !! BitmapTypeV1 !! BitmapTypeV2 !! BitmapTypeV3 | ||
+ | |- | ||
+ | |0 || width<Int16> || same || same || same | ||
+ | |- | ||
+ | |2 || height<Int16> || same || same || same | ||
+ | |- | ||
+ | |4 || rowBytes<UInt16> || same || same || same | ||
+ | |- | ||
+ | |6 || flags<BitmapFlagsType><br>valid flags: compressed [unset=uncompressed, set=ScanLine] | ||
+ | | flags<BitmapFlagsType><br>valid flags: compressed [unset=uncompressed, set=ScanLine], hasColorTable | ||
+ | | flags<BitmapFlagsType><br>valid flags: compressed [unset=uncompressed, set=use compressionType field], hasColorTable, hasTransparency, directColor | ||
+ | | flags<BitmapFlagsType><br>valid flags: compressed [unset=uncompressed, set=use compressionType field], hasColorTable, hasTransparency, directColor, noDither | ||
+ | |- | ||
+ | |8 || reserved || pixelSize<br>valid values: 1, 2, 4, 8(?)<br>(The documentation doesn't list 8, but such images exist.) || pixelSize<br>valid values: 1, 2, 4, 8, 16 || pixelSize<br>valid values: 1, 2, 4, 8, 16<br>(The documentation doesn't list 16, but that looks like a clerical error.) | ||
+ | |- | ||
+ | |9 || reserved<br>=0 || version<br>=1 || version<br>=2 || version<br>=3 | ||
+ | |- | ||
+ | |10 ||rowspan="2"| reserved ||rowspan="2"| nextDepthOffset<UInt16><br>(in 4-byte units) ||rowspan="2"| same || size (header size) | ||
+ | |- | ||
+ | |11 || pixelFormat<PixelFormatType><br>0=Indexed, 1=565, 2=565LE, 3=IndexedLE | ||
+ | |- | ||
+ | |12 ||rowspan="2"| reserved ||rowspan="2"| reserved || transparentIndex || unused | ||
+ | |- | ||
+ | |13 || compressionType<BitmapCompressionType><br>0=ScanLine, 1=RLE, 2=PackBits, 255=None || same | ||
+ | |- | ||
+ | |14 || reserved || reserved || reserved || density<DensityType><br>72=kDensityLow, 108=kDensityOneAndAHalf, ... | ||
+ | |- | ||
+ | |16 || (end of header) || (end of header) || (end of header) || transparentValue<UInt32> | ||
+ | |- | ||
+ | |20 ||rowspan="2"| ||rowspan="2"| ||rowspan="2"| || nextBitmapOffset<UInt32><br>(in bytes) | ||
+ | |- | ||
+ | |24 || (additional fields could exist here) | ||
+ | |} | ||
+ | |||
+ | === Color table === | ||
+ | Images with ≤ 8 bits/pixel may, or may not, use a custom color table (palette) contained in the file. | ||
+ | |||
+ | Some educated guesses about color tables: If there is no custom color table (i.e. if the hasColorTable flag is not set, or the number of colors in the color table is 0), then images with ≤ 4 bits/pixel are grayscale, and 8-bit images use a standard color table. The standard color table may be found in the source code of programs that support this format. | ||
+ | |||
+ | The color table begins with a "numEntries" field, about which the documentation says "high bits (numEntries > 256) reserved." Images with numEntries=4096 have been observed, which actually have 256 entries. | ||
== Specifications == | == Specifications == | ||
+ | * [https://stuff.mit.edu/afs/sipb/user/yonah/docs/Palm%20OS%20Reference.pdf Palm OS Reference] - See "BitmapType" and "BitmapTypeV..." sections starting on p. 518 | ||
* [http://www.trantor.de/kawt/doc/palmimages.html Palm Native Image Format] | * [http://www.trantor.de/kawt/doc/palmimages.html Palm Native Image Format] | ||
Line 14: | Line 66: | ||
* [[Netpbm]]: pnmtopalm, palmtopnm | * [[Netpbm]]: pnmtopalm, palmtopnm | ||
* [[ImageMagick]] (format named "PALM") | * [[ImageMagick]] (format named "PALM") | ||
+ | * {{Deark}} | ||
+ | |||
+ | == Sample files == | ||
+ | Many [[PRC (Palm OS)#Sample files|PRC]] files contain embedded Palm bitmaps. | ||
+ | * {{DexvertSamples|image/palmBitmap}} | ||
[[Category:Palm]] | [[Category:Palm]] | ||
+ | [[Category:Resources]] |
Latest revision as of 03:22, 28 December 2023
Palm bitmap, or Palm BitmapType (also called Palm Pilot Tbmp, Palm Pilot Bitmap, Palm pixmap, etc.), is a native bitmap format of Palm OS. It supports a variety of image types and compression schemes.
It can be found embedded in some Palm file formats, and apparently has also been used by itself as a file format. In a PRC file, resources named "Tbmp", "tAIB", and probably others, use this format.
Contents |
[edit] Format details
There can be multiple images in a file. Each image begins with a header. In some cases the header is followed by a color table, or a "DirectInfoType" structure. The pixel data follows.
There are about four different versions of the bitmap format. This section summarizes the information in the Palm OS Reference (see the Links section below), and uses some terms defined there. It does not include every detail. "Same" means the field is the same as in the previous version. Different bitmap versions often appear in the same file.
Some newer-format bitmaps begin with an extra 16-byte "dummy" header, whose would-be pixelSize field is set to 0xff. This header must be skipped over to get to the real header.
Multi-byte numeric fields are normally big-endian. Little-endian variants of the format evidently exist, but are not covered here. For one thing, the documentation implies there is a V3 variant with version=0x83.
[edit] Header
Offs. | BitmapTypeV0 | BitmapTypeV1 | BitmapTypeV2 | BitmapTypeV3 |
---|---|---|---|---|
0 | width<Int16> | same | same | same |
2 | height<Int16> | same | same | same |
4 | rowBytes<UInt16> | same | same | same |
6 | flags<BitmapFlagsType> valid flags: compressed [unset=uncompressed, set=ScanLine] |
flags<BitmapFlagsType> valid flags: compressed [unset=uncompressed, set=ScanLine], hasColorTable |
flags<BitmapFlagsType> valid flags: compressed [unset=uncompressed, set=use compressionType field], hasColorTable, hasTransparency, directColor |
flags<BitmapFlagsType> valid flags: compressed [unset=uncompressed, set=use compressionType field], hasColorTable, hasTransparency, directColor, noDither |
8 | reserved | pixelSize valid values: 1, 2, 4, 8(?) (The documentation doesn't list 8, but such images exist.) |
pixelSize valid values: 1, 2, 4, 8, 16 |
pixelSize valid values: 1, 2, 4, 8, 16 (The documentation doesn't list 16, but that looks like a clerical error.) |
9 | reserved =0 |
version =1 |
version =2 |
version =3 |
10 | reserved | nextDepthOffset<UInt16> (in 4-byte units) |
same | size (header size) |
11 | pixelFormat<PixelFormatType> 0=Indexed, 1=565, 2=565LE, 3=IndexedLE | |||
12 | reserved | reserved | transparentIndex | unused |
13 | compressionType<BitmapCompressionType> 0=ScanLine, 1=RLE, 2=PackBits, 255=None |
same | ||
14 | reserved | reserved | reserved | density<DensityType> 72=kDensityLow, 108=kDensityOneAndAHalf, ... |
16 | (end of header) | (end of header) | (end of header) | transparentValue<UInt32> |
20 | nextBitmapOffset<UInt32> (in bytes) | |||
24 | (additional fields could exist here) |
[edit] Color table
Images with ≤ 8 bits/pixel may, or may not, use a custom color table (palette) contained in the file.
Some educated guesses about color tables: If there is no custom color table (i.e. if the hasColorTable flag is not set, or the number of colors in the color table is 0), then images with ≤ 4 bits/pixel are grayscale, and 8-bit images use a standard color table. The standard color table may be found in the source code of programs that support this format.
The color table begins with a "numEntries" field, about which the documentation says "high bits (numEntries > 256) reserved." Images with numEntries=4096 have been observed, which actually have 256 entries.
[edit] Specifications
- Palm OS Reference - See "BitmapType" and "BitmapTypeV..." sections starting on p. 518
- Palm Native Image Format
[edit] Software
- Netpbm: pnmtopalm, palmtopnm
- ImageMagick (format named "PALM")
- Deark
[edit] Sample files
Many PRC files contain embedded Palm bitmaps.