23#ifndef BITMAPHANDLER_H
24#define BITMAPHANDLER_H
39 const unsigned char* src_ptr,
41 const unsigned char* palette,
42 unsigned palette_bpp);
47 const unsigned char* src_ptr,
49 const unsigned char* palette,
50 unsigned palette_bpp);
55 const unsigned char* src_ptr,
61 const unsigned char* palette,
62 unsigned palette_bpp);
65 unsigned char* dest_ptr,
67 const unsigned char* argb);
70 unsigned char* dest_ptr,
72 const unsigned& argb);
75 unsigned char* dest_ptr,
77 const unsigned char* src_ptr,
79 const unsigned char* palette,
80 unsigned palette_bpp);
83 unsigned char* dest_ptr,
85 const unsigned char* src_ptr,
87 const unsigned char* palette,
98 unsigned char* dest_surface,
99 unsigned dest_surface_pitch,
100 unsigned char* src_surface,
101 unsigned src_surface_pitch,
108 unsigned char* dest_surface,
111 unsigned char* src_surface,
114 unsigned char* mip_surface,
119 unsigned char* dest_surface,
120 unsigned dest_surface_width,
121 unsigned dest_surface_height,
122 unsigned dest_surface_pitch,
124 unsigned char* src_surface,
125 unsigned src_surface_width,
126 unsigned src_surface_height,
127 unsigned src_surface_pitch,
129 const unsigned char* src_palette,
130 unsigned src_palette_bpp,
131 bool generate_mip_level,
145 const unsigned char* src_ptr,
147 const unsigned char* palette,
148 unsigned palette_bpp)
150 switch (src_format) {
153 *(
unsigned*)argb=*(
unsigned*)src_ptr;
164 tmp=*(
unsigned short*)src_ptr;
165 *argb++=((tmp&0x000f)<<4);
166 *argb++=((tmp&0x00f0));
167 *argb++=((tmp&0x0f00)>>4);
168 *argb++=((tmp&0xf000)>>8);
174 tmp=*(
unsigned short*)src_ptr;
175 argb[3]=tmp&0x8000 ? 0xff : 0x0;
176 argb[2]=(tmp>>7)&0xf8;
177 argb[1]=(tmp>>2)&0xf8;
178 argb[0]=(tmp<<3)&0xf8;
184 tmp=*(
unsigned short*)src_ptr;
186 argb[2]=(tmp>>8)&0xf8;
187 argb[1]=(tmp>>3)&0xfc;
188 argb[0]=(tmp<<3)&0xf8;
193 unsigned char tmp=*src_ptr;
196 argb[1]=(tmp<<3)&0xe0;
197 argb[0]=(tmp<<6)&0xc0;
202 unsigned char tmp=*src_ptr++;
219 unsigned char index=*src_ptr++;
220 switch (palette_bpp) {
222 *argb++=palette[palette_bpp*index+3];
223 *argb++=palette[palette_bpp*index+2];
224 *argb++=palette[palette_bpp*index+1];
225 *argb++=palette[palette_bpp*index+0];
228 *argb++=palette[palette_bpp*index+2];
229 *argb++=palette[palette_bpp*index+1];
230 *argb++=palette[palette_bpp*index+0];
252 const unsigned char* src_ptr,
254 const unsigned char* palette,
255 unsigned palette_bpp)
257 Read_B8G8R8A8((
unsigned char*)&argb,src_ptr,src_format,palette,palette_bpp);
263 const unsigned char* src_ptr,
269 const unsigned char* palette,
270 unsigned palette_bpp)
272 if (x<0 || y<0 || x>=width || y>=height) {
280 src_ptr+bpp*x+width*bpp*y,
295 unsigned char* dest_ptr,
297 const unsigned char* argb)
299 switch (dest_format) {
302 *(
unsigned*)dest_ptr=*(
unsigned*)argb;
312 tmp=((argb[3])&0xf0)<<8;
313 tmp|=((argb[2])&0xf0)<<4;
314 tmp|=((argb[1])&0xf0);
315 tmp|=((argb[0])&0xf0)>>4;
316 *(
unsigned short*)dest_ptr=tmp;
322 tmp=argb[3] ? 0x8000 : 0x0;
323 tmp|=((argb[2])&0xf8)<<7;
324 tmp|=((argb[1])&0xf8)<<2;
325 tmp|=((argb[0])&0xf8)>>3;
326 *(
unsigned short*)dest_ptr=tmp;
332 tmp=((argb[2])&0xf8)<<8;
333 tmp|=((argb[1])&0xfc)<<3;
334 tmp|=((argb[0])&0xf8)>>3;
335 *(
unsigned short*)dest_ptr=tmp;
341 tmp=((argb[2])&0xe0);
342 tmp|=((argb[1])&0xe0)>>3;
343 tmp|=((argb[0])&0xc0)>>6;
344 *(
unsigned short*)dest_ptr=tmp;
350 unsigned char tmp = (
unsigned char) ( (
351 ((
unsigned int)argb[0] * (
unsigned int)0x1275) +
352 ((
unsigned int)argb[1] * (
unsigned int)0xB725) +
353 ((
unsigned int)argb[2] * (
unsigned int)0x3666)
374 unsigned char* dest_ptr,
376 const unsigned& argb)
389 unsigned char* dest_ptr,
391 const unsigned char* src_ptr,
393 const unsigned char* palette,
394 unsigned palette_bpp)
398 if (dest_format==src_format) {
399 switch (dest_format) {
402 *(
unsigned*)dest_ptr=*(
unsigned*)src_ptr;
405 *dest_ptr++=src_ptr[0];
406 *dest_ptr++=src_ptr[1];
407 *dest_ptr++=src_ptr[2];
411 unsigned short tmp=*(
unsigned short*)src_ptr;
412 *(
unsigned short*)dest_ptr=((tmp&0x000f)<<12)|((tmp&0x00f0)<<4)|((tmp&0x0f00)>>4)|((tmp&0xf000)>>12);
417 unsigned short tmp=*(
unsigned short*)src_ptr;
418 *(
unsigned short*)dest_ptr=((tmp&0x001f)<<11)|((tmp&0x03e0)<<1)|((tmp&0x7c00)>>9)|((tmp&0x8000)>>15);
423 unsigned short tmp=*(
unsigned short*)src_ptr;
424 *(
unsigned short*)dest_ptr=((tmp&0x001f)<<11)|(tmp&0x07e0)|((tmp&0xf800)>>11);
437 Read_B8G8R8A8(b8g8r8a8,src_ptr,src_format,palette,palette_bpp);
449 unsigned char* dest_ptr,
451 const unsigned char* src_ptr,
453 const unsigned char* palette,
454 unsigned palette_bpp,
458 Read_B8G8R8A8(b8g8r8a8,src_ptr,src_format,palette,palette_bpp);
void Bitmap_Assert(bool condition)
static WWINLINE void Copy_Pixel(unsigned char *dest_ptr, WW3DFormat dest_format, const unsigned char *src_ptr, WW3DFormat src_format, const unsigned char *palette, unsigned palette_bpp)
static WWINLINE void Read_B8G8R8A8(unsigned char *argb, const unsigned char *src_ptr, WW3DFormat src_format, const unsigned char *palette, unsigned palette_bpp)
static void Copy_Image_Generate_Mipmap(unsigned width, unsigned height, unsigned char *dest_surface, unsigned dest_pitch, WW3DFormat dest_format, unsigned char *src_surface, unsigned src_pitch, WW3DFormat src_format, unsigned char *mip_surface, unsigned mip_pitch, const Vector3 &hsv_shift=Vector3(0.0f, 0.0f, 0.0f))
static WWINLINE unsigned Combine_A8R8G8B8(unsigned bgra1, unsigned bgra2, unsigned bgra3, unsigned bgra4)
static void Create_Mipmap_B8G8R8A8(unsigned char *dest_surface, unsigned dest_surface_pitch, unsigned char *src_surface, unsigned src_surface_pitch, unsigned width, unsigned height)
static WWINLINE void Write_B8G8R8A8(unsigned char *dest_ptr, WW3DFormat dest_format, const unsigned char *argb)
static void Copy_Image(unsigned char *dest_surface, unsigned dest_surface_width, unsigned dest_surface_height, unsigned dest_surface_pitch, WW3DFormat dest_surface_format, unsigned char *src_surface, unsigned src_surface_width, unsigned src_surface_height, unsigned src_surface_pitch, WW3DFormat src_surface_format, const unsigned char *src_palette, unsigned src_palette_bpp, bool generate_mip_level, const Vector3 &hsv_shift=Vector3(0.0f, 0.0f, 0.0f))
void Recolor(Vector3 &rgb, const Vector3 &hsv_shift)