public static GenericImageConstructor Create <TColor>() where TColor : struct, IColor { GenericImageConstructor ctor = new GenericImageConstructor(); ctor.ColorType = typeof(TColor); ctor.ToImage = (iplImage, destructor) => { if (destructor != null) { return(new Image <TColor>(iplImage.ImageData, iplImage.Width, iplImage.Height, iplImage.WidthStep, iplImage, destructor)); } else { return(new Image <TColor>(iplImage.ImageData, iplImage.Width, iplImage.Height, iplImage.WidthStep, iplImage)); } }; return(ctor); }
static ImageOpenCVImageConversions() { colorAssociations = new Dictionary <Type, IplColorInfo>(); //Gray colorAssociations.Add(typeof(Gray <sbyte>), new IplColorInfo(1, IplImage.IplChannelDepth.IPL_DEPTH_8S)); colorAssociations.Add(typeof(Gray <byte>), new IplColorInfo(1, IplImage.IplChannelDepth.IPL_DEPTH_8U)); colorAssociations.Add(typeof(Gray <short>), new IplColorInfo(1, IplImage.IplChannelDepth.IPL_DEPTH_16S)); colorAssociations.Add(typeof(Gray <ushort>), new IplColorInfo(1, IplImage.IplChannelDepth.IPL_DEPTH_16U)); colorAssociations.Add(typeof(Gray <int>), new IplColorInfo(1, IplImage.IplChannelDepth.IPL_DEPTH_32S)); colorAssociations.Add(typeof(Gray <float>), new IplColorInfo(1, IplImage.IplChannelDepth.IPL_DEPTH_32F)); colorAssociations.Add(typeof(Gray <double>), new IplColorInfo(1, IplImage.IplChannelDepth.IPL_DEPTH_64F)); //Color2 - TODO ?? //Bgr colorAssociations.Add(typeof(Bgr <sbyte>), new IplColorInfo(3, IplImage.IplChannelDepth.IPL_DEPTH_8S)); colorAssociations.Add(typeof(Bgr <byte>), new IplColorInfo(3, IplImage.IplChannelDepth.IPL_DEPTH_8U)); colorAssociations.Add(typeof(Bgr <short>), new IplColorInfo(3, IplImage.IplChannelDepth.IPL_DEPTH_16S)); colorAssociations.Add(typeof(Bgr <ushort>), new IplColorInfo(3, IplImage.IplChannelDepth.IPL_DEPTH_16U)); colorAssociations.Add(typeof(Bgr <int>), new IplColorInfo(3, IplImage.IplChannelDepth.IPL_DEPTH_32S)); colorAssociations.Add(typeof(Bgr <float>), new IplColorInfo(3, IplImage.IplChannelDepth.IPL_DEPTH_32F)); colorAssociations.Add(typeof(Bgr <double>), new IplColorInfo(3, IplImage.IplChannelDepth.IPL_DEPTH_64F)); //Bgra colorAssociations.Add(typeof(Bgra <sbyte>), new IplColorInfo(4, IplImage.IplChannelDepth.IPL_DEPTH_8S)); colorAssociations.Add(typeof(Bgra <byte>), new IplColorInfo(4, IplImage.IplChannelDepth.IPL_DEPTH_8U)); colorAssociations.Add(typeof(Bgra <short>), new IplColorInfo(4, IplImage.IplChannelDepth.IPL_DEPTH_16S)); colorAssociations.Add(typeof(Bgra <ushort>), new IplColorInfo(4, IplImage.IplChannelDepth.IPL_DEPTH_16U)); colorAssociations.Add(typeof(Bgra <int>), new IplColorInfo(4, IplImage.IplChannelDepth.IPL_DEPTH_32S)); colorAssociations.Add(typeof(Bgra <float>), new IplColorInfo(4, IplImage.IplChannelDepth.IPL_DEPTH_32F)); colorAssociations.Add(typeof(Bgra <double>), new IplColorInfo(4, IplImage.IplChannelDepth.IPL_DEPTH_64F)); /****************************************************************************************/ colorConstructorPairs = new Dictionary <IplColorInfo, GenericImageConstructor>(); //Gray colorConstructorPairs.Add(new IplColorInfo(1, IplImage.IplChannelDepth.IPL_DEPTH_8S), GenericImageConstructor.Create <Gray <sbyte> >()); colorConstructorPairs.Add(new IplColorInfo(1, IplImage.IplChannelDepth.IPL_DEPTH_8U), GenericImageConstructor.Create <Gray <byte> >()); colorConstructorPairs.Add(new IplColorInfo(1, IplImage.IplChannelDepth.IPL_DEPTH_16S), GenericImageConstructor.Create <Gray <short> >()); colorConstructorPairs.Add(new IplColorInfo(1, IplImage.IplChannelDepth.IPL_DEPTH_16U), GenericImageConstructor.Create <Gray <ushort> >()); colorConstructorPairs.Add(new IplColorInfo(1, IplImage.IplChannelDepth.IPL_DEPTH_32S), GenericImageConstructor.Create <Gray <int> >()); colorConstructorPairs.Add(new IplColorInfo(1, IplImage.IplChannelDepth.IPL_DEPTH_32F), GenericImageConstructor.Create <Gray <float> >()); colorConstructorPairs.Add(new IplColorInfo(1, IplImage.IplChannelDepth.IPL_DEPTH_64F), GenericImageConstructor.Create <Gray <double> >()); //Color2 - TODO //Bgr colorConstructorPairs.Add(new IplColorInfo(3, IplImage.IplChannelDepth.IPL_DEPTH_8S), GenericImageConstructor.Create <Bgr <sbyte> >()); colorConstructorPairs.Add(new IplColorInfo(3, IplImage.IplChannelDepth.IPL_DEPTH_8U), GenericImageConstructor.Create <Bgr <byte> >()); colorConstructorPairs.Add(new IplColorInfo(3, IplImage.IplChannelDepth.IPL_DEPTH_16S), GenericImageConstructor.Create <Bgr <short> >()); colorConstructorPairs.Add(new IplColorInfo(3, IplImage.IplChannelDepth.IPL_DEPTH_16U), GenericImageConstructor.Create <Bgr <ushort> >()); colorConstructorPairs.Add(new IplColorInfo(3, IplImage.IplChannelDepth.IPL_DEPTH_32S), GenericImageConstructor.Create <Bgr <int> >()); colorConstructorPairs.Add(new IplColorInfo(3, IplImage.IplChannelDepth.IPL_DEPTH_32F), GenericImageConstructor.Create <Bgr <float> >()); colorConstructorPairs.Add(new IplColorInfo(3, IplImage.IplChannelDepth.IPL_DEPTH_64F), GenericImageConstructor.Create <Bgr <double> >()); //Bgra colorConstructorPairs.Add(new IplColorInfo(4, IplImage.IplChannelDepth.IPL_DEPTH_8S), GenericImageConstructor.Create <Bgra <sbyte> >()); colorConstructorPairs.Add(new IplColorInfo(4, IplImage.IplChannelDepth.IPL_DEPTH_8U), GenericImageConstructor.Create <Bgra <byte> >()); colorConstructorPairs.Add(new IplColorInfo(4, IplImage.IplChannelDepth.IPL_DEPTH_16S), GenericImageConstructor.Create <Bgra <short> >()); colorConstructorPairs.Add(new IplColorInfo(4, IplImage.IplChannelDepth.IPL_DEPTH_16U), GenericImageConstructor.Create <Bgra <ushort> >()); colorConstructorPairs.Add(new IplColorInfo(4, IplImage.IplChannelDepth.IPL_DEPTH_32S), GenericImageConstructor.Create <Bgra <int> >()); colorConstructorPairs.Add(new IplColorInfo(4, IplImage.IplChannelDepth.IPL_DEPTH_32F), GenericImageConstructor.Create <Bgra <float> >()); colorConstructorPairs.Add(new IplColorInfo(4, IplImage.IplChannelDepth.IPL_DEPTH_64F), GenericImageConstructor.Create <Bgra <double> >()); }