27 #include <boost/lexical_cast.hpp>
33 #include "video/image.h"
34 #include "video/renderbackend.h"
35 #include "video/image_location.h"
36 #include "util/base/fife_stdint.h"
37 #include "util/resource/resource.h"
38 #include "util/base/exception.h"
39 #include "util/log/logger.h"
41 #include "subimage_loader.h"
44 static Logger _log(LM_NATIVE_LOADERS);
46 IResource* SubImageLoader::loadResource(
const ResourceLocation& location) {
47 const ImageLocation* loc =
dynamic_cast<const ImageLocation*
>(&location);
52 Image* r = loc->getParentSource();
57 SDL_Surface* src = r->getSurface();
62 src_rect.x = loc->getXShift();
63 src_rect.y = loc->getYShift();
64 src_rect.w = loc->getWidth();
65 src_rect.h = loc->getHeight();
67 FL_DBG(_log, LMsg(
"subimage_loader")
68 <<
" rect:" << Rect(src_rect.x,src_rect.y,src_rect.w,src_rect.h));
70 uint32_t Amask = src->format->Amask ? AMASK : 0;
71 SDL_Surface* result = SDL_CreateRGBSurface(SDL_SWSURFACE, src_rect.w, src_rect.h, 32,
72 RMASK, GMASK, BMASK, Amask);
73 SDL_FillRect(result, NULL, 0);
74 SDL_SetAlpha(src,0,SDL_ALPHA_OPAQUE);
75 SDL_BlitSurface(src,&src_rect,result,0);
77 Image* image = RenderBackend::instance()->createImage(result);
78 image->setResourceLocation(location);