condition for Mat step
This commit is contained in:
parent
9493a4ec4e
commit
af0040eab0
@ -372,7 +372,7 @@ Mat::Mat(int _rows, int _cols, int _type, void* _data, size_t _step)
|
|||||||
data((uchar*)_data), datastart((uchar*)_data), dataend(0), datalimit(0),
|
data((uchar*)_data), datastart((uchar*)_data), dataend(0), datalimit(0),
|
||||||
allocator(0), u(0), size(&rows)
|
allocator(0), u(0), size(&rows)
|
||||||
{
|
{
|
||||||
size_t esz = CV_ELEM_SIZE(_type);
|
size_t esz = CV_ELEM_SIZE(_type), esz1 = CV_ELEM_SIZE1(_type);
|
||||||
size_t minstep = cols * esz;
|
size_t minstep = cols * esz;
|
||||||
if( _step == AUTO_STEP )
|
if( _step == AUTO_STEP )
|
||||||
{
|
{
|
||||||
@ -383,6 +383,12 @@ Mat::Mat(int _rows, int _cols, int _type, void* _data, size_t _step)
|
|||||||
{
|
{
|
||||||
if( rows == 1 ) _step = minstep;
|
if( rows == 1 ) _step = minstep;
|
||||||
CV_DbgAssert( _step >= minstep );
|
CV_DbgAssert( _step >= minstep );
|
||||||
|
|
||||||
|
if (_step % esz1 != 0)
|
||||||
|
{
|
||||||
|
CV_Error(Error::BadStep, "Step must be a multiple of esz1");
|
||||||
|
}
|
||||||
|
|
||||||
flags |= _step == minstep ? CONTINUOUS_FLAG : 0;
|
flags |= _step == minstep ? CONTINUOUS_FLAG : 0;
|
||||||
}
|
}
|
||||||
step[0] = _step;
|
step[0] = _step;
|
||||||
@ -397,7 +403,7 @@ Mat::Mat(Size _sz, int _type, void* _data, size_t _step)
|
|||||||
data((uchar*)_data), datastart((uchar*)_data), dataend(0), datalimit(0),
|
data((uchar*)_data), datastart((uchar*)_data), dataend(0), datalimit(0),
|
||||||
allocator(0), u(0), size(&rows)
|
allocator(0), u(0), size(&rows)
|
||||||
{
|
{
|
||||||
size_t esz = CV_ELEM_SIZE(_type);
|
size_t esz = CV_ELEM_SIZE(_type), esz1 = CV_ELEM_SIZE1(_type);
|
||||||
size_t minstep = cols*esz;
|
size_t minstep = cols*esz;
|
||||||
if( _step == AUTO_STEP )
|
if( _step == AUTO_STEP )
|
||||||
{
|
{
|
||||||
@ -408,6 +414,12 @@ Mat::Mat(Size _sz, int _type, void* _data, size_t _step)
|
|||||||
{
|
{
|
||||||
if( rows == 1 ) _step = minstep;
|
if( rows == 1 ) _step = minstep;
|
||||||
CV_DbgAssert( _step >= minstep );
|
CV_DbgAssert( _step >= minstep );
|
||||||
|
|
||||||
|
if (_step % esz1 != 0)
|
||||||
|
{
|
||||||
|
CV_Error(Error::BadStep, "Step must be a multiple of esz1");
|
||||||
|
}
|
||||||
|
|
||||||
flags |= _step == minstep ? CONTINUOUS_FLAG : 0;
|
flags |= _step == minstep ? CONTINUOUS_FLAG : 0;
|
||||||
}
|
}
|
||||||
step[0] = _step;
|
step[0] = _step;
|
||||||
|
@ -282,7 +282,7 @@ static inline void setSize( Mat& m, int _dims, const int* _sz,
|
|||||||
if( !_sz )
|
if( !_sz )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
size_t esz = CV_ELEM_SIZE(m.flags), total = esz;
|
size_t esz = CV_ELEM_SIZE(m.flags), esz1 = CV_ELEM_SIZE1(m.flags), total = esz;
|
||||||
int i;
|
int i;
|
||||||
for( i = _dims-1; i >= 0; i-- )
|
for( i = _dims-1; i >= 0; i-- )
|
||||||
{
|
{
|
||||||
@ -291,7 +291,14 @@ static inline void setSize( Mat& m, int _dims, const int* _sz,
|
|||||||
m.size.p[i] = s;
|
m.size.p[i] = s;
|
||||||
|
|
||||||
if( _steps )
|
if( _steps )
|
||||||
|
{
|
||||||
|
if (_steps[i] % esz1 != 0)
|
||||||
|
{
|
||||||
|
CV_Error(Error::BadStep, "Step must be a multiple of esz1");
|
||||||
|
}
|
||||||
|
|
||||||
m.step.p[i] = i < _dims-1 ? _steps[i] : esz;
|
m.step.p[i] = i < _dims-1 ? _steps[i] : esz;
|
||||||
|
}
|
||||||
else if( autoSteps )
|
else if( autoSteps )
|
||||||
{
|
{
|
||||||
m.step.p[i] = total;
|
m.step.p[i] = total;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user