/// <summary>
 /// Creates new conversion data object (an edge in a graph).
 /// </summary>
 /// <param name="source">Source vertex.</param>
 /// <param name="destination">Destination vertex.</param>
 /// <param name="convertFunc">Data conversion function.</param>
 /// <param name="forceSequential">Force conversion to execute sequentially.</param>
 /// <param name="createFunc">Destination image creation function.</param>
 /// <param name="cost">Conversion cost.</param>
 public ConversionData(T source, T destination, ConvertDataFunc convertFunc, bool forceSequential = false, CreateImageFunc createFunc = null, ConversionCost cost = ConversionCost.DataConvert)
     : base(source, destination)
 {
     this.CreateFunc      = createFunc;
     this.ConvertFunc     = convertFunc;
     this.ForceSequential = forceSequential;
     this.cost            = cost;
 }
 /// <summary>
 /// Returns conversion data when source data has to be converted.
 /// </summary>
 /// <param name="source">Source's image color info.</param>
 /// <param name="destination">Destination image color info.</param>
 /// <param name="convertFunc">Data conversion function.</param>
 /// <param name="forceSequential">Force conversion to execute sequentially.</param>
 /// <returns>Conversion info.</returns>
 public static ConversionData <ColorInfo> AsConvertData(ColorInfo source, ColorInfo destination, ConvertDataFunc convertFunc, bool forceSequential = false)
 {
     return(new ConversionData <ColorInfo>(source,
                                           destination,
                                           convertFunc,
                                           forceSequential,
                                           (srcImg, destColor) => Image.Create(destColor, srcImg.Width, srcImg.Height),
                                           ConversionCost.DataConvert));
 }