2015-10-08 1 views
1

У меня есть собственное приложение для камеры с некоторыми функциями, и камера работает хорошо. Проблема с захваченными изображениями была размыта на SD-карте, а качество изображения и размеры варьируются на разных мобильных телефонах, даже пиксели камеры хороши и одинаковы. Я не знаю, в чем проблема с захватом и сохранением изображений в приложении. Я следил за рекомендациями на странице разработчиков и несколькими примерами из github.Захваченное изображение размыто в моем приложении камеры для Android.

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

Любая идея решить эту проблему была бы полезна для моей дальнейшей разработки.

Код для pictureCallBack

Camera.AutoFocusCallback autoFocusCallback = new Camera.AutoFocusCallback() { 
    @Override 
    public void onAutoFocus(boolean success, Camera camera) { 
     camera.takePicture(shutterCallback, rawPictureCallBack, null, jpegPictureCallback); 
    } 
}; 

Тема для сохранения изображений

FileOutputStream outStream = null; 
     /** 
     * Write to SD Card 
     */ 
     try { 
      File sdCard = Environment.getExternalStorageDirectory(); 
      File dir = new File(sdCard.getAbsolutePath() + "/MyCamera"); 
      dir.mkdirs(); 

      String fileName = String.format("%d.png", System.currentTimeMillis()); 
      File outFile = new File(dir, fileName); 

      outStream = new FileOutputStream(outFile); 
      outStream.write(data[0]); 
      outStream.flush(); 
      outStream.close(); 
      runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
        retrieveLastImage(); 
        showCustomAlert(); 
       } 
      }); 
      Log.d(DEBUG_TAG, "onPictureTaken - wrote bytes: " + data.length + " to " + outFile.getAbsolutePath()); 
      refreshGallery(outFile); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } finally { 
     } 
+0

Где назвать setPictureSize? – JUL2791

+0

Я пропустил этот метод для установки в параметре камеры ... Теперь у меня получилось хорошее изображение .... Спасибо Oliv – JUL2791

+0

Просто сейчас я проверил с другим мобильным телефоном, у него появилась новая проблема, когда изображение получало растяжение при захвате и сохранении тонких, а не обычных размер – JUL2791

ответ

1

Этот код выглядит нормально, я просто удивляюсь, что вы сохраните файл с расширением .png: обычно только jpeg доступен .. .

Вы звоните setPictureSize()? Вы должны назвать это, поскольку размер по умолчанию не указан и может быть слишком малым - размытым. Вы должны всегда звонить setPreviewSize().

Это сложный выбор правильных размеров. Всегда выбирайте один из размеров, возвращаемых getSupportedPictureSizes() и getSupportedPreviewSizes(). Размер предварительного просмотра должен иметь тот же формат изображения, что и SurfaceView, где вы показываете предварительный просмотр, или предварительный просмотр будет растянут. Выберите размер изображения в соответствии с вашими потребностями.

У меня было много проблем с камерой. Вы сделаете все возможное, если вы точно следуете за Google documentation, иначе камера будет вести себя странно. Он может работать на одном устройстве, но сбой на другом. Я попытался, например, установить размеры в методе onCreate активности, но это не сработало.

+0

Можете ли вы предоставить некоторую ссылку для этого, у меня такая же проблема –

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