1 // This is core/vil/vil_crop.cxx
2 //:
3 // \file
4 // \author Ian Scott.
5 //
6 //-----------------------------------------------------------------------------
7 
8 #include "vil_crop.h"
9 #include <cassert>
10 #ifdef _MSC_VER
11 #  include "vcl_msvc_warnings.h"
12 #endif
13 #include "vil/vil_exception.h"
14 
15 
16 vil_image_resource_sptr
vil_crop(const vil_image_resource_sptr & src,unsigned i0,unsigned n_i,unsigned j0,unsigned n_j)17 vil_crop(const vil_image_resource_sptr & src, unsigned i0, unsigned n_i, unsigned j0, unsigned n_j)
18 {
19   return new vil_crop_image_resource(src, i0, n_i, j0, n_j);
20 }
21 
22 
vil_crop_image_resource(vil_image_resource_sptr const & gi,unsigned i0,unsigned n_i,unsigned j0,unsigned n_j)23 vil_crop_image_resource::vil_crop_image_resource(vil_image_resource_sptr const & gi,
24                                                  unsigned i0,
25                                                  unsigned n_i,
26                                                  unsigned j0,
27                                                  unsigned n_j)
28   : src_(gi)
29   , i0_(i0)
30   , ni_(n_i)
31   , j0_(j0)
32   , nj_(n_j)
33 {
34   assert(i0 + n_i <= src_->ni() && j0 + n_j <= src_->nj());
35 }
36 
37 vil_image_view_base_sptr
get_copy_view(unsigned i0,unsigned n_i,unsigned j0,unsigned n_j) const38 vil_crop_image_resource::get_copy_view(unsigned i0, unsigned n_i, unsigned j0, unsigned n_j) const
39 {
40   if (i0 + n_i > ni() || j0 + n_j > nj())
41   {
42     vil_exception_warning(vil_exception_out_of_bounds("vil_crop_image_resource::get_copy_view"));
43     return nullptr;
44   }
45   return src_->get_copy_view(i0 + i0_, n_i, j0 + j0_, n_j);
46 }
47 
48 vil_image_view_base_sptr
get_view(unsigned i0,unsigned n_i,unsigned j0,unsigned n_j) const49 vil_crop_image_resource::get_view(unsigned i0, unsigned n_i, unsigned j0, unsigned n_j) const
50 {
51   if (i0 + n_i > ni() || j0 + n_j > nj())
52   {
53     vil_exception_warning(vil_exception_out_of_bounds("vil_crop_image_resource::get_view"));
54     return nullptr;
55   }
56   return src_->get_view(i0 + i0_, n_i, j0 + j0_, n_j);
57 }
58