Мне нужно разделить многостраничные файлы TIFF. Входная папка содержит 100 файлов TIFF. Время, затрачиваемое на 100 файлов TIFF, составляет 1,40 минуты. Каждый файл TIFF содержит две страницы. Есть ли способ повысить производительность, и есть ли способ ускорить процесс?Выполнение разделения многостраничных TIFF
static void Main(string[] args)
{
string input = @"D:\testSplit\input\";
string output = @"D:\testSplit\output\out";
DirectoryInfo dir1 = new DirectoryInfo(input);
FileInfo[] DispatchFiles = dir1.GetFiles();
if (DispatchFiles.Length > 0)
{
foreach (FileInfo aFile in DispatchFiles)
{
string files = input + aFile.Name;
if (File.Exists(files))
{
Split(files, output);
}
}
}
}
public static List<string> Split(string InputFilePath, string OutputPath)
{
List<string> splitFileNames = new List<string>();
try
{
//Get the frame dimension list from the image of the file and
Image tiffImage = Image.FromFile(InputFilePath);
//get the globally unique identifier (GUID)
Guid objGuid = tiffImage.FrameDimensionsList[0];
//create the frame dimension
FrameDimension dimension = new FrameDimension(objGuid);
//Gets the total number of frames in the .tiff file
int noOfPages = tiffImage.GetFrameCount(dimension);
if (noOfPages == 1)
{
splitFileNames.Add(InputFilePath);
tiffImage.Dispose();
return splitFileNames;
}
string filName = Path.GetFileNameWithoutExtension(InputFilePath);
string fileExtention = Path.GetExtension(InputFilePath);
ImageCodecInfo encodeInfo = null;
ImageCodecInfo[] imageEncoders = ImageCodecInfo.GetImageEncoders();
for (int j = 0; j < imageEncoders.Length; j++)
{
if (imageEncoders[j].MimeType == "image/tiff")
{
encodeInfo = imageEncoders[j];
break;
}
// Save the tiff file in the output directory.
if (!Directory.Exists(OutputPath))
Directory.CreateDirectory(OutputPath);
foreach (Guid guid in tiffImage.FrameDimensionsList)
{
for (int index = 0; index < noOfPages; index++)
{
FrameDimension currentFrame = new FrameDimension(guid);
tiffImage.SelectActiveFrame(currentFrame, index);
string outPath = string.Concat(OutputPath, filName, "-P", index + 1, fileExtention);
tiffImage.Save(outPath, encodeInfo, null);
splitFileNames.Add(outPath);
}
}
tiffImage.Dispose();
return splitFileNames;
}
catch (Exception ex)
{
return splitFileNames;
}
}
спасибо за повторное воспроизведение Я хочу улучшить производительность в методе разделения, может предложить вам изображение tiffImage = Image.FromFile (InputFilePath), tiffImage.Save (outPath, encodeInfo, null) потребляет больше времени – user202
Когда вы зависите от непрозрачной функции предоставленный кем-то другим, вы не можете знать, что он делает. Он может выполнять полное декодирование и повторное кодирование каждой страницы. Эффективная библиотека (например, моя) может выполнять задание в течение времени, которое требуется для чтения + записи данных на диск. – BitBank