Я разрабатываю библиотеку изображений и борюсь с типом данных изображения
Поскольку изображения могут иметь переменные типы данных (8 бит на пиксель, 16 бит на пиксель), я подумал о реализации указателя данных моего изображения на
void* pimage_data;
однако void * приводит ко всем видам гадости, включая арифметику уродливых указателей, таких как
pimage_data = &((unsigned char*)pimage_parent->m_pdata)[offset_y * pimage_parent->m_pitch + offset_x];
Я подозреваю, что с этим что-то не так, поскольку, когда я передаю его другому методу,
CImage* roi = CImage::create_image(size_x, size_y, pimage_parent->m_data_type, pimage_data);
CImage* CImage::create_image(int size_x, int size_y, E_DATA_TYPE data_type, void* pimage)
{
assert(size_x > 0);
assert(size_y > 0);
CImage* image = new CImage(size_x, size_y, data_type);
image->m_pdata = pimage;
return image;
}
новый возврат std::bad_alloc
Теперь я должен согласиться с тем, что void * не ведет непосредственно к bad_alloc, но я уверен, что здесь что-то не так. Есть намеки?
EDIT:
CImage почти ничего не делает
CImage::CImage(int size_x, int size_y, E_DATA_TYPE data_type)
{
assert(size_x > 0);
assert(size_y > 0);
// Copy of the parameter to the class members
this->m_size_x = size_x;
this->m_size_y = size_y;
this->m_data_type = data_type;
this->m_pitch = size_x;
// The ctor simply create a standalone image for now
this->m_pimage_child = NULL;
this->m_pimage_parent = NULL;
}
Размеры x: 746, y: 325