auto a = Image2( [3,3], ElemInfo( DataType.UBYTE, 3 ) );
assert( a.data.length != 0 );
assert( eq( a.size, [3,3] ) );
a.pixel!bvec3(0,0) = bvec3(1,2,3);
auto b = a;
assert( b == a );
assert( eq( b.pixel!bvec3(0,0), bvec3(1,2,3) ) );
a.pixel!bvec3(1,1) = bvec3(3,4,5);
assert( b != a );
assert( b == Image2.load( b.dump() ) );
assert( b == b.dup );
assert( b.data == b.idup.data.dup );
a = b;
assert( b == a );
assert( a == Image2.load( b.dump() ) );
assert( a == b.dup );
assert( a.data == b.idup.data.dup );
auto crd = ivec2(1,2);
b.pixel!bvec3(crd) = bvec3(5,6,8);
assert( eq( b.pixel!bvec3(1,2), bvec3(5,6,8) ) );
b.clear();
assert( eq( b.pixel!bvec3(1,2), bvec3(0,0,0) ) );
auto a = Image2( [3,3], ElemInfo( DataType.UBYTE, 1 ), to!(ubyte[])([ 1,2,3,4,5,6,7,8,9 ]) );
auto b = Image2(a);
assert( a.pixel!ubyte(0,0) == 1 );
assert( b.pixel!ubyte(0,0) == 1 );
a.pixel!ubyte(0,0) = 2;
assert( a.pixel!ubyte(0,0) == 2 );
assert( b.pixel!ubyte(0,0) == 1 );
auto c = immutable Image2(a);
assert( c.pixel!ubyte(0,0) == 2 );
auto a = Image1( [3], DataType.UBYTE, 1, to!(ubyte[])([ 1,2,3 ]) );
assert( mustExcept!Throwable({ a.pixel!(ubyte)(7) = 0; }) );
assert( !mustExcept({ a.pixel!(ubyte)(0) = 0; }) );
assert( a.pixel!ubyte(0) == 0 );
auto b = Image2(a);
assert( b.header.size.w == 3 );
assert( b.header.size.h == 1 );
assert( b.pixel!ubyte(0,0) == 0 );
assert( b.pixel!ubyte(1,0) == 2 );
assert( mustExcept!Throwable({ b.pixel!ubyte(1,1) = 2; }) );
auto c = Image2(a,0);
assert( c.header.size.w == 1 );
assert( c.header.size.h == 3 );
assert( c.pixel!ubyte(0,0) == 0 );
assert( c.pixel!ubyte(0,1) == 2 );
assert( mustExcept!Throwable({ c.pixel!ubyte(1,1) = 2; }) );
c.size = ivec2(2,2);
assert( c.size.w == 2 );
assert( c.size.h == 2 );
auto a = Image2( [3,3], ElemInfo( DataType.FLOAT, 2 ) );
assert( a.index(1,2) == 7 );
assert( a.index(ivec2(1,2)) == 7 );
a.mapAs!(vec2)[a.index(1,2)] = vec2(1,1);
assert( a.pixel!vec2(1,2) == vec2(1,1) );
a.pixel!vec2(1,2) = vec2(2,2);
assert( a.pixel!vec2(1,2) == vec2(2,2) );
Image2 img;
assert( img.data.length == 0 );
assert( img.data is null );
assert( img.size == SizeVector!2(0,0) );
img.size = ivec2(3,3);
img.info = ElemInfo( DataType.NORM_FIXED, 3 );
img.clear();
assert( img.data.length == 27 * float.sizeof );
assert( img.info.bpe == 3 * float.sizeof );
img.pixel!col3(0,1) = col3( .2,.1,.3 );
assert( img.pixel!vec3(0,1) == vec3(.2,.1,.3) );
auto di = Image2.load( img.dump() );
assert( di.size == img.size );
assert( di.info == img.info );
assert( di.data == img.data );
auto ii = immutable(Image2)( img );
assert( ii.size == img.size );
assert( ii.info == img.info );
assert( ii.data == img.data );
assert( ii.pixel!vec3(0,1) == vec3(.2,.1,.3) );
auto dii = immutable(Image2).load( ii.dump() );
static assert( is( typeof(dii) == Image2 ) );
assert( dii.size == img.size );
assert( dii.info == img.info );
assert( dii.data == img.data );
auto dd = ii.dup;
static assert( is( typeof(dd) == Image2 ) );
assert( dd.size == img.size );
assert( dd.info == img.info );
assert( dd.data == img.data );
auto ddi = ii.idup;
static assert( is( typeof(ddi) == immutable(Image2) ) );
assert( ddi.size == img.size );
assert( ddi.info == img.info );
assert( ddi.data == img.data );
auto data =
[
vec2( 1, 2 ), vec2( 3, 4 ), vec2( 5, 6 ),
vec2( 7, 8 ), vec2( 9, 1 ), vec2( 1, 2 ),
vec2( 2, 3 ), vec2( 4, 5 ), vec2( 6, 7 )
];
auto img = Image2( ivec2(3,3), DataType.FLOAT, 2, data );
assert( img.size == ivec2(3,3) );
assert( img.info.bpe == 2 * float.sizeof );
assert( img.pixel!vec2(1,1) == vec2(9,1) );
assert( img.info.comp == DataType.FLOAT );
auto imdata = img.mapAs!vec2;
assert( data == imdata );
img.clear();
assert( img.pixel!vec2(1,1) == vec2(0,0) );
img.mapAs!(vec2)[] = data[];
imdata = img.mapAs!vec2;
assert( data == imdata );
auto constdata = img.idup.mapAs!vec2;
assert( constdata == imdata );
assert( is( typeof(constdata) == const(vec2)[] ) );
assert( mustExcept({ Image2( [3,3], ElemInfo( DataType.UBYTE, 3 ), [ 1, 2, 3 ] ); }) );
auto dt = [ vec2(1,0), vec2(0,1) ];
assert( mustExcept({ Image2( ivec2(3,3), DataType.FLOAT, 2, dt ); }) );
auto img = Image2( ivec2(3,3), ElemInfo( DataType.NORM_FIXED, 3 ) );
assert( mustExcept({ auto d = img.mapAs!vec2; }) );
assert( !mustExcept({ img.pixel!col3(1,0) = col3(1,1,1); }) );
assert( mustExcept({ img.pixel!vec2(1,0) = vec2(1,1); }) );
static assert( !__traits(compiles, { img.pixel!vec3(4,4) = vec3(1,1); }) );