#include <stdexcept>
#include <string>
-#include <msp/io/base.h>
+#include <msp/io/seekable.h>
#include "pixelformat.h"
namespace Msp {
namespace Graphics {
-class unsupported_image_format: public std::runtime_error
-{
-public:
- unsupported_image_format(const std::string &w): std::runtime_error(w) { }
- virtual ~unsupported_image_format() throw() { }
-};
-
-class bad_image_data: public std::runtime_error
-{
-public:
- bad_image_data(const std::string &w): std::runtime_error(w) { }
- virtual ~bad_image_data() throw() { }
-};
-
+class ImageLoader;
class Image
{
public:
- struct Private;
+ struct Data
+ {
+ PixelFormat fmt;
+ unsigned width;
+ unsigned height;
+ unsigned stride;
+ char *data;
+
+ Data();
+ Data(const Data &);
+ Data &operator=(const Data &);
+ ~Data();
+ };
private:
- Private *priv;
+ Data data;
public:
- Image();
- ~Image();
-
void load_file(const std::string &);
- void load_io(IO::Base &);
- PixelFormat get_format() const;
- unsigned get_width() const;
- unsigned get_height() const;
- const void *get_data() const;
+ void load_io(IO::Seekable &);
+ void load(ImageLoader &);
+
+ PixelFormat get_format() const { return data.fmt; }
+ unsigned get_width() const { return data.width; }
+ unsigned get_height() const { return data.height; }
+ unsigned get_stride() const { return data.stride; }
+ const void *get_data() const { return data.data; }
};
} // namespace Graphics