QuantumPaint file format
Jump to navigation
Jump to search
QuantumPaint *.PBX (low and medium resolution)
3 bytes 0
1 byte mode, 0x00 = 128 color low resolution pciture,
0x01 = 32 color medium resolution picture,
0x80 = 512 color picture low resolution picture
0x81 = 4096 color picture low resolution picture
1 word 0x8001 = compressed
Quantumpaint v2.00 sets it to 0x8000 for uncompressed files
Quantumpaint v1.00 seems to use 0x0000 for lowras and 0x0333
for medium res bytes. The PBX viewer only tests for 0x8001.
122 bytes ??
total 128 header bytes
?? bytes palette data;public_painter.txt
for uncompressed normal pictures 8 palette datasets follow:
16 words: 16 palettes
1 word: number of the first line this pallet is used
1 word: 0 the palette is not active, else this pallete is active
1 word: first color of color cycle
1 word: last color of color cycle
1 word: cycle speed, number of vbl's between steps, 0 = fastest
1 word: 0: no cycling, 1 cycle right, 0xffff cycle left
2 word: ?? should be zero
__
48 bytes per palette
The first palette should always be active and start on line 0
___
384 bytes palette data for low (128 color) and medium (32 color) pictures
for uncompressed 512 color pictures 6400 words (32 colors per scanline)
for uncompressed 4096 color pictures 12800 words (32 colors per scanline,
2 palette sets for alternating screens, two 6400 word blocks)
?? bytes screen data, for uncompressed pictures this is 32000 bytes for all modes
--------
> 128 bytes total
Compression scheme
Palette and screen data are compressed into one block using packbits compression.
The expanded screen data is not simply screen memory bitmap data; instead, the
data is divided into four sets of vertical columns. (This results in
better compression.) A column consists of one specific word taken
from each scan line, going from top to bottom. For example, column 1
consists of word 1 on scanline 1 followed by word 1 on scanline 2, etc.,
followed by word 1 on scanline 200.
The columns appear in the following order:
1st set contains columns 1, 5, 9, 13, ..., 69, 73, 77 in order
2nd set contains columns 2, 6, 10, 14, ..., 70, 74, 78 in order
3rd set contains columns 3, 7, 11, 15, ..., 71, 75, 79 in order
4th set contains columns 4, 8, 12, 16, ..., 72, 76, 80 in order
This colmn ordering is just the same as in the Tiny format.
for medium res it is the same only with two stes for the two medium res bitplanes.
/*
* Given an x-coordinate and a color index, returns the corresponding
* QuantumPaint palette index.
*
* by Hans Wessels; placed in the public domain January, 2008.
*/
int find_pbx_index(int x, int c)
{
int x1 = 10 * c;
if (1 & c)
{ /* If c is odd */
x1 = x1 - 5;
}
else
{ /* If c is even */
x1 = x1 + 1;
}
if(c>7)
{
x1+=12;
}
if(x>=(x1+75))
{
c = c + 16;
}
return c;
}
Back to ST Picture Formats