如何使用scaleImage32()缩小图像大小的一半?

时间:2013-01-24 01:05:13

标签: blackberry java-me bitmap image-resizing

现在我有:

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

1 个答案:

答案 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的一个特点是编译器将未使用的返回值视为错误。这种情况就是原因。

所以,不要觉得这个太糟糕了:))