00001
00019 #ifndef __Bitmap_H__
00020 #define __Bitmap_H__
00021
00022
00023 #include "ColorHelper.h"
00024
00025
00026 class Image;
00027 class Asset;
00028
00029
00030 class Bitmap
00031 {
00032 public:
00033 Bitmap();
00034
00035 Bitmap(
00036 const Asset& asset
00037 );
00038
00043 Bitmap(
00044 int width,
00045 int height
00046 );
00047
00053 Bitmap(
00054 const Image& image
00055 );
00056
00057 ~Bitmap();
00058
00065 unsigned short* GetData();
00066
00071 void Clear();
00072
00082 void Fill(
00083 int x1,
00084 int y1,
00085 int x2,
00086 int y2,
00087 unsigned short color,
00088 unsigned char alpha = 255
00089 );
00090
00091 void Fill(
00092 unsigned short color,
00093 unsigned char alpha = 255
00094 );
00095
00105 enum Orientation
00106 {
00107 Rotate_0,
00108 Rotate_90,
00109 Rotate_180,
00110 Rotate_270,
00111 Mirror_X,
00112 Mirror_Y,
00113 Orientations_Count
00114 };
00115
00116
00122 int GetWidth(
00123 Orientation orientation = Rotate_0
00124 ) const;
00125
00126
00132 int GetHeight(
00133 Orientation orientation = Rotate_0
00134 ) const;
00135
00136
00142 unsigned short GetPixel(
00143 int x,
00144 int y
00145 ) const;
00146
00154 unsigned short GetPixel(
00155 int x,
00156 int y,
00157 Orientation orientation
00158 ) const;
00159
00165 void SetPixel(
00166 int x,
00167 int y,
00168 unsigned short color,
00169 Orientation orientation
00170 );
00171
00175 void SetPixel(
00176 int x,
00177 int y,
00178 unsigned short color
00179 );
00180
00187 void BlendPixel(
00188 int x,
00189 int y,
00190 unsigned short color,
00191 unsigned char alpha,
00192 Orientation orientation
00193 );
00194
00199 void BlendPixel(
00200 int x,
00201 int y,
00202 unsigned short color,
00203 unsigned char alpha
00204 );
00205
00210 void Blit(
00211 Bitmap* target,
00212 int x,
00213 int y,
00214 unsigned short modulate = 0xffff,
00215 unsigned char alpha = 255,
00216 Orientation orientation = Rotate_0
00217 ) const;
00218
00224 void Blit(
00225 int x1,
00226 int y1,
00227 int x2,
00228 int y2,
00229 Bitmap* target,
00230 int x,
00231 int y,
00232 unsigned short modulate = 0xffff,
00233 unsigned char alpha = 255,
00234 Orientation orientation = Rotate_0
00235 ) const;
00236
00237 void Save(Asset& asset) const;
00238 void Load(const Asset& asset);
00239
00240 void WriteToAsset(Asset* asset) const;
00241 void ReadFromAsset(const Asset* asset);
00242
00243 private:
00247 void TransformCoordinates(
00248 int& x,
00249 int& y,
00250 Orientation orientation
00251 ) const;
00252
00257 void Blit_Rotate0(int sourceX, int sourceY, int sourceWidth, int sourceHeight, Bitmap* target, int targetX, int targetY) const;
00258 void Blit_Rotate0_Modulate(int sourceX, int sourceY, int sourceWidth, int sourceHeight, Bitmap* target, int targetX, int targetY, unsigned short modulate) const;
00259 void Blit_Rotate0_Alpha(int sourceX, int sourceY, int sourceWidth, int sourceHeight, Bitmap* target, int targetX, int targetY, unsigned char alpha) const;
00260 void Blit_Rotate0_Modulate_Alpha(int sourceX, int sourceY, int sourceWidth, int sourceHeight, Bitmap* target, int targetX, int targetY, unsigned short modulate, unsigned char alpha) const;
00261
00262 void Blit_Rotate90(int sourceX, int sourceY, int sourceWidth, int sourceHeight, Bitmap* target, int targetX, int targetY) const;
00263 void Blit_Rotate90_Modulate(int sourceX, int sourceY, int sourceWidth, int sourceHeight, Bitmap* target, int targetX, int targetY, unsigned short modulate) const;
00264 void Blit_Rotate90_Alpha(int sourceX, int sourceY, int sourceWidth, int sourceHeight, Bitmap* target, int targetX, int targetY, unsigned char alpha) const;
00265 void Blit_Rotate90_Modulate_Alpha(int sourceX, int sourceY, int sourceWidth, int sourceHeight, Bitmap* target, int targetX, int targetY, unsigned short modulate, unsigned char alpha) const;
00266
00267 void Blit_Rotate180(int sourceX, int sourceY, int sourceWidth, int sourceHeight, Bitmap* target, int targetX, int targetY) const;
00268 void Blit_Rotate180_Modulate(int sourceX, int sourceY, int sourceWidth, int sourceHeight, Bitmap* target, int targetX, int targetY, unsigned short modulate) const;
00269 void Blit_Rotate180_Alpha(int sourceX, int sourceY, int sourceWidth, int sourceHeight, Bitmap* target, int targetX, int targetY, unsigned char alpha) const;
00270 void Blit_Rotate180_Modulate_Alpha(int sourceX, int sourceY, int sourceWidth, int sourceHeight, Bitmap* target, int targetX, int targetY, unsigned short modulate, unsigned char alpha) const;
00271
00272 void Blit_Rotate270(int sourceX, int sourceY, int sourceWidth, int sourceHeight, Bitmap* target, int targetX, int targetY) const;
00273 void Blit_Rotate270_Modulate(int sourceX, int sourceY, int sourceWidth, int sourceHeight, Bitmap* target, int targetX, int targetY, unsigned short modulate) const;
00274 void Blit_Rotate270_Alpha(int sourceX, int sourceY, int sourceWidth, int sourceHeight, Bitmap* target, int targetX, int targetY, unsigned char alpha) const;
00275 void Blit_Rotate270_Modulate_Alpha(int sourceX, int sourceY, int sourceWidth, int sourceHeight, Bitmap* target, int targetX, int targetY, unsigned short modulate, unsigned char alpha) const;
00276
00277 void Blit_MirrorX(int sourceX, int sourceY, int sourceWidth, int sourceHeight, Bitmap* target, int targetX, int targetY) const;
00278 void Blit_MirrorX_Modulate(int sourceX, int sourceY, int sourceWidth, int sourceHeight, Bitmap* target, int targetX, int targetY, unsigned short modulate) const;
00279 void Blit_MirrorX_Alpha(int sourceX, int sourceY, int sourceWidth, int sourceHeight, Bitmap* target, int targetX, int targetY, unsigned char alpha) const;
00280 void Blit_MirrorX_Modulate_Alpha(int sourceX, int sourceY, int sourceWidth, int sourceHeight, Bitmap* target, int targetX, int targetY, unsigned short modulate, unsigned char alpha) const;
00281
00282 void Blit_MirrorY(int sourceX, int sourceY, int sourceWidth, int sourceHeight, Bitmap* target, int targetX, int targetY) const;
00283 void Blit_MirrorY_Modulate(int sourceX, int sourceY, int sourceWidth, int sourceHeight, Bitmap* target, int targetX, int targetY, unsigned short modulate) const;
00284 void Blit_MirrorY_Alpha(int sourceX, int sourceY, int sourceWidth, int sourceHeight, Bitmap* target, int targetX, int targetY, unsigned char alpha) const;
00285 void Blit_MirrorY_Modulate_Alpha(int sourceX, int sourceY, int sourceWidth, int sourceHeight, Bitmap* target, int targetX, int targetY, unsigned short modulate, unsigned char alpha) const;
00286 public:
00287 unsigned short* data_;
00288 int width_;
00289 int height_;
00290 };
00291
00292
00293
00294
00295 #endif
00296