Skip to content
Snippets Groups Projects
Commit 8c832aad authored by Paul McCarthy's avatar Paul McCarthy :mountain_bicyclist:
Browse files

Merge branch 'rf/image_save' into 'master'

Rf/image save

See merge request fsl/fslpy!188
parents 1e7ac7d1 686cde3a
No related branches found
No related tags found
No related merge requests found
Pipeline #4888 failed
Copyright 2016-2019 University of Oxford, Oxford, UK Copyright 2016-2020 University of Oxford, Oxford, UK
The fslpy library The fslpy library
Copyright 2016-2019 University of Oxford, Oxford, UK. Copyright 2016-2020 University of Oxford, Oxford, UK.
Licensed under the Apache License, Version 2.0 (the "License"); Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License. you may not use this file except in compliance with the License.
......
...@@ -1362,6 +1362,10 @@ class Image(Nifti): ...@@ -1362,6 +1362,10 @@ class Image(Nifti):
def save(self, filename=None): def save(self, filename=None):
"""Saves this ``Image`` to the specifed file, or the :attr:`dataSource` """Saves this ``Image`` to the specifed file, or the :attr:`dataSource`
if ``filename`` is ``None``. if ``filename`` is ``None``.
Note that calling ``save`` on an image with modified data will cause
the entire image data to be loaded into memory if it has not already
been loaded.
""" """
import fsl.utils.imcp as imcp import fsl.utils.imcp as imcp
......
...@@ -187,6 +187,15 @@ def _test_image_indexed_save(threaded): ...@@ -187,6 +187,15 @@ def _test_image_indexed_save(threaded):
# make sure the data range is correct # make sure the data range is correct
assert img.dataRange == (0, 40) assert img.dataRange == (0, 40)
# Save the image to a different
# location (no changes to data though)
filename = op.join(testdir, 'image2.nii.gz')
img.save(filename)
# known data range
# should not have changed
assert img.dataRange == (0, 40)
# change some data # change some data
data = np.zeros((100, 100, 100)) data = np.zeros((100, 100, 100))
data[:] = 45 data[:] = 45
...@@ -195,35 +204,21 @@ def _test_image_indexed_save(threaded): ...@@ -195,35 +204,21 @@ def _test_image_indexed_save(threaded):
if threaded: if threaded:
img.getImageWrapper().getTaskThread().waitUntilIdle() img.getImageWrapper().getTaskThread().waitUntilIdle()
# save the image # save the image - this will
# cause the image data to be
# loaded into memory
img.save() img.save()
assert img.dataRange == (0, 45)
# access the data - index should
# get rebuilt to this point
img[..., 0]
img[..., 40]
if threaded: if threaded:
img.getImageWrapper().getTaskThread().waitUntilIdle() img.getImageWrapper().getTaskThread().waitUntilIdle()
# make sure we got the modified data
assert img.dataRange == (0, 45)
img[..., 49]
if threaded:
img.getImageWrapper().getTaskThread().waitUntilIdle()
# make sure we got the modified data
assert img.dataRange == (0, 49) assert img.dataRange == (0, 49)
assert np.all(img[..., 40] == data)
# Finally, reload, and verify the change # Finally, reload, and verify the change
img = fslimage.Image(filename) img = fslimage.Image(filename)
assert np.all(img[..., 40] == 45) assert np.all(img[..., 40] == data)
@pytest.mark.longtest @pytest.mark.longtest
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment