これは、出る人と出ない人がいると思いますが、僕の方で違和感の出るくらいに表示されていたので、解決してみました。
(多くのカメラアプリのレクチャーでは、画像の保存を行うだけで、データベースの保存やディレクトリの作成、判別をしてないからかと思うのですが。。)
画像を保存した後にプレビューの画面が一瞬ですが歪んで見えます。
この原因の箇所はどうやら、takePictureのjpg生成の部分で発生がしているようでした。
前回までの流れで、「sdカードを確認⇒保存⇒カメラのプレビューを再開」でした。
ここで、カメラのプレビュー再開の時に何か問題が?
と思って、カメラのプレビューを再開をやめたらゆがみっぱなしでした。
startPreview()
に関してですが、始まるまで歪んでいるようだったので、「カメラのプレビューを再開⇒sdカードを確認⇒保存」に変更をしてみたところ歪まないで普通に表示ができました。
↓コールバックの部分
private Camera.PictureCallback mPictureListener =new Camera.PictureCallback() { public void onPictureTaken(byte[] data, Camera camera) { myCamera.startPreview(); if (data != null) { if(!sdcardWriteReady()){ Toast.makeText(context, "SDCARDが認識されません。", Toast.LENGTH_SHORT).show(); bool = true; return; } FileOutputStream foStream = null; //フォルダのパスを表示します。。 File file = new File(Environment.getExternalStorageDirectory().getPath() + "/cmr/"); //フォルダが存在しなかった場合にフォルダを作成します。 if(!file.exists()){ file.mkdir(); } //これで他のとかぶらない名前の設定ができました。 String imgName = Environment.getExternalStorageDirectory().getPath() + "/cmr/" + System.currentTimeMillis() +".jpg"; try { foStream = new FileOutputStream(imgName); foStream.write(data); foStream.close(); ContentValues values = new ContentValues(); ContentResolver contentResolver = context.getContentResolver(); values.put(Images.Media.MIME_TYPE, "image/jpeg"); values.put("_data", imgName); try { contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); }catch(Exception e){ Toast.makeText(context, "再起動後に画像が認識されます。", Toast.LENGTH_SHORT).show(); e.printStackTrace(); } } catch (Exception e) { Toast.makeText(context, "ファイルの保存中にエラーが発生しました。", Toast.LENGTH_SHORT).show(); e.printStackTrace(); } bool = true; }else{ Toast.makeText(context, "データが取得できませんでした。", Toast.LENGTH_SHORT).show(); bool = true; } } };
実際にデータをjpgに圧縮などしているのでその過程の産物なような気がします。
メモリ的な事を考えると、とめておいた方がよいような気もしますが、
また、何か分かりましたらご報告します。