3

现在我有:

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

4

1 回答 1

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 及更高版本,我认为 scaleInto() API 更易于使用

2)这种情况是人们对方法名称大惊小怪的原因。RIM 为 选择了一个糟糕的名称scaleImage32(),因为这使您相信您调用该方法的实例将被缩放。它应该被命名为getScaledImage32(),或类似的名称。

3)在我不好意思承认的晦涩的编程内容的标题下,我曾经在Ada中编码。Ada 致力于尽可能地防止编程错误。Ada 的特色之一是编译器将未使用的返回值视为错误。这种情况正是原因。

所以,不要对这个感到太难过:)

于 2013-01-24T03:05:12.027 回答