Skip to content

[6103] 修复将所选区域导出为图片功能及格式支持 - #4675

Open
da-liii wants to merge 1 commit into
mainfrom
da/200_27/6103_export_selection_as_image
Open

da-liii wants to merge 1 commit into
mainfrom
da/200_27/6103_export_selection_as_image

Conversation

@da-liii

@da-liii da-liii commented Sep 24, 2026

Copy link
Copy Markdown
Contributor

任务简述

修复 “将所选区域导出为图片” 功能及相关格式支持(详见 dev-agent-6103 任务文档 devel/6103.stem)。

问题原因

  1. 漏掉最后一行:在 make_raster_image 中,save_picture (name, pic) 位于 tm_delete (ren) 之前被调用。MuPDF 的 run_processor 与 draw_device 针对当前文本块的操作在 end_text / end() 调用前处于缓冲状态,尚未刷新提交到 pixmap。因此最后一行文本未能绘制进 pixmap 就已保存到磁盘。
  2. jpeg/tif 等格式保存失败:
    • src/Plugins/MuPDF/mupdf_picture.cpp 的 save_picture 函数硬编码了 if (suffix (dest) != "png") return;,对除 PNG 外的格式直接告警并不予保存;
    • Scheme 层 tmimage.scm 与 file-menu.scm 错误地对原生支持的位图导出格式(png、jpeg、tif)检查外部 PDF 格式转换器 file-converter-exists? "x.pdf" ...,在缺少 ImageMagick/pdftocairo 等外部工具的环境下抛弃或破坏导出路径(如拼接为 pngpdf)。

解决方案

  1. 修复光栅化刷新时序:在 make_raster_image 中先执行 tm_delete (ren) 析构渲染器,确保 end_text 和设备关闭操作将所有绘图命令完整刷新至 pixmap,再调用 save_picture (name, pic) 保存图片。
  2. 支持 jpeg/tif/tiff 等多种格式导出:
    • mupdf_picture.cpp 的 save_picture 中,借助 Qt (QImage::save) 支持导出 PNG、JPEG、TIFF 等丰富格式,并提供 MuPDF 原生 fz_write_pixmap_as_png 和 fz_write_pixmap_as_jpeg 回退;
    • tmimage.scm 与 file-menu.scm 中,原生导出的图片格式(png, jpeg, tif)不再受制于外部 PDF 转换器是否存在;
    • 修复 tmimage.scm 中降级到 PDF 时的文件名子串截取偏移 bug。
  3. 新增集成测试:增加 TeXmacs/tests/6103.scm,覆盖 png、jpeg、tif 格式多行及单行导出验证。

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant