35
A
回答
74
开始用它放入一个Image对象
Bitmap bitmap = (Bitmap)Image.FromFile(file);
保存位图存储为TIFF
MemoryStream byteStream = new MemoryStream();
bitmap.Save(byteStream, ImageFormat.Tiff);
认沽TIFF文件到另一个Image对象
Image tiff = Image.FromStream(byteStream)
第一的位图准备编码器:
ImageCodecInfo encoderInfo = GetEncoderInfo("image/tiff");
EncoderParameters encoderParams = new EncoderParameters(2);
EncoderParameter parameter = new EncoderParameter(
Encoder.Compression, (long)EncoderValue.CompressionCCITT4);
encoderParams.Param[0] = parameter;
parameter = new EncoderParameter(Encoder.SaveFlag,
(long)EncoderValue.MultiFrame);
encoderParams.Param[1] = parameter;
保存到文件:
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.CompressionCCITT4);
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);
这应该让你开始。
3
当谈到处理和创建标准格式文件时,不是微软的记录迷,我建议使用ImageMagick,以。MagickNet的形式提供.Net库(当心,http://midimick.com/magicknet/当前有一个间谍软件弹出窗口,我已经提醒网站所有者)。
19
在Google上搜索了一下后,发现了这篇文章。我试了一下a'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 remining 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);
2
这是multi-tiff文件的拆分操作。它就像字符串子字符串函数一样工作。图像的第一个索引将是您的MasterBitMap,您将继续将帧添加到MasterBitmap直到索引结束。
public void SaveMultiFrameTiff(int start, int end)
{
string outputFileName = "out.TIF";
string inputFileName = "input.TIF";
try
{
Bitmap MasterBitmap = new Bitmap(inputFileName); //Start page of document(master)
Image imageAdd = Image.FromFile(inputFileName); //Frame Image that will be added to the master
Guid guid = imageAdd.FrameDimensionsList[0]; //GUID
FrameDimension dimension = new FrameDimension(guid);
// start index cannot be less than 0 and cannot be greater than frame count
if (start < 1 || end > MasterBitmap.GetFrameCount(dimension)) { return; }
EncoderParameters ep = new EncoderParameters(1);
//Get Image Codec Information
ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
ImageCodecInfo codecInfo = codecs[3]; //image/tiff
//MultiFrame Encoding format
EncoderParameter epMultiFrame = new EncoderParameter(System.Drawing.Imaging.Encoder.SaveFlag, (long)EncoderValue.MultiFrame);
ep.Param[0] = epMultiFrame;
MasterBitmap.SelectActiveFrame(dimension, start - 1);
MasterBitmap.Save(outputFileName, codecInfo, ep);//create master document
//FrameDimensionPage Encoding format
EncoderParameter epFrameDimensionPage = new EncoderParameter(System.Drawing.Imaging.Encoder.SaveFlag, (long)EncoderValue.FrameDimensionPage);
ep.Param[0] = epFrameDimensionPage;
for (int i = start; i < end; i++)
{
imageAdd.SelectActiveFrame(dimension, i);//select next frame
MasterBitmap.SaveAdd(new Bitmap(imageAdd), ep);//add it to the master
}
//Flush Encoding format
EncoderParameter epFlush = new EncoderParameter(System.Drawing.Imaging.Encoder.SaveFlag, (long)EncoderValue.Flush);
ep.Param[0] = epFlush;
MasterBitmap.SaveAdd(ep); //flush the file
}
catch (Exception ex)
{
throw ex;
}
}
}
4
有帮助的话题。谢谢(你的)信息。我需要从base64编码的字符串数组中拼接多页图像。这是我基于这个线程中的信息放在一起的。我不太了解为什么我必须创建一个具有明确指定的图像格式的内存流,但这是结束了工作,如果有更好的方式来处理这个请让我知道。谢谢
/// <summary>
/// Takes in an array of base64 encoded strings and creates a multipage tiff.
/// </summary>
/// <param name="sOutFile">file to be generated</param>
/// <param name="pagesbase64Array"></param>
private void SaevAsMultiPageTiff(string sOutFile, string[] pagesbase64Array)
{
System.Drawing.Imaging.Encoder encoder = System.Drawing.Imaging.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);
Bitmap firstImage = null;
try
{
using (MemoryStream ms1 = new MemoryStream())
{
using (MemoryStream ms = new MemoryStream(Convert.FromBase64String(pagesbase64Array[0])))
{
Image.FromStream(ms).Save(ms1, ImageFormat.Tiff);
firstImage = (Bitmap)Image.FromStream(ms1);
}
// Save the first frame of the multi page tiff
firstImage.Save(sOutFile, encoderInfo, encoderParameters); //throws Generic GDI+ error if the memory streams are not open when this is called
}
encoderParameters.Param[0] = new EncoderParameter(encoder, (long)EncoderValue.FrameDimensionPage);
Bitmap imagePage;
// Add the remining images to the tiff
for (int i = 1; i < pagesbase64Array.Length; i++)
{
using (MemoryStream ms1 = new MemoryStream())
{
using (MemoryStream ms = new MemoryStream(Convert.FromBase64String(pagesbase64Array[i])))
{
Image.FromStream(ms).Save(ms1, ImageFormat.Tiff);
imagePage = (Bitmap)Image.FromStream(ms1);
}
firstImage.SaveAdd(imagePage, encoderParameters); //throws Generic GDI+ error if the memory streams are not open when this is called
}
}
}
catch (Exception)
{
//ensure the errors are not missed while allowing for flush in finally block so files dont get locked up.
throw;
}
finally
{
// Close out the file
encoderParameters.Param[0] = new EncoderParameter(encoder, (long)EncoderValue.Flush);
firstImage.SaveAdd(encoderParameters);
}
}
相关问题
- 1. 如何在Java中将16位.tiff图像转换为8位.tiff图像?
- 2. 将多页TIFF转换为PNG .Net
- 3. 如何在JAVA中将两个或多个tiff图像文件合并为一个多页tiff图像
- 4. 使用rawpy将多个原始.NEF图像转换为TIFF
- 5. 如何在.NET 2.0中打开多帧TIFF图像格式图像?
- 6. 如何将pdf转换为.net中的位图图像?
- 7. 隐藏单页tiff图像到rubiff的多页tiff图像
- 8. 在matlab中将tiff图像转换为avi
- 9. 将PictureBox图像转换为位图
- 10. 如何将位图转换为图像
- 11. 将字节转换为位图图像
- 12. 将图像转换为位图
- 13. 将位图转换为图像
- 14. 将MsWord第一页转换为图像
- 15. 将位图转换为javascript图像
- 16. 使用GhostScriptSharp将多页PDF转换为一个图像
- 17. 在Android操作系统中将JPEG/PNG图像转换为TIFF图像格式
- 18. C#.NET将JPEG图像转换为位图结构
- 19. 将图像保存为Tiff
- 20. BitMiracle.LibTiff.Net将oJPEG tiff转换为位图会导致负彩色图像
- 21. 在tiff中将tiff转换为gif
- 22. 如何将位图图像转换为CIELab图像?
- 23. 在Android中将视图转换为位图图像
- 24. 如何将图像(GIF,JPG,JPEG,PNG)转换为PHP中的TIFF?
- 25. Powershell脚本将TIFF图像转换为重命名的JPEG
- 26. 如何使用C#将多页Blob .Tiff图像中的第一页转换并显示为.Jpeg#
- 27. 使用.NET将图像转换为WMF?
- 28. 如何将.net 4中的位图图片/图像转换为1 bpp位图图像?
- 29. 在.net紧凑框架中将图像转换为1 bpp位图
- 30. 将LINQ转换为.NET 2.0
优秀的答案。如果你描述你是如何到达它的话(如果不是从试验和错误中得知它的话),只能说它更完整,因为MSDN文档使它几乎无法理解。 – 2009-06-16 19:47:13
我想知道的是使用ImageFormat。Tiff在MemoryStream的Save方法中 - 显然以后完成的“编码”是一个完全不相关的过程 - 即将使用ImageFormat.Tiff保存的内存流的字节转储到文件中不会创建TIFF文件,我想呢? – 2011-01-13 11:36:54