Обработка разных разрешений экрана в Blackberry с одним изображением

У меня есть одно изображение PNG, и я применяю его ко всем экранам в качестве фона. Его разрешение составляет 360x480, потому что я начал программировать для симулятора 9800. Разрабатываю для ОС 6.0. Когда я тестирую свое приложение для симулятора 9700 с разрешением экрана 480x360, изображение покрывает только половину экрана. Я изучил и узнал об использовании Fixed32 и scale, а также применил его. Но все же фон, кажется, вызывает проблему. У меня есть только одно изображение в папке ресурсов. Как правильно использовать это изображение для всех устройств BlackBerry


person Rashmi.B    schedule 24.09.2011    source источник


Ответы (2)


Вам необходимо изменить размер изображения в соответствии с шириной и высотой экрана, чтобы он соответствовал экрану, на котором вы работаете.

Для этого будут использоваться следующие методы.

public static EncodedImage sizeImage(EncodedImage image, int width, 
              int height) {
              EncodedImage result = null;

              int currentWidthFixed32 = Fixed32.toFP(image.getWidth());
              int currentHeightFixed32 = Fixed32.toFP(image.getHeight());

              int requiredWidthFixed32 = Fixed32.toFP(width);
              int requiredHeightFixed32 = Fixed32.toFP(height);

              int scaleXFixed32 = Fixed32.div(currentWidthFixed32,
                requiredWidthFixed32);
              int scaleYFixed32 = Fixed32.div(currentHeightFixed32,
                requiredHeightFixed32);

              result = image.scaleImage32(scaleXFixed32, scaleYFixed32);
              return result;
             }

После изменения размера используйте приведенный ниже метод обрезки.

public static Bitmap cropBitmap(Bitmap original, int width, int height) {
        Bitmap bmp = new Bitmap(width, height);

         int x = (original.getWidth() / 2) - (width / 2); // Center the new size by width
        int y = (original.getHeight() / 2) - (height / 2); // Center the new size by height
        int[] argb = new int[width * height]; 
        original.getARGB(argb, 0, width, x, y, width, height);
        bmp.setARGB(argb, 0, width, 0, 0, width, height);
        return bmp;

Создайте растровое изображение следующим образом.

 EncodedImage  eImage = EncodedImage.getEncodedImageResource("img/new.png" );
 EncodedImage bitimage=sizeImage(eImage,Display.getWidth(),Display.getHeight());

 Bitmap image=cropBitmap(bitimage.getBitmap(),Display.getWidth(),Display.getHeight());

передать выше растровое изображение вашему менеджеру.

Теперь установите возвращенное растровое изображение в качестве фона для экрана. У меня это сработало. Надеюсь, это поможет вам.

person koti    schedule 24.09.2011
comment
Спасибо за быстрый ответ Коти. В настоящее время я использую getMainManager (). SetBackground (BackgroundFactory.createBitmapBackground (Bitmap.getBitmapResource (bgplain.png))); для добавления изображения к фону. Я добавил ваш код в свою программу. Есть ли какие-то предварительные условия, необходимые для работы? Я заменил Bitmap.getBitmapResource (bmp) .... но это выдает мне ошибку. Не могли бы вы посоветовать мне, как мне получить доступ к возвращенному значению растрового изображения? - person Rashmi.B; 24.09.2011
comment
Я понял насчет передачи растрового изображения менеджеру .... но с вашим кодом выше я буду отправлять eImage, bitimage, image или bmp ?? С вашим последним ответом я предполагаю, что я должен передать bmp ... но как мне связать его с другими объектами изображений, которые вы создаете? - person Rashmi.B; 24.09.2011
comment
В функции cropbitmap вы использовали первый параметр как Bitmap, а в Bitmap image = cropBitmap (...) вы передаете объект EncodedImage. Это вызывает ошибку. - person Rashmi.B; 24.09.2011
comment
позвольте нам продолжить это обсуждение в чате - person koti; 24.09.2011
comment
Растровое изображение = cropBitmap (растровое изображение, Display.getWidth (), Display.getHeight ()); Когда я использую приведенный выше код, он говорит, что метод «Change method ' - person Rashmi.B; 24.09.2011
comment
Bitmap _bmap = bitimage.getBitmap (); добавьте этот код перед вызовом функции обрезки - person koti; 24.09.2011

Чтобы установить изображение с необходимой шириной и высотой, используйте Масштаб растрового изображения; И если вы хотите поместить свое изображение в качестве фона, поместите растровое изображение в VerticalFieldManager следующим образом: Для всех устройств это работает:

Bitmap bit=Bitmap.getBitmapResource("background.png");
Bitmap scalingBitmap=new Bitmap(Device.getWidth(),Device.getHeight());  //here you can give any size.Then it sets the image according to your required width and height;
bit.scaleInto(scalingBitmap, Bitmap.FILTER_LANCZOS);  //This is important;
VerticalFieldManager mainVertical=new VerticalFieldManager()
{
     //Here Device.getWidth() and Device.getHeight(); These two are your Blackberry Device width and height;(According your 9800 it takes 480x360)
    protected void paint(Graphics g) 
    {
        g.clear();
        g.drawBitmap(0, 0, Device.getWidth(),Device.getHeight(), scalingBitmap, 0, 0); 
        super.paint(g);
    }
    protected void sublayout(int maxWidth, int maxHeight) 
    {               
        super.sublayout(Device.getWidth(),Device.getHeight());
        setExtent(Device.getWidth(),Device.getHeight());
    }
};
add(mainVertical);

Достаточно.

person alishaik786    schedule 01.10.2011