现在我有:
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的一件事是,编译器将未使用的返回值视为错误。正是这种情况。
所以,不要为此感到难过:)