2013-01-24 34 views
3

現在我有:如何通過scaleImage32()將圖像縮小爲一半大小?

EncodedImage logo = EncodedImage.getEncodedImageResource("image.png"); 
    logo.scaleImage32(Fixed32.toFP(2), Fixed32.toFP(2)); 
    BitmapField image = new BitmapField(logo.getBitmap()); 
    image.setMargin(15, 15, 15, 15); 
    this.add(image); 

,它只是在正常大小顯示圖像。但是,logo.setScale(2)的作品而不是.scaleImage32(...),但不推薦使用。

什麼是正確的方式來使用.scaleImage32()來顯示我的圖像的一半大小?

+0

雖然你是正確的,當我說「一半大小」我說的是它的尺寸,而不是它的面積。 – WOUNDEDStevenJones

回答

3

不幸的是,你被一個糟糕的API所吸引,在我看來,Java(以及所有C語言)的弱點。

你以爲scaleImage32()是縮放你的logo圖像。事實並非如此。它正在返回縮放的logo的副本。然而,你對這個價值沒有做任何事情。你在你的位圖字段,用來logo顯示,當你真正需要的縮放副本scaleImage32()回報:

EncodedImage logo = EncodedImage.getEncodedImageResource("image.png"); 
EncodedImage scaledLogo = logo.scaleImage32(Fixed32.toFP(2), Fixed32.toFP(2)); 
BitmapField image = new BitmapField(scaledLogo.getBitmap()); 

我會加幾件事情:

1)如果你可以限制你的應用程序到OS 5.0及以上,我think that the scaleInto() API is easier to use

2)這種情況是人們爲什麼在方法名稱上大驚小怪。 RIM爲scaleImage32()選擇了一個可憐的名字,因爲這會導致您相信您調用該方法的實例將被縮放。它應該被命名爲getScaledImage32(),或者類似的東西。

3)在的標題下,我很尷尬地承認,我用Ada編碼。 Ada的目標是儘可能地避免編程錯誤。 Ada的一個特色是編譯器將一個未使用的返回值視爲錯誤。這種情況正是爲什麼。

所以,不要覺得太糟糕了這一個:)