Пользовательское поле Blackberry drawBitmap не использует все пространство - PullRequest
1 голос
/ 05 декабря 2011

Я рисую Bitmap в качестве фона для настраиваемого поля, но он не рисует растровое изображение во всей области поля.Я тоже изменил размер изображения, но оно всегда оставляет свободное место справа и снизу.Вот как это выглядит:

enter image description here

Вот некоторый код для рисования:

public int getPreferredWidth(){
    return phoneWidth;
}

public int getPreferredHeight(){
    return cellHeight;
}

protected void paint(Graphics g) {
    Bitmap img = Bitmap.getBitmapResource("cell_bg.png");        
    img.scaleInto(new Bitmap(phoneWidth, cellHeight), Bitmap.SCALE_TO_FIT);//or other scaling methods
    g.drawBitmap(0, 0, phoneWidth, cellHeight, img, 0, 0);//draw background
//other steps
}

Это прекрасно работает, если установить Background следующим образом:

Background bg = BackgroundFactory.createBitmapBackground(Bitmap.getBitmapResource("cell_bg.png"),0,0,Background.REPEAT_SCALE_TO_FIT);
this.setBackground(bg);

но при этом фоновое изображение не видно onFocus.

Что я здесь не так делаю?

Ответы [ 3 ]

1 голос
/ 07 декабря 2011

создайте закодированное изображение, затем передайте это закодированное изображение в функцию scaleImage ()

EncodedImage ei = EncodedImage.getEncodedImageResource("res/helpscreen.png");   
        EncodedImage ei1= scaleImage(ei,Graphics.getScreenWidth(),Graphics.getScreenHeight());  


  public EncodedImage scaleImage(EncodedImage source, int requiredWidth, int requiredHeight) 
    {  
        int currentWidthFixed32 = Fixed32.toFP(source.getWidth());  
        int requiredWidthFixed32 = Fixed32.toFP(requiredWidth);  
        int scaleXFixed32 = Fixed32.div(currentWidthFixed32, requiredWidthFixed32);  
        int currentHeightFixed32 = Fixed32.toFP(source.getHeight());  
        int requiredHeightFixed32 = Fixed32.toFP(requiredHeight);  
        int scaleYFixed32 = Fixed32.div(currentHeightFixed32, requiredHeightFixed32);  
        return source.scaleImage32(scaleXFixed32, scaleYFixed32);  
    } 

тогда получите это растровое изображение

 BitmapField logoBitmap = new BitmapField(ei1.getBitmap());  
1 голос
/ 07 декабря 2011

Проблема здесь в том, что вы неправильно использовали scaleInto().

Попробуйте это так:

Bitmap img = Bitmap.getBitmapResource("cell_bg.png");
Bitmap scaled = new Bitmap(phoneWidth, cellHeight);         
img.scaleInto(scaled, Bitmap.SCALE_TO_FIT);//or other scaling methods
g.drawBitmap(0, 0, phoneWidth, cellHeight, scaled, 0, 0);// here draw the scaled image(You here draw the old one)

scaled растровое изображение выдается в качестве вывода, НЕ оригинальное изображение.

0 голосов
/ 06 декабря 2011

Используйте этот метод для масштабирования изображения в вашем коде:

  private Bitmap getScaledBitmap(String imageName, int width, int height)
  {
      try { 
          EncodedImage image = EncodedImage.getEncodedImageResource(imageName);
          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);
          image = image.scaleImage32(scaleXFixed32, scaleYFixed32);
          return image.getBitmap();
      } catch(Exception e) {
          return null; // unable to resize the image
      }    
  }
...