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

Smalltalk(Pharo)中ImageMorph缩放方法求助

在Pharo中正确缩放Image Morph的方法

看起来你遇到的问题是调用resize:方法只是调整了ImageMorph的容器大小,但并没有真正缩放内部的图片(Form)。这是因为resize:本质上是设置morph的边界尺寸,而不会修改它持有的Form对象的大小,所以图片还是保持原始尺寸,可能只是被裁剪或者居中显示在新的morph边界里了。

下面给你两种可行的解决方案:

方法1:先缩放Form再赋值给ImageMorph

直接对加载的Form进行缩放,然后再设置给ImageMorph,这样整个morph会适配缩放后的Form大小:

initialize | originalForm scaledForm |
super initialize.
originalForm := ImageReadWriter formFromFileNamed: 'face.png'.
scaledForm := originalForm scaledToSize: 100@100. "直接缩放Form到目标尺寸"
self image: scaledForm.
self position: 100@100.

方法2:使用ImageMorph的scaleBy:方法

ImageMorph提供了专门的缩放方法scaleBy:,它会同时缩放内部的Form并调整morph的大小:

initialize | originalForm scaleFactor |
super initialize.
originalForm := ImageReadWriter formFromFileNamed: 'face.png'.
self image: originalForm.
self position: 100@100.
scaleFactor := 100.0 / originalForm width. "计算缩放比例,这里以宽度适配100为例"
self scaleBy: scaleFactor asPoint. "也可以直接用比如0.5@0.5这样的固定比例"

另外补充个小细节:规范上建议先调用super initialize再执行自定义初始化逻辑,这样能确保父类的初始化流程先完成~

内容的提问来源于stack exchange,提问作者user8190738

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:13:32