from other image
from other image
from size, element info and data
from size, channel count, component type and data
copy ctor
fill data zeros
return line index by coordinate
access to pixel
image data size
get copy of image
get immutable copy of image
cast data to T[]
use external memory (not copy)
import std.stdio; auto a = Image( ivec2(3,3), 3, DataType.UBYTE ); 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 == Image.load( b.dump() ) ); assert( b == b.dup ); assert( b.data == b.idup.data.dup ); a = b; assert( b == a ); assert( a == Image.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 = Image( ivec2(3,3), ElemInfo( 1, DataType.UBYTE ), to!(ubyte[])([ 1,2,3,4,5,6,7,8,9 ]) ); auto b = Image(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 Image(a); assert( c.pixel!ubyte(0,0) == 2 );
auto a = Image( ivec!1(3), 1, DataType.UBYTE, 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 = Image(a); b.size.length = 2; b.size[1] = 1; assert( b.size[0] == 3 ); assert( b.size[1] == 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 = Image(a); c.size.length = 2; c.size = ivec2(1,3); assert( c.size[0] == 1 ); assert( c.size[1] == 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[0] == 2 ); assert( c.size[1] == 2 );
auto a = Image( ivec2(3,3), 2, DataType.FLOAT ); 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) );
use external memory
float[] data = [ 1.0, 2, 3, 4 ]; auto img = Image.external( ivec2(2,2), 1, DataType.FLOAT, data ); img.pixel!float(0,0) = 8.0f; assert( data[0] == 8.0f );
Image img; assert( img.size.length == 0 ); assert( img.data.length == 0 ); img.size = ivec2(3,3); img.info = ElemInfo( 3, DataType.NORM_FIXED ); img.clear(); assert( img.data.length == 27 * float.sizeof ); assert( img.info.bpe == 3 * float.sizeof ); img.pixel!vec3(0,1) = vec3( .2,.1,.3 ); assert( img.pixel!vec3(0,1) == vec3(.2,.1,.3) ); auto di = Image.load( img.dump() ); assert( di.size == img.size ); assert( di.info == img.info ); assert( di.data == img.data ); auto ii = immutable(Image)( 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(Image).load( ii.dump() ); static assert( is( typeof(dii) == Image ) ); assert( dii.size == img.size ); assert( dii.info == img.info ); assert( dii.data == img.data ); auto dd = ii.dup; static assert( is( typeof(dd) == Image ) ); 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(Image) ) ); 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 = Image( ivec2(3,3), 2, DataType.FLOAT, 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.type == 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; assertEq( constdata, imdata ); assert( is( typeof(constdata) == const(vec2)[] ) );
assert( mustExcept({ Image( ivec2(3,3), ElemInfo(3,DataType.UBYTE), [ 1, 2, 3 ] ); }) ); auto dt = [ vec2(1,0), vec2(0,1) ]; assert( mustExcept({ Image( ivec2(3,3), 2, DataType.FLOAT, dt ); }) ); auto img = Image( ivec2(3,3), ElemInfo( 3, DataType.NORM_FIXED ) ); assert( mustExcept({ auto d = img.mapAs!vec2; }) ); assert( !mustExcept({ img.pixel!vec3(1,0) = vec3(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); }) );