【发布时间】:2020-12-14 00:57:08
【问题描述】:
我正在尝试使用 code by Bob Powell 从现有图片生成多页 TIFF 文件:
picture.SelectActiveFrame(FrameDimension.Page, 0);
var image = new Bitmap(picture);
using (var stream = new MemoryStream())
{
ImageCodecInfo codecInfo = null;
foreach (var imageEncoder in ImageCodecInfo.GetImageEncoders())
{
if (imageEncoder.MimeType != "image/tiff") continue;
codecInfo = imageEncoder;
break;
}
var parameters = new EncoderParameters
{
Param = new []
{
new EncoderParameter(Encoder.SaveFlag, (long) EncoderValue.MultiFrame)
}
};
image.Save(stream, codecInfo, parameters);
parameters = new EncoderParameters
{
Param = new[]
{
new EncoderParameter(Encoder.SaveFlag, (long) EncoderValue.FrameDimensionPage)
}
};
for (var i = 1; i < picture.GetFrameCount(FrameDimension.Page); i++)
{
picture.SelectActiveFrame(FrameDimension.Page, i);
var img = new Bitmap(picture);
image.SaveAdd(img, parameters);
}
parameters = new EncoderParameters
{
Param = new[]
{
new EncoderParameter(Encoder.SaveFlag, (long)EncoderValue.Flush)
}
};
image.SaveAdd(parameters);
stream.Flush();
}
但它不起作用(图像中只包含第一帧),我不知道为什么。
我想做的是更改 TIFF 文件的特定帧(为其添加注释)。
我不知道是否有更简单的方法可以做到这一点,但我的想法是从原始图片创建一个多页 TIFF 并添加我自己的图片而不是那个框架。
【问题讨论】:
-
请解释“它不工作”。发生了什么,什么失败了,你得到了什么错误(如果有的话)?
-
它只生成一个图像对象,其中只有第一帧,其他帧不添加。
-
您的代码在我尝试时运行良好。您是否验证了源图像有多个页面?您是否正确保存了 MemoryStream?
-
是的,我正在测试我的源的图像是多页的。似乎这个源不适用于 Image 对象,而是对内存流进行了更改,所以我应该保存我的内存流并带来它以图像形式返回。感谢您的帮助
-
!!链接坏了!!