diff --git a/src/raster/conversion_alleg.cpp b/src/raster/conversion_alleg.cpp index e2301d47d..5a0f89d84 100644 --- a/src/raster/conversion_alleg.cpp +++ b/src/raster/conversion_alleg.cpp @@ -25,8 +25,6 @@ #include "raster/algo.h" #include "raster/blend.h" #include "raster/color_scales.h" -#include "raster/image.h" -#include "raster/image_impl.h" #include "raster/palette.h" #include "raster/rgbmap.h" @@ -34,259 +32,6 @@ namespace raster { -namespace { - -template -int convert_color_to_allegro(color_t color, const Palette* palette) { - static_assert(false && sizeof(ImageTraits), "Invalid color conversion"); -} - -template<> -int convert_color_to_allegro(color_t c, const Palette* palette) { - return makecol8(rgba_getr(c), rgba_getg(c), rgba_getb(c)); -} -template<> -int convert_color_to_allegro(color_t c, const Palette* palette) { - return makecol15(rgba_getr(c), rgba_getg(c), rgba_getb(c)); -} -template<> -int convert_color_to_allegro(color_t c, const Palette* palette) { - return makecol16(rgba_getr(c), rgba_getg(c), rgba_getb(c)); -} -template<> -int convert_color_to_allegro(color_t c, const Palette* palette) { - return makecol24(rgba_getr(c), rgba_getg(c), rgba_getb(c)); -} -template<> -int convert_color_to_allegro(color_t c, const Palette* palette) { - return makeacol32(rgba_getr(c), rgba_getg(c), rgba_getb(c), rgba_geta(c)); -} - -template<> -int convert_color_to_allegro(color_t c, const Palette* palette) { - return makecol8(graya_getv(c), graya_getv(c), graya_getv(c)); -} -template<> -int convert_color_to_allegro(color_t c, const Palette* palette) { - return makecol15(graya_getv(c), graya_getv(c), graya_getv(c)); -} -template<> -int convert_color_to_allegro(color_t c, const Palette* palette) { - return makecol16(graya_getv(c), graya_getv(c), graya_getv(c)); -} -template<> -int convert_color_to_allegro(color_t c, const Palette* palette) { - return makecol24(graya_getv(c), graya_getv(c), graya_getv(c)); -} -template<> -int convert_color_to_allegro(color_t c, const Palette* palette) { - return makeacol32(graya_getv(c), graya_getv(c), graya_getv(c), graya_geta(c)); -} - -template<> -int convert_color_to_allegro(color_t color, const Palette* palette) { - return color; -} -template<> -int convert_color_to_allegro(color_t color, const Palette* palette) { - color_t c = palette->getEntry(color); - return makecol15(rgba_getr(c), rgba_getg(c), rgba_getb(c)); -} -template<> -int convert_color_to_allegro(color_t color, const Palette* palette) { - color_t c = palette->getEntry(color); - return makecol16(rgba_getr(c), rgba_getg(c), rgba_getb(c)); -} -template<> -int convert_color_to_allegro(color_t color, const Palette* palette) { - color_t c = palette->getEntry(color); - return makecol24(rgba_getr(c), rgba_getg(c), rgba_getb(c)); -} -template<> -int convert_color_to_allegro(color_t color, const Palette* palette) { - color_t c = palette->getEntry(color); - return makeacol32(rgba_getr(c), rgba_getg(c), rgba_getb(c), 255); -} - -template<> -int convert_color_to_allegro(color_t color, const Palette* palette) { - return color; -} -template<> -int convert_color_to_allegro(color_t color, const Palette* palette) { - color_t c = palette->getEntry(color); - return makecol15(rgba_getr(c), rgba_getg(c), rgba_getb(c)); -} -template<> -int convert_color_to_allegro(color_t color, const Palette* palette) { - color_t c = palette->getEntry(color); - return makecol16(rgba_getr(c), rgba_getg(c), rgba_getb(c)); -} -template<> -int convert_color_to_allegro(color_t color, const Palette* palette) { - color_t c = palette->getEntry(color); - return makecol24(rgba_getr(c), rgba_getg(c), rgba_getb(c)); -} -template<> -int convert_color_to_allegro(color_t color, const Palette* palette) { - color_t c = palette->getEntry(color); - return makeacol32(rgba_getr(c), rgba_getg(c), rgba_getb(c), rgba_geta(c)); -} - -template -void convert_image_to_allegro_templ(const Image* image, BITMAP* bmp, int _x, int _y, const Palette* palette) -{ - const LockImageBits bits(image); - typename LockImageBits::const_iterator src_it = bits.begin(); -#ifdef _DEBUG - typename LockImageBits::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; yline[_y]; - - for (x=0; x>2), - (convert_color_to_allegro(*src_it, palette))); - - ++src_it; - address++; - } - - _y++; - } - } - else { -#endif - for (y=0; y(*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(*src_it, palette))); - - bmp_address += 2; - ++src_it; - } - - _y++; - } - break; - - case 16: - _x <<= 1; - - for (y=0; y(*src_it, palette))); - - bmp_address += 2; - ++src_it; - } - - _y++; - } - break; - - case 24: - _x *= 3; - - for (y=0; y(*src_it, palette))); - - bmp_address += 3; - ++src_it; - } - - _y++; - } - break; - - case 32: - _x <<= 2; - - for (y=0; y(*src_it, palette))); - - bmp_address += 4; - ++src_it; - } - - _y++; - } - break; - } - - bmp_unwrite_line(bmp); -} - -} // anonymous namespace - -void convert_image_to_allegro(const Image* image, BITMAP* bmp, int x, int y, const Palette* palette) -{ - switch (image->pixelFormat()) { - case IMAGE_RGB: convert_image_to_allegro_templ(image, bmp, x, y, palette); break; - case IMAGE_GRAYSCALE: convert_image_to_allegro_templ(image, bmp, x, y, palette); break; - case IMAGE_INDEXED: convert_image_to_allegro_templ(image, bmp, x, y, palette); break; - case IMAGE_BITMAP: convert_image_to_allegro_templ(image, bmp, x, y, palette); break; - } -} - void convert_palette_to_allegro(const Palette* palette, RGB* rgb) { int i; diff --git a/src/raster/conversion_alleg.h b/src/raster/conversion_alleg.h index cad42a548..afa4c7ab9 100644 --- a/src/raster/conversion_alleg.h +++ b/src/raster/conversion_alleg.h @@ -22,13 +22,9 @@ #include -struct BITMAP; - namespace raster { - class Image; class Palette; - void convert_image_to_allegro(const Image* image, BITMAP* bmp, int x, int y, const Palette* palette); void convert_palette_to_allegro(const Palette* palette, RGB* rgb); void convert_palette_from_allegro(const RGB* rgb, Palette* palette);