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
相关产品推荐
相关产品推荐

