2012-11-05 64 views
2

什么是在画布上显示图形图像的正确方法? 我有对象aImage从:visualworks smalltalk在画布上显示图形图像

(...)superclass: #{UI.ApplicationModel}(...) 

和方法初始化:

initialize 
|img gc| 
img:=(ImageReader fromFile: 'clockface.jpg') image. 
img convertForGraphicsDevice: Screen default. 
gc := ScreenGraphicsContext new. 
img displayOn: gc. 
gc displayOn: self. 

但我

(ImageReader fromFile: 'clockface.jpg') image. 

我经由GUIBuilder(新canvas->安装)新类称为ClockWindow制成出现错误: messageNotUnderstatood:representImage:anImage forMedium:medium 符合:“img displayOn:gc。”

回答

0

最简单的方法是在图像上使用标签。具体方法如下:

  1. 定义一个类的方法叫做钟面返回图像
clockFace 
    <resource: #image> 
    ^(ImageReader fromFile: 'clockface.jpg') image 
  1. 一个标签添加到UI

  2. 点击 “标签IS影像”

  3. 对于该消息,请使用#clockFace

从文件中始终加载时钟面部图像的速度会很慢。要解决该问题,请转到clockFace方法,选择“编辑”,然后在ImageEditor中使用“安装”。这将替换从文件中加载图像的代码和将图像存储在方法中的等效方法。

对于额外的布朗尼点,您可以创建另一个类方法来为您提供CachedImage。 CachedImage将更快地在用户界面上重新显示,因为每次显示时都不必将图像转换为屏幕的调色板。只需创建一个名为clockFaceCachedImage这样一类方法:

clockFaceCachedImage 
    ^CachedImage on: self clockFace 

现在,您可以使用clockFaceCachedImage作为标签的消息。

+0

所以。我们升级吧。我想在图形上下文中绘制一些形状和图像。如何将此上下文显示为画布的一部分(GuiPainter)? – borovsky

+0

为此您需要自定义视图。创建视图的子类并覆盖displayOn:在图形上下文中绘制图形。要将其添加到UIPainter窗口中,请添加一个viewHolder,并为View:字段输入返回该自定义视图的类中的方法名称。您可能希望在创建实例变量时将其缓存在实例变量中。 –