- (s:_) <- getArgs
- let scale = read s :: Int
- let zoom_factor = (1, scale, scale)
- let out_file = "output.bmp"
- arr <- read_word16s in_file
- let arr' = swap_bytes arr
- let arrInv = flip_x $ flip_y arr'
- let arrSlice = z_slice3 50 arrInv
- let dbl_data = R.map fromIntegral arrSlice
- let g = make_grid 1 dbl_data
- let output = zoom g zoom_factor
- let arrBrack = bracket_array output
- print $ "arrBrack extent:" ++ (show $ R.extent arrBrack)
- let arrBrack' = z_slice 1 arrBrack
- print $ "arrBrack' extent:" ++ (show $ R.extent arrBrack')
- let mri_slice2d = drop_z $ zoom_shape zoom_factor mri_slice3d
- let colors = values_to_colors $ R.reshape mri_slice2d
- $ R.map fromIntegral arrBrack'
- let routput = R.map (\(red, _, _) -> red) colors
- let goutput = R.map (\(_, green, _) -> green) colors
- let boutput = R.map (\(_, _, blue) -> blue) colors
- R.writeComponentsToBMP out_file routput goutput boutput
-
-
-in_file :: FilePath
-in_file = "./data/mri.bin"
-
-main3d :: IO ()
-main3d = do
- (s:_) <- getArgs
- let scale = read s :: Int
+ args@Args{..} <- apply_args
+ -- validate_args will simply exit if there's a problem.
+ validate_args args
+
+ -- The first thing we do is set the number of processors. We get the
+ -- number of processors (cores) in the machine with
+ -- getNumProcessors, and set it with setNumCapabilities. This is so
+ -- we don't have to pass +RTS -Nfoo on the command line every time.
+ num_procs <- getNumProcessors
+ setNumCapabilities num_procs
+
+ -- Determine whether we're doing 2d or 3d. If we're given a slice,
+ -- assume 2d.
+ let shape = (R.Z R.:. depth R.:. height R.:. width) :: R.DIM3
+
+ if (isJust slice) then
+ main2d args shape
+ else
+ main3d args shape
+
+ exitSuccess
+
+ where
+
+
+
+main3d :: Args -> R.DIM3 -> IO ()
+main3d Args{..} shape = do