在Blackberry上使用此代码拍照时,为什么要删除部分图像?

时间:2011-09-12 22:55:29

标签: image blackberry camera

当我在模拟器上拍照时(尚未尝试过设备),结果只有不到图像的一半,其余部分是灰色的。有谁知道为什么? 谢谢

listener = new FileSystemJournalListener()
    {
        private long _lastUSN;
        public void fileJournalChanged()
        {

            long nextUSN = FileSystemJournal.getNextUSN();
            FileSystemJournalEntry entry =           FileSystemJournal.getEntry(nextUSN - 1);
            nextUSN++;
            switch (entry.getEvent()) {
            case FileSystemJournalEntry.FILE_ADDED:

                 try
                {
                    FileConnection fconn = (FileConnection)Connector.open("file://" +entry.getPath());

                    if(fconn.exists())
                    {



                    InputStream input = null;
                        input = fconn.openInputStream();
                        byte[] data = new byte[(int) fconn.fileSize() + 1000];

                        input.read(data);
                        rawImage = data;
                     pic = Bitmap.createBitmapFromBytes(data, 0, -1, 1);
                        if(input != null)
                        {
                        input.close();
                        }




                      Bitmap[] images = new Bitmap[1];
                       images[0] = pic;

                        //labels[1] = "Label for image 2";
                     //   tooltips[1] = "Tooltip for image 2";

                      //  labels[2] = "Label for image 2";
                       // tooltips[2] = "Tooltip for image 2";

                        ScrollEntry[] entries = new ScrollEntry[images.length];

                             entries[0] = new ScrollEntry(images[0], "", "");


                        PictureScrollField pictureScrollField = new PictureScrollField(175, 131);
                        pictureScrollField.setData(entries, 0);
                        pictureScrollField.setHighlightStyle(HighlightStyle.ILLUMINATE_WITH_SHRINK_LENS);
                       // pictureScrollField.setHighlightBorderColor(Color.BLUE);

                       pictureScrollField.setBackground(BackgroundFactory.createSolidTransparentBackground(Color.BLACK, 150));



                        insert(pictureScrollField, 1); 
                        picTaken = true;
                        EventInjector.KeyEvent inject = new EventInjector.KeyEvent(EventInjector.KeyEvent.KEY_DOWN, Characters.ESCAPE, 0, 50);                      
                        inject.post();                      
                        inject.post();
                    }   

                break;
                }    
                     catch (Exception e)
                        {
                            // TODO Auto-generated catch block
                            Dialog.alert(e.toString());
                        }   
                //either a picture was taken or a picture was added to the BlackBerry device 


            case FileSystemJournalEntry.FILE_DELETED:
                //a picture was removed from the BlackBerry device;
                break;
            }

3 个答案:

答案 0 :(得分:0)

byte[] data = new byte[(int) fconn.fileSize() + 1000];
...
pic = Bitmap.createBitmapFromBytes(data, 0, -1, 1);

我认为data现在包含最后错误的1000个字节,请尝试更改为:

byte[] data = new byte[(int) fconn.fileSize()];

答案 1 :(得分:0)

input.read(data)只读取一些数据,而不是全部数据。如果您想阅读整个文件,请改用IOUtilities.streamToBytes(input);,如下所示:

byte[] data = IOUtilities.streamToBytes(input);

答案 2 :(得分:0)

我遇到了同样的问题。只需使用:

synchronized(UiApplication.getEventLock()) {
    //your code here
}