Gimp Script-Fu执行选区删除操作后显示异常问题咨询
问题根源说明
- 显示不同步的核心问题是
gimp-displays-flush调用时机错误,以及缺少图层修改后的界面更新通知:- 原代码中
gimp-displays-flush放在了删除选区内容的gimp-drawable-edit-clear操作之前,刷新界面时删除操作还未执行,所以界面只渲染了裁剪后的状态 - 完成删除、取消选区操作后没有通知GIMP刷新界面和图层缩略图,修改结果不会主动渲染,必须等手动交互触发刷新才会显示正确效果
- 原代码中
- 你之前疑惑的
gimp-item-delete接口不需要用到,这个接口的作用是删除图层、路径这类完整的对象,你要删除选区内容用当前的gimp-drawable-edit-clear完全正确,无需调整核心逻辑。
修正后的完整代码
; XML2 Conversation Portrait Preview Crop (define (script-fu-xml2-convo-preview image layer) (gimp-image-undo-group-start image) (gimp-selection-none image) (gimp-image-resize image 152 152 -280 -496) (gimp-layer-resize-to-image-size layer) (gimp-image-select-ellipse image 0 0 0 152 152) (gimp-selection-invert image) (gimp-drawable-edit-clear layer) (gimp-selection-none image) ; 新增:通知GIMP该图层内容已修改,需要更新显示 (gimp-drawable-update layer 0 0 (car (gimp-drawable-width layer)) (car (gimp-drawable-height layer))) ; 界面刷新移到所有操作完成之后 (gimp-displays-flush) (gimp-image-undo-group-end image) ) ; populate script registration information (script-fu-register "script-fu-xml2-convo-preview" "XML2 Conversation Portrait Preview Crop" "Crops the preview window for XML2 conversation portraits." "BaconWizard17" "BaconWizard17" "September 2021" "*" SF-IMAGE "Image" 0 SF-DRAWABLE "Layer" 0 ) ; register the script within gimp menu (script-fu-menu-register "script-fu-xml2-convo-preview" "<Image>/Marvel Mods/Skin Previews/XML2 PC")
修改说明
- 调整了
gimp-displays-flush的执行顺序,放在所有编辑操作完成之后,保证刷新时所有修改都已经生效 - 新增
gimp-drawable-update调用,主动通知GIMP目标图层内容发生变化,触发图层缩略图和画布的立刻更新 - 完全保留原有裁剪、选区、删除的核心逻辑,仅补充界面更新相关的必要调用
内容的提问来源于stack exchange,提问作者E. Reed
相关产品推荐
相关产品推荐

