Clojure2d画布调用resize后绘图失效问题求助
问题解决:Clojure2d中resize后红色方块不显示的问题
问题出在c2d/resize函数的行为上:它会创建一个全新的空白画布实例(哪怕尺寸和原画布一致),并且默认不会继承原画布的背景色、绘图状态等配置。原代码取消注释resize后,后续绘制是在这个新画布上进行,但新画布默认背景并非白色(或为透明),加上rect默认是描边绘制,导致红色方块在透明/深色背景下难以分辨,看起来像是"消失"了。
修复方案
根据需求选择以下任意一种方式:
方案1:移除不必要的resize调用
如果已经通过c2d/canvas 100 100创建了目标尺寸的画布,完全不需要额外调用resize,保留原代码即可正常显示。
方案2:resize后补全绘图配置并使用填充矩形
如果确实需要resize(比如要调整画布尺寸),在resize后手动设置背景色,并改用填充矩形(比描边更醒目):
(ns test-rect (:require [clojure2d.core :as c2d]) (:require '[clojure2d.extra.utils :refer [show-image]])) (c2d/with-canvas-> (c2d/canvas 100 100) (c2d/resize 100 100) (c2d/set-background :white) ; 手动设置白色背景 (c2d/set-color :red) (c2d/fill-rect 50 50 10 10) ; 用填充矩形代替描边 show-image)
方案3:resize后保留描边并加宽线条
如果想继续使用描边绘制,可加宽描边宽度确保可见:
(ns test-rect (:require [clojure2d.core :as c2d]) (:require '[clojure2d.extra.utils :refer [show-image]])) (c2d/with-canvas-> (c2d/canvas 100 100) (c2d/resize 100 100) (c2d/set-background :white) (c2d/set-color :red) (c2d/set-stroke 2) ; 设置描边宽度为2 (c2d/rect 50 50 10 10) show-image)
内容的提问来源于stack exchange,提问作者Francois
相关产品推荐
相关产品推荐

