Почему часть изображения обрезается при съемке с этим кодом на Blackberry? - PullRequest
0 голосов
/ 13 сентября 2011

Когда я делаю снимок на симуляторе (еще не пробовал устройство), результат составляет только половину изображения, а остальное серое.Кто-нибудь знает почему?Спасибо

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 голосов
/ 13 сентября 2011

input.read(data) читает только некоторое количество данных, но не все. Если вы хотите прочитать весь файл, используйте вместо него IOUtilities.streamToBytes(input);, например:

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

0 голосов
/ 13 сентября 2011

Я столкнулся с той же проблемой. Просто используйте:

synchronized(UiApplication.getEventLock()) {
    //your code here
}
0 голосов
/ 13 сентября 2011
byte[] data = new byte[(int) fconn.fileSize() + 1000];
...
pic = Bitmap.createBitmapFromBytes(data, 0, -1, 1);

Я думаю, data теперь содержит последние неправильные 1000 байтов, попробуйте изменить на:

byte[] data = new byte[(int) fconn.fileSize()];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...