2013-08-08 11 views
0

Когда я пытаюсь загрузить изображения с телефона memmory, я получаю Out Of Memory errorjava/lang/OutOfMemoryError или nativedecodeImage. Некоторые изображения в памяти телефона составляют 12kd, а некоторые другие - около 589kb или 600kb. Изображения небольшого размера выбираются в список, но когда дело доходит до изображений большего размера, они бросают ошибку OOM .. ??Как справиться с OutOfMemoryError

Это мой код

FileConnection finalConnection; 
try 
    {  
     fc.close(); 
     finalConnection = (FileConnection) Connector.open(path, Connector.READ_WRITE); 
     if(finalConnection.exists()) 
     { 
      InputStream fis = finalConnection.openInputStream(); 
      long overallSize = finalConnection.fileSize(); 
      int length = 0; 
      byte[] imageData = new byte[0]; 
      while (length < overallSize) 
      { 
       byte[] data = new byte[CHUNK_SIZE]; 
       int readAmount = fis.read(data, 0, CHUNK_SIZE); 
       byte[] newImageData = new byte[imageData.length + CHUNK_SIZE]; 
       System.arraycopy(imageData, 0, newImageData, 0, length); 
       System.arraycopy(data, 0, newImageData, length, readAmount); 
       imageData = newImageData; 
       length += readAmount; 
      } 
      fis.close(); 
      finalConnection.close(); 
      System.out.println("LENGTH IS " + length); 
      if (length > 0) 
      {      
       image = Image.createImage(imageData, 0, length); 

      } 
     } 
     else 
     { 
      System.out.println("NO PATH FOR IMAGE"); 
     } 
    } 
catch (Exception e) 
    { 
     System.out.println("Image.createImage(imageData, 0, length) " +e.toString()); 
    } 
catch(Error e) 
{ 
    System.out.println("Image.createImage " + e); 
}   

Точка, в которой я получаю ошибки в

image = Image.createImage(imageData, 0, length); 

Кто-нибудь есть идеи по этому поводу. Я застрял с этой штукой в ​​течение нескольких дней. Работаю на устройствах S40 Nokia 311. Netbeans MIDP 2.0

ответ

0

Ключ в порядке исключения ... изображения, которые вы открываете, слишком велики для хранения в памяти. Помните, что сжатый размер изображения не обязательно указывает, можно ли его удерживать или нет, это на самом деле связано с количеством пикселей.

Если он слишком велик, вы не можете многое сделать ... если вы хотите отобразить изображение на экране, вам нужно сначала обработать его, чтобы сжать его, прежде чем вы сможете загрузить его в память.

0

Большинство устройств с поддержкой только JavaME ограничены в этом отношении, и вы не можете ничего сделать, чтобы загружать изображения такого размера.

Но, возможно, вам это не нужно.

Многие камеры создают уменьшенную версию изображений, которые они берут, и включают этот миниатюру в данные EXIF. Поэтому, когда вам нужно отобразить список фотографий на телефоне, вы не загружаете целые фотографии. Вы просто загружаете данные эскиза из данных exif в файл.

Я только коротко экспериментировал с этим, но в тот же день. Нашел несколько примеров исходных кодов онлайн, которые должны были сделать трюк, но он редко работал. Вероятно, это было частично потому, что телефоны, которые я тестировал, не сохранили миниатюру в данных exif. Может быть, Аша 311?

Смежные вопросы