imGetCopy

copy and repack image from region to new image

imGetCopy
(
string file = __FILE__
size_t line = __LINE__
size_t B
E
)
(,
in Region!(B, E) copy_reg
,,
size_t[2] repack_dim = [0, 1]
)
if (
isIntegral!E
)

Examples

auto a = Image( ivec!1(5), ElemInfo( 2, DataType.FLOAT ) );
a.pixel!vec2(3) = vec2(1,1);
a.pixel!vec2(4) = vec2(2,2);
auto b = imGetCopy( a, Region!(1,int)(3,2) );
assert( b.pixel!vec2(0) == a.pixel!vec2(3) );
assert( b.pixel!vec2(1) == a.pixel!vec2(4) );
ubyte[] imgdata = [
    1, 2, 3, 4,
    5, 6, 7, 8,
    9,10,11,12,
   13,14,15,16
];

auto img = Image( ivec2(4,4), 1, DataType.UBYTE, imgdata );

{
    ubyte[] r = [ 8,12,16, 7,11,15 ];
    assertEq( imGetCopy( img, iRegion2(2,1,2,3), ImRepack.ROT90 ).mapAs!ubyte, r );
}

{
    ubyte[] r = [ 14,10,6, 15,11,7 ];
    assertEq( imGetCopy( img, iRegion2(1,1,2,3), ImRepack.ROT270 ).mapAs!ubyte, r );
}

{
    ubyte[] r= [ 3,2,1, 7,6,5 ];
    assertEq( imGetCopy( img, iRegion2(0,0,3,2), ImRepack.MIRHOR ).mapAs!ubyte, r );
}

{
    ubyte[] r = [ 5,6,7, 1,2,3 ];
    assert( imGetCopy( img, iRegion2(0,0,3,2), ImRepack.MIRVER ).mapAs!ubyte == r );
}
ubyte[] img_data =
[
    1,2,3,
    4,5,6,

    7,8,9,
    10,11,12,
];

ubyte[] d2l0 = [ 1,2,3,4,5,6 ];
ubyte[] d2l1 = [ 7,8,9,10,11,12 ];

ubyte[] d1l0 = [ 1,2,3,7,8,9 ];
ubyte[] d1l1 = [ 4,5,6,10,11,12 ];

ubyte[] d0l0 = [ 1, 4, 7, 10 ];
ubyte[] d0l1 = [ 2, 5, 8, 11 ];

auto img = Image( ivec3(3,2,2), 1, DataType.UBYTE, img_data );

assertEq( imGetCopy( img, CrdRegionD(0,0,0,3,2,1) ).mapAs!ubyte, d2l0 );
assertEq( imGetCopy( img, CrdRegionD(0,0,1,3,2,1) ).mapAs!ubyte, d2l1 );

assertEq( imGetCopy( img, CrdRegionD(0,0,0,3,1,2) ).mapAs!ubyte, d1l0 );
assertEq( imGetCopy( img, CrdRegionD(0,1,0,3,1,2) ).mapAs!ubyte, d1l1 );

assertEq( imGetCopy( img, CrdRegionD(0,0,0,1,2,2) ).mapAs!ubyte, d0l0 );
assertEq( imGetCopy( img, CrdRegionD(1,0,0,1,2,2) ).mapAs!ubyte, d0l1 );
ubyte[] data =
[
    2, 1, 3, 5, 2,
    9, 1, 2, 6, 3,
    2, 5, 2, 9, 1,
    8, 3, 6, 3, 0,
    6, 2, 8, 1, 5
];

ubyte[] datav1 =
[
    1, 2, 6, 3, 0, 0, 0,
    5, 2, 9, 1, 0, 0, 0,
    3, 6, 3, 0, 0, 0, 0,
    2, 8, 1, 5, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0
];

ubyte[] datav2 =
[
    0, 0, 0, 0, 0, 0, 0,
    0, 2, 1, 3, 5, 2, 0,
    0, 9, 1, 2, 6, 3, 0,
    0, 2, 5, 2, 9, 1, 0,
    0, 8, 3, 6, 3, 0, 0,
    0, 6, 2, 8, 1, 5, 0,
    0, 0, 0, 0, 0, 0, 0
];


auto orig = Image( ivec2( 7, 7 ), ElemInfo( 1, DataType.UBYTE ) );
auto im = Image( ivec2( 5, 5 ), 1, DataType.UBYTE, data );

auto res = Image(orig);
imCopy( res, ivec2(-1,-1), im );
assert( res.data == datav1 );

res = Image(orig);
imCopy( res, ivec2(1,1), im );
assert( res.data == datav2 );

Meta