当前位置:  开发笔记 > 编程语言 > 正文

在.NET 2.0中将位图转换为一个多页TIFF图像

如何解决《在.NET2.0中将位图转换为一个多页TIFF图像》经验,为你挑选了2个好方法。

如何将一组位图转换为TIFF格式的全新图像,在这个新的tiff图像中添加所有位图作为帧?

使用.NET 2.0.



1> Otávio Décio..:

从第一个位图开始,将其放入Image对象

Bitmap bitmap = (Bitmap)Image.FromFile(file);

将位图保存为内存为tiff

MemoryStream byteStream = new MemoryStream();
bitmap.Save(byteStream, ImageFormat.Tiff);

将Tiff放入另一个Image对象

Image tiff = Image.FromStream(byteStream)

准备编码器:

var encoderInfo = ImageCodecInfo.GetImageEncoders().First(i => i.MimeType == "image/tiff");

EncoderParameters encoderParams = new EncoderParameters(2);
encoderParams.Param[0] = new EncoderParameter(Encoder.Compression, (long)EncoderValue.CompressionNone);
encoderParams.Param[1] = new EncoderParameter(Encoder.SaveFlag, (long)EncoderValue.MultiFrame);

保存到文件:

tiff.Save(sOutFilePath, encoderInfo, encoderParams);

对于后续页面,请准备编码器:

EncoderParameters EncoderParams = new EncoderParameters(2);
EncoderParameter SaveEncodeParam = new EncoderParameter(
     Encoder.SaveFlag, 
     (long)EncoderValue.FrameDimensionPage);
EncoderParameter CompressionEncodeParam = new EncoderParameter(
     Encoder.Compression, (long)EncoderValue.CompressionNone);
EncoderParams.Param[0] = CompressionEncodeParam;
EncoderParams.Param[1] = SaveEncodeParam;
tiff.SaveAdd(/* next image as tiff - do the same as above with memory */, EncoderParams);

最后刷新文件:

EncoderParameter SaveEncodeParam = new EncoderParameter(
     Encoder.SaveFlag, (long)EncoderValue.Flush);
EncoderParams = new EncoderParameters(1);
EncoderParams.Param[0] = SaveEncodeParam;
tiff.SaveAdd(EncoderParams);

这应该让你开始.


@alabamasucks - 这是一个为指定的mime类型返回ImageCodecInfo对象的函数.它可以替换为:ImageCodecInfo.GetImageEncoders().First(i => i.MimeType =="image/tiff");
很好的答案.如果您描述了它是如何到达它的(如果不是从试验和错误中学到的,那么)只能更完整,因为MSDN文档几乎无法理解它.
很好的答案.我想补充一点,GetEncoderInfo()方法在MSDN上有记录,网址是https://msdn.microsoft.com/en-us/library/system.drawing.imaging.encoder.compression(v=vs.110).aspx和Encoder.SaveFlag可能需要完全限定 - System.Drawing.Imaging.Encoder.SaveFlag.
我有相同的黑色图像问题,结果我在tiff上调用write之前关闭了位图流.
它将图像转换为TIFF,但输出文件为黑白.有什么理由吗?

2> Skadoosh..:

在Google上进行了一些搜索后,发现了这篇文章.我尝试了'b'c'd'e'f'g'h'在帖子中的代码,但这对我不起作用.也许,我没有正确地做某事.

在任何情况下,我发现另一个帖子将图像保存到多页tiffs.这是帖子的链接:http://www.bobpowell.net/addframes.htm

此外,这是适合我的代码.它应该与该帖子相同.

Encoder encoder = Encoder.SaveFlag;
ImageCodecInfo encoderInfo = ImageCodecInfo.GetImageEncoders().First(i => i.MimeType == "image/tiff");
EncoderParameters encoderParameters = new EncoderParameters(1);
encoderParameters.Param[0] = new EncoderParameter(encoder, (long)EncoderValue.MultiFrame);

// Save the first frame of the multi page tiff
Bitmap firstImage = (Bitmap) _scannedPages[0].RawContent;
firstImage.Save(fileName, encoderInfo, encoderParameters);

encoderParameters.Param[0] = new EncoderParameter(encoder, (long)EncoderValue.FrameDimensionPage);

// Add the remaining images to the tiff
for (int i = 1; i < _scannedPages.Count; i++)
{
   Bitmap img = (Bitmap) _scannedPages[i].RawContent;
   firstImage.SaveAdd(img, encoderParameters);
}

// Close out the file
encoderParameters.Param[0] = new EncoderParameter(encoder, (long)EncoderValue.Flush);
firstImage.SaveAdd(encoderParameters);

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有