ZBLOG

public static void ConvertToJpg(object obj) { string[] str = obj as string[]; string xpsPath = str[0]; string saveImgPath = str[1]; BitmapEncoder bitmapEncoder = null; MemoryStream memoryStream = new Mem...

这段代码是一个 C# 方法 ConvertToJpg,用于将 XPS 文件转换为 JPG 图像。以下是对代码的逐行解释:

方法签名

  1. public static void ConvertToJpg(object obj)
  • 访问修饰符public,表示这个方法可以被其他类调用。
  • static:该方法属于类本身,而不是类的实例。
  • 返回类型void,表示该方法没有返回值。
  • 参数:接受一个 object 类型的参数 obj

变量声明

  1. string[] str = obj as string[];
  2. string xpsPath = str[0];
  3. string saveImgPath = str[1];
  4. BitmapEncoder bitmapEncoder = null;
  5. MemoryStream memoryStream = new MemoryStream();
  6. XpsDocument xpsDocument;
  1. 将传入的 obj 尝试转换为字符串数组(包含两个路径)。
  2. 第一个元素 str[0] 是要转换的 XPS 文件路径。
  3. 第二个元素 str[1] 是保存生成 JPG 图像的路径。
  4. 声明一个空的位图编码器和一个内存流对象,用于后续操作。

try-catch 块

  1. try
  2. {
  3. xpsDocument = new XpsDocument(xpsPath, System.IO.FileAccess.Read);
  4. FixedDocumentSequence documentPageSequence = xpsDocument.GetFixedDocumentSequence();
  5. bitmapEncoder = new JpegBitmapEncoder();
  1. 创建一个新的 XpsDocument 对象,用于读取指定路径上的 XPS 文件。
  2. 获取固定文档序列,这代表了文档中的所有页面。
  3. 初始化 JPEG 位图编码器,用于后面保存图像。

遍历每一页并渲染到位图

  1. for (int i = 0; i < documentPageSequence.DocumentPaginator.PageCount; i++)
  2. {
  3. DocumentPage documentPage = documentPageSequence.DocumentPaginator.GetPage(i);
  4. RenderTargetBitmap targetBitmap = new RenderTargetBitmap((int)documentPage.Size.Width, (int)documentPage.Size.Height, 96.0, 96.0, PixelFormats.Pbgra32);
  5. targetBitmap.Render(documentPage.Visual);
  6. bitmapEncoder.Frames.Add(BitmapFrame.Create(targetBitmap));
  7. }
  1. 循环遍历文档中的每一页。
  2. 获取当前页面的对象 (DocumentPage)。
  3. 创建目标位图,指定宽度、高度和 DPI(每英寸点数)。
  4. 渲染当前页面到目标位图中,并将其添加到位图编码器中,以便后续保存。

关闭文档并保存图片

  1. xpsDocument.Close();
  2. bitmapEncoder.Save(memoryStream);
  3. Bitmap bt = new System.Drawing.Bitmap(memoryStream);
  4. // bt= KiResizeImage(bt, 2479, 3508);
  5. bt.Save(saveImgPath, ImageFormat.Jpeg);
  1. 完成对 XPS 文档的处理后,关闭它以释放资源。
  2. 使用之前填充好的内存流,将位图编码器中的内容保存到流中。
  3. 创建一个 GDI+ 的 Bitmap 对象,从内存流中读取数据(即 JPEG 图像)。
  4. 最后,将生成的图片保存到指定路径。

清理资源

  1. bt.Dispose();
  2. bitmapEncoder = null;
  • 清理创建的 Bitmap 对象以释放资源,同时将编码器置为空。

异常处理和最终清理工作

  1. catch (Exception ex)
  2. {
  3. //NLogLogger.Instance.Info("ConvertToJpg:" + ex.ToString());
  4. }
  5. finally
  6. {
  7. memoryStream.Dispose();
  8. }
  • 捕获可能发生的异常并记录错误信息(这里使用了注释形式来表示日志记录)。
  • 在 finally 块中,无论是否发生异常,都确保内存流被正确释放。

总之,此方法实现了从 XPS 文件到 JPG 格式图片的转换,涉及了加载文档、渲染页面、编码和文件写入等步骤。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=20551

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?