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 图像。以下是对代码的逐行解释:

方法签名

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

变量声明

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

try-catch 块

try
{
    xpsDocument = new XpsDocument(xpsPath, System.IO.FileAccess.Read);
    FixedDocumentSequence documentPageSequence = xpsDocument.GetFixedDocumentSequence();

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

遍历每一页并渲染到位图

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

关闭文档并保存图片

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

清理资源

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

异常处理和最终清理工作

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

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


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?