gpt4 book ai didi

c# - 尝试改进多页 TIFF 文件分割

转载 作者:行者123 更新时间:2023-12-02 14:19:40 25 4
gpt4 key购买 nike

我正在尝试提高将多页 TIFF 文件拆分为单独页面的速度,并将其存储为字节数组列表。我正在开发这个 TiffSplitter 类,以尝试提高 Paginate 方法的速度。

我听说过 LibTiff.net,想知道它是否会比这个过程更快?目前,对 7 页多页 TIFF 文件调用 Paginate 方法大约需要 1333 毫秒。

有谁知道以字节数组形式检索多页 TIFF 的各个页面的最有效方法是什么?或者对于如何提高我当前使用的流程的速度有任何建议?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;

namespace TiffSplitter
{
public class TiffPaginator
{
private List<byte[]> paginatedData;
public List<byte[]> Pages
{
get
{
return paginatedData;
}
}

public TiffPaginator()
{
paginatedData = new List<byte[]>();
}

public void Paginate(string Filename)
{
using (Image img = Image.FromFile(Filename))
{
paginatedData.Clear();
int frameCount = img.GetFrameCount(FrameDimension.Page);
for (int i = 0; i < frameCount; i++)
{
img.SelectActiveFrame(new FrameDimension(img.FrameDimensionsList[0]), i);
using (MemoryStream memstr = new MemoryStream())
{
img.Save(memstr, ImageFormat.Tiff);
paginatedData.Add(memstr.ToArray());
}
}
}
}
}
}

最佳答案

我尝试使用 LibTiff.net,对我来说,它非常慢。分割单个 2 页 tif 的时间以秒为单位。最后,我决定引用PresentationCore并采用以下方法:(它将图像分割为多个文件,但将输出切换为字节数组应该很简单)

Stream imageStreamSource = new FileStream("filename", FileMode.Open, FileAccess.Read, FileShare.Read);
TiffBitmapDecoder decoder = new TiffBitmapDecoder(imageStreamSource, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
int pagecount = decoder.Frames.Count;
if (pagecount > 1)
{
string fNameBase = Path.GetFileNameWithoutExtension("filename");
string filePath = Path.GetDirectoryName("filename");
for (int i = 0; i < pagecount; i++)
{
string outputName = string.Format(@"{0}\SplitImages\{1}-{2}.tif", filePath, fNameBase, i.ToString());
FileStream stream = new FileStream(outputName, FileMode.Create, FileAccess.Write);
TiffBitmapEncoder encoder = new TiffBitmapEncoder();
encoder.Frames.Add(decoder.Frames[i]);
encoder.Save(stream);
stream.Dispose();
}
imageStreamSource.Dispose();
}

关于c# - 尝试改进多页 TIFF 文件分割,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18644925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com