2009-12-02 3 views
1

J'essaye de développer une petite application semblable à une carte pour blackberry. J'ai besoin de savoir comment puis-je positionner une petite image sur une autre image beaucoup plus grande. La plus grande image est comme une carte, j'aurai besoin d'utiliser la petite image pour épingler une position spécifique sur la carte. L'image la plus petite doit donc être superposée à l'image la plus grande. En même temps, je devrai déplacer la carte, et l'image plus petite devrait suivre cette position sur la carte.Application Blackberry, comment ajouter une image au-dessus d'un autre fichier image?

Est-ce que quelqu'un sait s'il existe une API spécifique pour ce problème?

Répondre

0

Sur le Blackberry (et d'autres appareils mobiles Java), vous pouvez empiler autant de bitmaps que vous le souhaitez. Assurez-vous que le bitmap que vous dessinez sur le premier contient des pixels transparents permettant de voir des bits traversants et des formes irrégulières.

La meilleure façon est d'utiliser png8 avec l'une des couleurs définies comme complètement transparentes.

Les téléphones plus modernes permettent des valeurs alpha de nos jours, qui peuvent être utilisées pour des effets semi-transparents. Pour essayer si votre Blackberry le supporte aussi, utilisez une image png32 pour le second bitmap et assurez-vous que certains pixels ont des valeurs alpha semi-transparentes (128 par exemple).

+0

Savez-vous s'il y a une API spécifique pour Blackberry? – user222684

1
échantillon

de bitmap de l'icône de position au-dessus du centre de la carte bitmap:

class Scr extends MainScreen { 
    Bitmap mMapBitmap = Bitmap.getBitmapResource("map.png"); 
    Bitmap mIconBitmap = Bitmap.getBitmapResource("icon.png"); 

    Bitmap getOverlappedBitmap(Bitmap map, Bitmap icon) { 
     Graphics g = new Graphics(map); 
     int width = icon.getWidth(); 
     int height = icon.getHeight(); 
     int x = (map.getWidth() - width)/2; 
     int y = (map.getHeight() - height)/2; 
     g.drawBitmap(x, y, width, height, icon, 0, 0); 
     return map; 
    } 

    public Scr() { 
     add(new BitmapField(getOverlappedBitmap(mMapBitmap, mIconBitmap))); 
    } 
} 
  • créer gamme de bitmaps
  • créer des graphiques de nouveau bitmap et tirer toutes les bitmaps avec définie valeur alpha
  • utiliser la classe personnalisée PNGEncoder pour enregistrer bitmap image au format PNG

Voir un exemple

class Scr extends MainScreen { 
Bitmap[] images = new Bitmap[0]; 

int width = Display.getWidth(); 
int height = Display.getHeight(); 
Bitmap bitmap = new Bitmap(width, height); 
BitmapField bitmapField = new BitmapField(bitmap); 

public Scr() { 
    add(bitmapField); 
} 

MenuItem mAddBitmap = new MenuItem("Add image", 0, 0) { 
    public void run() { 
    Bitmap image = Bitmap.getBitmapResource("img" + (images.length + 1) 
    + ".png"); 
    Arrays.add(images, image); 
    refresh(); 
    } 
}; 

MenuItem mClean = new MenuItem("Clean", 0, 0) { 
    public void run() { 
    images = new Bitmap[0]; 
    refresh(); 
    } 
}; 

MenuItem mSave = new MenuItem("Save", 0, 0) { 
    public void run() { 
    String mFileName = System.getProperty("fileconn.dir.photos") 
    + "test.bmp"; 

    // bitmap to byte array conversion 
    byte[] bitmapBuffer = new byte[0]; 
    PNGEncoder encoder = new PNGEncoder(bitmap, true); 
    try { 
    bitmapBuffer = encoder.encode(true); 
    } catch (IOException e) { 
    e.printStackTrace(); 
    } 

    writeFile(bitmapBuffer, mFileName); 
    } 
}; 

private void writeFile(byte[] data, String fileName) { 
    FileConnection fconn = null; 
    try { 
    fconn = (FileConnection) Connector.open(fileName, 
    Connector.READ_WRITE); 
    } catch (IOException e) { 
    System.out.print("Error opening file"); 
    } 

    if (fconn.exists()) 
    try { 
    fconn.delete(); 
    } catch (IOException e) { 
    System.out.print("Error deleting file"); 
    } 
    try { 
    fconn.create(); 
    } catch (IOException e) { 
    System.out.print("Error creating file"); 
    } 
    OutputStream out = null; 
    try { 
    out = fconn.openOutputStream(); 
    } catch (IOException e) { 
    System.out.print("Error opening output stream"); 
    } 

    try { 
    out.write(data); 
    } catch (IOException e) { 
    System.out.print("Error writing to output stream"); 
    } 

    try { 
    fconn.close(); 
    } catch (IOException e) { 
    System.out.print("Error closing file"); 
    } 
} 

void refresh() { 

    bitmap = new Bitmap(width, height); 

    Graphics g = new Graphics(bitmap); 

    for (int i = 0; i < images.length; i++) { 
    g.setGlobalAlpha(100); 
    g.drawBitmap(0, 0, width, height, images[i], 0, 0); 
    } 

    bitmapField.setBitmap(bitmap); 
} 

protected void makeMenu(Menu menu, int instance) { 
    super.makeMenu(menu, instance); 
    menu.add(mAddBitmap); 
    menu.add(mSave); 
    menu.add(mClean); 
} 
}