Skip to content

Commit 7d6aa74

Browse files
N-Dekkerdzenanz
authored andcommitted
STYLE: Declare PyBuffer variables for number of pixels and length const
Using `itk::ImageRegion::GetNumberOfPixels()` and `itk::Size::CalculateProductOfElements()`. Also adjusted the type of `numberOfComponents` according to the return type of `itk::Image::GetNumberOfComponentsPerPixel()`.
1 parent 948e075 commit 7d6aa74

File tree

1 file changed

+6
-15
lines changed

1 file changed

+6
-15
lines changed

Modules/Bridge/NumPy/include/itkPyBuffer.hxx

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,6 @@ PyBuffer<TImage>::_GetArrayViewFromImage(ImageType * image)
3232
{
3333
Py_buffer pyBuffer{};
3434

35-
Py_ssize_t len = 1;
36-
3735
if (!image)
3836
{
3937
throw std::runtime_error("Input image is null");
@@ -47,16 +45,9 @@ PyBuffer<TImage>::_GetArrayViewFromImage(ImageType * image)
4745
void * itkImageBuffer = buffer;
4846

4947
// Computing the length of data
50-
const int numberOfComponents = image->GetNumberOfComponentsPerPixel();
51-
SizeType size = image->GetBufferedRegion().GetSize();
52-
53-
for (unsigned int dim = 0; dim < ImageDimension; ++dim)
54-
{
55-
len *= size[dim];
56-
}
57-
58-
len *= numberOfComponents;
59-
len *= sizeof(ComponentType);
48+
const unsigned int numberOfComponents = image->GetNumberOfComponentsPerPixel();
49+
const SizeValueType numberOfPixels = image->GetBufferedRegion().GetNumberOfPixels();
50+
const auto len = static_cast<Py_ssize_t>(numberOfPixels * numberOfComponents * sizeof(ComponentType));
6051

6152
PyBuffer_FillInfo(&pyBuffer, nullptr, itkImageBuffer, len, 0, PyBUF_CONTIG);
6253
return PyMemoryView_FromBuffer(&pyBuffer);
@@ -69,8 +60,7 @@ PyBuffer<TImage>::_GetImageViewFromArray(PyObject * arr, PyObject * shape, PyObj
6960
{
7061
Py_buffer pyBuffer{};
7162

72-
SizeType size;
73-
SizeValueType numberOfPixels = 1;
63+
SizeType size;
7464

7565
if (PyObject_GetBuffer(arr, &pyBuffer, PyBUF_ND | PyBUF_ANY_CONTIGUOUS) == -1)
7666
{
@@ -93,9 +83,10 @@ PyBuffer<TImage>::_GetImageViewFromArray(PyObject * arr, PyObject * shape, PyObj
9383
{
9484
PyObject * const item = PySequence_Fast_GET_ITEM(shapeseq, i);
9585
size[i] = static_cast<SizeValueType>(PyInt_AsLong(item));
96-
numberOfPixels *= size[i];
9786
}
9887

88+
const SizeValueType numberOfPixels = size.CalculateProductOfElements();
89+
9990
const bool isFortranContiguous = pyBuffer.strides != nullptr && pyBuffer.itemsize == pyBuffer.strides[0];
10091

10192
const size_t len = numberOfPixels * numberOfComponents * sizeof(ComponentType);

0 commit comments

Comments
 (0)