allow external image data - refs #2002
Conflicts: include/mapnik/image_data.hpp tests/cpp_tests/image_io_test.cpp
This commit is contained in:
parent
7cc87c2196
commit
cc874364b2
2 changed files with 34 additions and 4 deletions
|
@ -39,9 +39,10 @@ class ImageData
|
||||||
public:
|
public:
|
||||||
typedef T pixel_type;
|
typedef T pixel_type;
|
||||||
|
|
||||||
ImageData(int width,int height)
|
ImageData(int width, int height)
|
||||||
: width_(static_cast<unsigned>(width)),
|
: width_(static_cast<unsigned>(width)),
|
||||||
height_(static_cast<unsigned>(height))
|
height_(static_cast<unsigned>(height)),
|
||||||
|
owns_data_(true)
|
||||||
{
|
{
|
||||||
if (width < 0)
|
if (width < 0)
|
||||||
{
|
{
|
||||||
|
@ -55,9 +56,26 @@ public:
|
||||||
if (pData_) std::memset(pData_,0,sizeof(T)*width_*height_);
|
if (pData_) std::memset(pData_,0,sizeof(T)*width_*height_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ImageData(int width, int height, T * data)
|
||||||
|
: width_(static_cast<unsigned>(width)),
|
||||||
|
height_(static_cast<unsigned>(height)),
|
||||||
|
owns_data_(false),
|
||||||
|
pData_(data)
|
||||||
|
{
|
||||||
|
if (width < 0)
|
||||||
|
{
|
||||||
|
throw std::runtime_error("negative width not allowed for image_data");
|
||||||
|
}
|
||||||
|
if (height < 0)
|
||||||
|
{
|
||||||
|
throw std::runtime_error("negative height not allowed for image_data");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ImageData(ImageData<T> const& rhs)
|
ImageData(ImageData<T> const& rhs)
|
||||||
:width_(rhs.width_),
|
:width_(rhs.width_),
|
||||||
height_(rhs.height_),
|
height_(rhs.height_),
|
||||||
|
owns_data_(true),
|
||||||
pData_((rhs.width_!=0 && rhs.height_!=0)?
|
pData_((rhs.width_!=0 && rhs.height_!=0)?
|
||||||
static_cast<T*>(::operator new(sizeof(T)*rhs.width_*rhs.height_)) :0)
|
static_cast<T*>(::operator new(sizeof(T)*rhs.width_*rhs.height_)) :0)
|
||||||
{
|
{
|
||||||
|
@ -160,14 +178,18 @@ public:
|
||||||
|
|
||||||
inline ~ImageData()
|
inline ~ImageData()
|
||||||
{
|
{
|
||||||
::operator delete(pData_),pData_=0;
|
if (owns_data_)
|
||||||
|
{
|
||||||
|
::operator delete(pData_),pData_=0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
unsigned width_;
|
unsigned width_;
|
||||||
unsigned height_;
|
unsigned height_;
|
||||||
|
bool owns_data_;
|
||||||
T *pData_;
|
T *pData_;
|
||||||
ImageData& operator=(const ImageData&);
|
ImageData& operator=(ImageData const&);
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef ImageData<unsigned> image_data_32;
|
typedef ImageData<unsigned> image_data_32;
|
||||||
|
|
|
@ -21,6 +21,14 @@ int main(int argc, char** argv)
|
||||||
boost::optional<std::string> type;
|
boost::optional<std::string> type;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
mapnik::image_data_32 im(256,256);
|
||||||
|
unsigned char* bytes = im.getBytes();
|
||||||
|
mapnik::image_data_32 * im_ptr = new mapnik::image_data_32(256,256,(unsigned int *)bytes);
|
||||||
|
unsigned char* same_bytes = im_ptr->getBytes();
|
||||||
|
BOOST_TEST(bytes == same_bytes);
|
||||||
|
delete im_ptr;
|
||||||
|
BOOST_TEST(bytes == same_bytes);
|
||||||
|
|
||||||
BOOST_TEST(set_working_dir(args));
|
BOOST_TEST(set_working_dir(args));
|
||||||
|
|
||||||
#if defined(HAVE_JPEG)
|
#if defined(HAVE_JPEG)
|
||||||
|
|
Loading…
Reference in a new issue