static void putpixel__nocheck(ALLEGRO_BITMAP *bmp, int x, int y, int color) { unsigned long addr = (unsigned long) bmp->line[y] + x * bmp->surf->format->BytesPerPixel; switch(bmp->surf->format->BytesPerPixel) { case 1: bmp_write8(addr, color); break; case 2: bmp_write16(addr, color); break; case 3: bmp_write24(addr, color); break; case 4: bmp_write32(addr, color); break; } }
void convert_image_to_allegro_templ(const Image* image, BITMAP* bmp, int _x, int _y, const Palette* palette) { const LockImageBits<ImageTraits> bits(image); typename LockImageBits<ImageTraits>::const_iterator src_it = bits.begin(); #ifdef _DEBUG typename LockImageBits<ImageTraits>::const_iterator src_end = bits.end(); #endif int depth = bitmap_color_depth(bmp); int x, y, w = image->width(), h = image->height(); unsigned long bmp_address; bmp_select(bmp); switch (depth) { case 8: #if defined GFX_MODEX && !defined ALLEGRO_UNIX && !defined ALLEGRO_MACOSX if (is_planar_bitmap (bmp)) { for (y=0; y<h; ++y) { bmp_address = (unsigned long)bmp->line[_y]; for (x=0; x<w; ++x) { ASSERT(src_it != src_end); outportw(0x3C4, (0x100<<((_x+x)&3))|2); bmp_write8(bmp_address+((_x+x)>>2), (convert_color_to_allegro<ImageTraits, 8>(*src_it, palette))); ++src_it; address++; } _y++; } } else { #endif for (y=0; y<h; ++y) { bmp_address = bmp_write_line(bmp, _y)+_x; for (x=0; x<w; ++x) { ASSERT(src_it != src_end); bmp_write8(bmp_address, (convert_color_to_allegro<ImageTraits, 8>(*src_it, palette))); ++bmp_address; ++src_it; } _y++; } #if defined GFX_MODEX && !defined ALLEGRO_UNIX && !defined ALLEGRO_MACOSX } #endif break; case 15: _x <<= 1; for (y=0; y<h; y++) { bmp_address = bmp_write_line(bmp, _y)+_x; for (x=0; x<w; ++x) { ASSERT(src_it != src_end); bmp_write15(bmp_address, (convert_color_to_allegro<ImageTraits, 15>(*src_it, palette))); bmp_address += 2; ++src_it; } _y++; } break; case 16: _x <<= 1; for (y=0; y<h; ++y) { bmp_address = bmp_write_line(bmp, _y)+_x; for (x=0; x<w; ++x) { ASSERT(src_it != src_end); bmp_write16(bmp_address, (convert_color_to_allegro<ImageTraits, 16>(*src_it, palette))); bmp_address += 2; ++src_it; } _y++; } break; case 24: _x *= 3; for (y=0; y<h; ++y) { bmp_address = bmp_write_line(bmp, _y)+_x; for (x=0; x<w; ++x) { ASSERT(src_it != src_end); bmp_write24(bmp_address, (convert_color_to_allegro<ImageTraits, 24>(*src_it, palette))); bmp_address += 3; ++src_it; } _y++; } break; case 32: _x <<= 2; for (y=0; y<h; ++y) { bmp_address = bmp_write_line(bmp, _y)+_x; for (x=0; x<w; ++x) { ASSERT(src_it != src_end); bmp_write32(bmp_address, (convert_color_to_allegro<ImageTraits, 32>(*src_it, palette))); bmp_address += 4; ++src_it; } _y++; } break; }