X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=src%2FMRI.hs;h=d7410912f43ef5431376780e0123f754ac3aeb16;hb=6fd38e6a2a1e588c9026bfe5a1f73c321d027faa;hp=a246bf53d6cca7202fe25c921c1b6c183ec34965;hpb=5a54d42597d60ee5d9f3976a95a063849dd26e7c;p=spline3.git diff --git a/src/MRI.hs b/src/MRI.hs index a246bf5..d741091 100644 --- a/src/MRI.hs +++ b/src/MRI.hs @@ -20,11 +20,13 @@ where import Data.Word import Data.Bits -import Data.Array.Repa as R -import Data.Array.Repa.Repr.Unboxed as R -import Data.Array.Repa.IO.Binary as R +import Data.Array.Repa as R +import Data.Array.Repa.Eval as R (now) +import Data.Array.Repa.Repr.Unboxed as R +import Data.Array.Repa.IO.Binary as R import Data.Array.Repa.Algorithms.ColorRamp as R -import Data.Array.Repa.IO.BMP as R (writeImageToBMP) +import Data.Array.Repa.Operators.Traversal as R (unsafeTraverse) +import Data.Array.Repa.IO.BMP as R (writeImageToBMP) import Values @@ -64,7 +66,8 @@ type ColorData sh = Array U sh RGB read_word16s :: FilePath -> IO RawData3D read_word16s path = do arr <- R.readArrayFromStorableFile path mri_shape - now $ R.copy arr + c <- R.copyP arr + now $ c @@ -121,9 +124,13 @@ write_word16s = R.writeArrayToStorableFile -values_to_colors :: (Shape sh) => (Values sh) -> (ColorData sh) +-- +-- Instead of IO, we could get away with a generic monad 'm' +-- here. However, /we/ only call this function from within IO. +-- +values_to_colors :: (Shape sh) => (Values sh) -> IO (ColorData sh) values_to_colors arr = - R.compute $ R.map (truncate_rgb . ramp_it) arr + R.computeUnboxedP $ R.map (truncate_rgb . ramp_it) arr where ramp_it :: Double -> (Double, Double, Double) ramp_it x = @@ -147,8 +154,9 @@ z_slice n arr = write_values_slice_to_bitmap :: Values2D -> FilePath -> IO () -write_values_slice_to_bitmap v3d path = +write_values_slice_to_bitmap v3d path = do + values <- R.computeUnboxedP $ R.map fromIntegral arr_bracketed + colors <- values_to_colors $ values R.writeImageToBMP path colors where arr_bracketed = bracket_array v3d - colors = values_to_colors $ R.compute $ R.map fromIntegral arr_bracketed