画像ライブラリを開発していて、画像データデータ型に苦労しています
画像は可変のデータ型(ピクセルあたり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に直接つながるわけではないことに同意する必要がありますが、ここで何か問題があると確信しています。ヒントはありますか?
編集:
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です