You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 11:27:32