有谁知道如何显示BitmapField?

时间:2010-12-17 02:32:01

标签: java blackberry java-me

我有一个代码将图像编码为位图。但我不确定如何在屏幕上显示它。顺便说一下,我正在使用Blackberry JavaME。这是我用来编码图像的代码。这是我用来从SD卡获取图像并将其显示在屏幕上的方式吗?

FileConnection conn = 
    (FileConnection)Connector.open("image1.png",Connector.READ_WRITE);
if(conn.exists()) {
    InputStream is = conn.openInputStream();
    BitmapField bitmap = null;
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    int ch;
    while ((ch = is.read()) != -1)
    {
        baos.write(ch);
    }
    byte imageData[] = baos.toByteArray();
    bitmap = new BitmapField(
        EncodedImage.createEncodedImage(imageData, 0, imageData.length).getBitmap());
    add(bitmap);
}

2 个答案:

答案 0 :(得分:3)

Secko是正确的,你可以覆盖绘画,但我认为你因为没有创建一个ui应用程序而陷入困境。

这是一个非常简单的用于显示位图字段的ui应用程序示例,如果你完全复制它,你需要在src下面有一个images.png的图像文件夹。

这是从SDK附带的HelloWorldDemo中修改的。我建议如果你刚刚开始,你看看文件夹中的样本。 \插件\ net.rim.ejde.componentpack5.0.0_5.0.0.25 \组件\样品\

祝你好运

public class DisplayBitmaps extends UiApplication
{
    public static void main(String[] args)
    {
        DisplayBitmaps theApp = new DisplayBitmaps();       
        theApp.enterEventDispatcher();
    }

    public DisplayBitmaps()
    {        
        pushScreen(new DisplayBitmapsScreen());
    }    
}

final class DisplayBitmapsScreen extends MainScreen
{
    DisplayBitmapsScreen()
    {    
     Bitmap bitmap = EncodedImage.getEncodedImageResource("images/image.png").getBitmap();
     BitmapField bitmapField = new BitmapField(bitmap);
        add(bitmapField);
    }

    public void close()
    {  
        super.close();
    }   
}

编辑图像在SD卡上时

DisplayBitmapsScreen()
{    
 //Bitmap bitmap = EncodedImage.getEncodedImageResource("images/image.png").getBitmap();
 try {
  FileConnection fc = (FileConnection) Connector.open("file:///SDCard/BlackBerry/pictures/image.png");
  if (fc.exists()) {
   byte[] image = new byte[(int) fc.fileSize()];
   InputStream inStream = fc.openInputStream();
   inStream.read(image);
   inStream.close();
   EncodedImage encodedImage = EncodedImage.createEncodedImage(image, 0, -1);
   BitmapField bitmapField = new BitmapField(encodedImage.getBitmap());
   fc.close();
   add(bitmapField);
  }
 } catch (Exception e) { System.out.println("EXCEPTION " + e); }
}

在Field或任何扩展中覆盖绘制Field类也可以显示图像,但是我从Secko的示例中并没有真正理解他将显示图像,因此我在下面的示例中包含了drawImage。

protected void paint(Graphics graphics) {
   graphics.drawImage(x, y, width, height, image, frameIndex, left, top);
   super.paint(graphics);
}

答案 1 :(得分:0)

你可以用:

  

paint(Graphics g);

也许是在一个功能中:

protected void DrawStuff(Graphics g) {              
    this.paint(g);
}