C# 多页tiff程序空白页
我编写了一个代码,将单个tiff文件合并为多页tiff文件。但是输出在最后出现空白页。如果输入文件是黑白的,但不适用于彩色.tiff文件,则代码可以正常工作。例如,如果我给出100个文件,作为输入输出,单个tiff文件有47页,其余的都是空白 我使用标准代码来实现这个功能,下面是我的代码。有人知道为什么吗C# 多页tiff程序空白页,c#,C#,我编写了一个代码,将单个tiff文件合并为多页tiff文件。但是输出在最后出现空白页。如果输入文件是黑白的,但不适用于彩色.tiff文件,则代码可以正常工作。例如,如果我给出100个文件,作为输入输出,单个tiff文件有47页,其余的都是空白 我使用标准代码来实现这个功能,下面是我的代码。有人知道为什么吗 using (FileStream fs = new FileStream(fileNameTemp, FileMode.Append, FileAccess.Write))
using (FileStream fs = new FileStream(fileNameTemp, FileMode.Append, FileAccess.Write))
{
System.Windows.Media.Imaging.TiffBitmapEncoder tifEnc = new System.Windows.Media.Imaging.TiffBitmapEncoder();
tifEnc.Compression = System.Windows.Media.Imaging.TiffCompressOption.Default;
foreach (string fileName1 in filePaths)
{
Console.WriteLine("FileName:::" + fileName1);
System.Windows.Media.Imaging.BitmapImage bmpImg = new System.Windows.Media.Imaging.BitmapImage();
bmpImg.BeginInit();
bmpImg.CacheOption = System.Windows.Media.Imaging.BitmapCacheOption.OnLoad;
bmpImg.UriSource = new Uri(fileName1);
bmpImg.EndInit();
System.Windows.Media.Imaging.FormatConvertedBitmap fcb = new System.Windows.Media.Imaging.FormatConvertedBitmap(bmpImg,
System.Windows.Media.PixelFormats.Rgb24,
System.Windows.Media.Imaging.BitmapPalettes.Halftone27,
1.0);
tifEnc.Frames.Add(System.Windows.Media.Imaging.BitmapFrame.Create(fcb));
}
tifEnc.Save(fs);
fs.Dispose();
}
提前谢谢 在下面的示例中,执行BitmapImage.EndInit()时不会加载BitmapImage,因为它似乎在执行延迟加载。如果内存流被释放,那么我得到的页面也是白色的,因为没有加载图像。 第二种方法采用目标文件路径和源列表
public static BitmapImage LoadImage(byte[] bytes)
{
var memoryStream = new MemoryStream(bytes);
var bitmapImage = new BitmapImage();
bitmapImage.BeginInit();
bitmapImage.StreamSource = memoryStream;
bitmapImage.EndInit();
return bitmapImage;
}
public static void CreateTiff(string destPath, params string[] filePaths)
{
using (FileStream fs = new FileStream(destPath, FileMode.Append,
FileAccess.Write))
{
var tifEnc = new TiffBitmapEncoder();
tifEnc.Compression = TiffCompressOption.Default;
foreach (string fileName in filePaths)
{
var image = LoadImage(File.ReadAllBytes(fileName));
tifEnc.Frames.Add(BitmapFrame.Create(image));
}
tifEnc.Save(fs);
}
}