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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
/* Starshatter: The Open Source Project
Copyright (c) 2021-2024, Starshatter: The Open Source Project Contributors
Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors
Copyright (c) 1997-2006, Destroyer Studios LLC.
AUTHOR: John DiCamillo
OVERVIEW
========
Bitmap Resource class
*/
#ifndef Bitmap_h
#define Bitmap_h
#include "Res.h"
#include "Types.h"
#include "Geometry.h"
// +--------------------------------------------------------------------+
class Color;
class ColorIndex;
class Bitmap : public Resource
{
public:
static const char* TYPENAME() { return "Bitmap"; }
enum BMP_TYPES { BMP_SOLID, BMP_TRANSPARENT, BMP_TRANSLUCENT };
Bitmap();
Bitmap(int w, int h, ColorIndex* p=0, int t=BMP_SOLID);
Bitmap(int w, int h, Color* p, int t=BMP_SOLID);
virtual ~Bitmap();
int IsIndexed() const { return pix != 0; }
int IsHighColor() const { return hipix != 0; }
int IsDual() const { return IsIndexed() &&
IsHighColor(); }
void SetType(int t) { type = t; }
int Type() const { return type; }
bool IsSolid() const { return type==BMP_SOLID; }
bool IsTransparent() const { return type==BMP_TRANSPARENT; }
bool IsTranslucent() const { return type==BMP_TRANSLUCENT; }
int Width() const { return width; }
int Height() const { return height; }
ColorIndex* Pixels() const { return pix; }
Color* HiPixels() const { return hipix; }
int BmpSize() const;
int RowSize() const;
ColorIndex GetIndex(int x, int y) const;
Color GetColor(int x, int y) const;
void SetIndex(int x, int y, ColorIndex c);
void SetColor(int x, int y, Color c);
void FillColor(Color c);
void ClearImage();
void BitBlt(int x, int y, const Bitmap& srcImage, int sx, int sy, int w, int h, bool blend=false);
void CopyBitmap(const Bitmap& rhs);
void CopyImage(int w, int h, BYTE* p, int t=BMP_SOLID);
void CopyHighColorImage(int w, int h, DWORD* p, int t=BMP_SOLID);
void CopyAlphaImage(int w, int h, BYTE* p);
void CopyAlphaRedChannel(int w, int h, DWORD* p);
void AutoMask(DWORD mask=0);
virtual BYTE* GetSurface();
virtual int Pitch() const;
virtual int PixSize() const;
bool ClipLine(int& x1, int& y1, int& x2, int& y2);
bool ClipLine(double& x1, double& y1, double& x2, double& y2);
void DrawLine(int x1, int y1, int x2, int y2, Color color);
void DrawRect(int x1, int y1, int x2, int y2, Color color);
void DrawRect(const Rect& r, Color color);
void FillRect(int x1, int y1, int x2, int y2, Color color);
void FillRect(const Rect& r, Color color);
void DrawEllipse(int x1, int y1, int x2, int y2, Color color, BYTE quad=0x0f);
void DrawEllipsePoints(int x0, int y0, int x, int y, Color c, BYTE quad);
void ScaleTo(int w, int h);
void MakeIndexed();
void MakeHighColor();
void MakeTexture();
bool IsTexture() const { return texture; }
void TakeOwnership() { ownpix = true; }
const char* GetFilename() const { return filename; }
void SetFilename(const char* s);
DWORD LastModified() const { return last_modified; }
static Bitmap* Default();
static Bitmap* GetBitmapByID(HANDLE bmp_id);
static Bitmap* CheckCache(const char* filename);
static void AddToCache(Bitmap* bmp);
static void CacheUpdate();
static void ClearCache();
static DWORD CacheMemoryFootprint();
protected:
int type;
int width;
int height;
int mapsize;
bool ownpix;
bool alpha_loaded;
bool texture;
ColorIndex* pix;
Color* hipix;
DWORD last_modified;
char filename[64];
};
#endif // Bitmap_h
|