public static BlkImgDataSrc CreateEncodableSource(IEnumerable<Stream> streams)
{
if (streams == null)
{
throw new ArgumentNullException("streams");
}
var counter = 0;
var ncomp = 0;
var ppminput = false;
var imageReaders = new List<ImgReader>();
foreach (var stream in streams)
{
++counter;
var imgType = GetImageType(stream);
switch (imgType)
{
case "P5":
imageReaders.Add(new ImgReaderPGM(stream));
ncomp += 1;
break;
case "P6":
imageReaders.Add(new ImgReaderPPM(stream));
ncomp += 3;
ppminput = true;
break;
case "PG":
imageReaders.Add(new ImgReaderPGX(stream));
ncomp += 1;
break;
default:
throw new ArgumentOutOfRangeException("streams", "Invalid image type");
}
}
if (ppminput && counter > 1)
{
error("With PPM input format only 1 input file can be specified", 2);
return null;
}
BlkImgDataSrc imgsrc;
// **** ImgDataJoiner (if needed) ****
if (ppminput || ncomp == 1)
{
// Just one input
imgsrc = imageReaders[0];
}
else
{
// More than one reader => join all readers into 1
var imgcmpidxs = new int[ncomp];
imgsrc = new ImgDataJoiner(imageReaders, imgcmpidxs);
}
return imgsrc;
}