X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fgraphics%2Fimage.cpp;h=46c2b3fab3c29f0ce952133b1d55966531252e94;hb=8926837f7e81d0007d8cb94db701c4845a0a01a3;hp=6a20178c5d4a5d115ed1748100374d13a3e03f38;hpb=1b8d9d3ea7152ea2e25ff252bc100aee2a6d6218;p=libs%2Fgui.git diff --git a/source/graphics/image.cpp b/source/graphics/image.cpp index 6a20178..46c2b3f 100644 --- a/source/graphics/image.cpp +++ b/source/graphics/image.cpp @@ -1,6 +1,7 @@ #ifdef WITH_DEVIL #include #endif +#include #include #include #include "image.h" @@ -46,11 +47,12 @@ Image::~Image() void Image::load_file(const string &fn) { + string ext = FS::extpart(fn); #ifdef WITH_LIBPNG - if(fn.size()>4 && !fn.compare(fn.size()-4, 4, ".png")) + if(ext==".png") { IO::BufferedFile file(fn); - load_png(file, *priv); + load_png(file, *priv, 0, 0); } else #endif @@ -64,25 +66,22 @@ void Image::load_file(const string &fn) (void)fn; } -void Image::load_memory(const void *data, unsigned size) +void Image::load_io(IO::Base &io) { + char sig_buf[8]; + unsigned sig_len = io.read(sig_buf, sizeof(sig_buf)); #ifdef WITH_LIBPNG - if(size>=8 && is_png(data, 8)) - { - IO::Memory mem(reinterpret_cast(data), size); - load_png(mem, *priv); - } + if(sig_len==sizeof(sig_buf) && is_png(sig_buf, sig_len)) + load_png(io, *priv, sig_buf, sig_len); else #endif { #ifdef WITH_DEVIL - load_devil_mem(data, size, *priv); + load_devil_io(io, *priv, sig_buf, sig_len); #else throw unsupported_image_format("DevIL needed for non-PNG images"); #endif } - (void)data; - (void)size; } PixelFormat Image::get_format() const