2012-11-05 69 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:字段輸入返回該自定義視圖的類中的方法名稱。您可能希望在創建實例變量時將其緩存在實例變量中。 –