在BlackBerry BitmapField上设置宽度和高度

时间:2012-08-28 09:28:51

标签: blackberry java-me

如何在BlackBerry中设置BitmapField的宽度和高度?以下代码有效,但我无法显示整个图像。显示屏仅显示我图像的某些部分。

 BitmapField bmp = new BitmapField(connectServerForImage(ImageUrl)) {
       protected void layout(int width, int height) 
       {
          setExtent(80, 70);
       }
 };

2 个答案:

答案 0 :(得分:2)

我认为你说你的BitmapField正在显示你检索到的图像裁剪

你希望它可以扩展,也许缩放到适合BitmapField的大小?有很多方法可以做到这一点,但一种方法是在下载后调整图像大小,然后再将其提供给BitmapField

From this answer on resizing a Bitmap

public static Bitmap resizeImage(Bitmap originalImage, int newWidth, int newHeight) {
    Bitmap newImage = new Bitmap(newWidth, newHeight);
    originalImage.scaleInto(newImage, Bitmap.FILTER_BILINEAR, Bitmap.SCALE_TO_FILL);
    return newImage;
}

(请注意,如果您必须支持BlackBerry OS< 5.0,我提供的链接有另一种调整图像大小的方法。

然后,使用

Bitmap img = resizeImage(connectServerForImage(ImageUrl), 80, 70);
BitmapField bmp = new BitmapField(img) {
       protected void layout(int width, int height) 
       {
          setExtent(80, 70);
       }
};

但是,我相信如果你实际上将Bitmap img的大小设置为80x70,那么就不需要设置{{1}的范围到80x70。它应该默认为您提供的图像的大小。因此,您可以将代码简化为:

BitmapField

答案 1 :(得分:0)

 int prefWidth=(30*bitmap.getWidth())/bitmap.getHeight();
 Bitmap temp=resizeBitmap(bitmap,prefWidth,30);

,其中

 private Bitmap resizeBitmap(Bitmap image, int width, int height)
{   

    int rgb[] = new int[image.getWidth()*image.getHeight()];
    image.getARGB(rgb, 0, image.getWidth(), 0, 0, image.getWidth(), image.getHeight());
    int rgb2[] = rescaleArray(rgb, image.getWidth(), image.getHeight(), width, height);
    Bitmap temp2 = new Bitmap(width, height);
    temp2.setARGB(rgb2, 0, width, 0, 0, width, height);
    return temp2;
}

这支持bb os 4.5