现在我有:

    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()显示一半大小的图像的正确方法是什么?

最佳答案

不幸的是,您被笨拙的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的一件事是,编译器将未使用的返回值视为错误。正是这种情况。

所以,不要为此感到难过:)

10-02 05:55