现在我有:
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 :(得分: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的一个特点是编译器将未使用的返回值视为错误。这种情况就是原因。
所以,不要觉得这个太糟糕了:))