summaryrefslogtreecommitdiffhomepage
path: root/nGenEx/Pcx.h
blob: 4a209c59cb9363a4bf9965f598a99e4999f88692 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
/*  Project nGenEx
    Destroyer Studios LLC
    Copyright © 1997-2004. All Rights Reserved.

    SUBSYSTEM:    nGenEx.lib
    FILE:         PCX.h
    AUTHOR:       John DiCamillo


    OVERVIEW
    ========
    PCX image file loader
*/

#ifndef PCX_H
#define PCX_H

// +--------------------------------------------------------------------+

enum { PCX_OK, PCX_NOMEM, PCX_TOOBIG, PCX_NOFILE };

struct PcxHeader
{
   char  manufacturer;    // Always set to 10
   char  version;         // Always 5 for 256-color files
   char  encoding;        // Always set to 1
   char  bits_per_pixel;  // Should be 8 for 256-color files
   short xmin,ymin;       // Coordinates for top left corner
   short xmax,ymax;       // Width and height of image
   short hres;            // Horizontal resolution of image
   short vres;            // Vertical resolution of image
   char  palette16[48];   // EGA palette; not used for 256-color files
   char  reserved;        // Reserved for future use
   char  color_planes;    // Color planes
   short bytes_per_line;  // Number of bytes in 1 line of pixels
   short palette_type;    // Should be 2 for color palette
   char  filler[58];      // Nothing but junk
};

// +--------------------------------------------------------------------+

struct PcxImage
{
   static const char* TYPENAME() { return "PcxImage"; }

   PcxImage(short w, short h, unsigned long* hibits);
   PcxImage(short w, short h, unsigned char* bits, unsigned char* colors);

   PcxImage();
   ~PcxImage();

   int Load(char *filename);
   int Save(char *filename);

   int LoadBuffer(unsigned char* buf, int len);

   PcxHeader      hdr;
   unsigned char* bitmap;
   unsigned long* himap;
   unsigned char  pal[768];
   unsigned long  imagebytes;
   unsigned short width, height;
};

// +--------------------------------------------------------------------+


#endif