Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

Android:画像が保存されない

初めて利用させていただきます。
EclipseでAndroidのカメラアプリを製作しています。
私はまだ初めて3か月程度の理解の浅い初心者です。

現在、アウトカメラで撮影・保存した後に
インカメラに切り替えて撮影・保存をする
アプリを作りたいと考えています。
しかしインカメラの画像は保存されるのですが、
アウトカメラの画像が保存されなくて困っています。


プログラミングの流れは
タッチイベントの取得→TakePicture→オートフォーカ
ス→撮影・保存→インカメラに切り替え
→TakePicture→即撮影・保存
となるように考えています。


開発環境はWindows7 64bit、Eclipseはバージョン4.2、
実機はGalaxy S4 でAndroid 4.2.2です。


また、現在エラーは出ていません。
カメラの切り替えを除いてアウトカメラだけで
撮影した場合は画像が保存されました。

takepictureは連続で使うことができないのでしょうか?
調べてみても理解できなかったので、
質問をさせて頂きました。
よろしくお願いいたします。

3

回答

13250

閲覧

3件の回答

評価

0

ソースの提示はできないのでしょうか?

アウトカメラが保存されていないというのはどのようにし
て判断されているのでしょう?

アウト→インではなく逆のパターンではどうでしょう?

インだけで撮影した場合はどうでしょう?

評価

0

返信ありがとうございます。

指定した保存先にアウトカメラの画像が保存されないか
らです。
逆のパターンでもだめでした。

インだけの場合は保存することができました。

長くなってしまうのですが、
ソースは以下です。

public boolean onTouchEvent(MotionEvent event)
    {
        //タッチイベント取得
 if(event.getAction() == MotionEvent.ACTION_DOWN)
        {
            Log.d(TAG, 
"CameraView::onTouchEvent()");
            TakePicture();          //撮影
            }
        return true;
    }
 
    public void TakePicture()
    {
        Log.d(TAG, "CameraView::takePicture()");    
        if(_nReady != 0)
        {
            _nReady = 0;
            if(true)
            {
                //オートフォーカス撮影
                
_Camera.autoFocus(_pfnAutoFocusCallback);
            }}
            else
            {
                     //即撮影
                       
_Camera.takePicture(_pfnShutterCallback, 
_pfnRawPictureCallback,mPictureListener);
            
        }
    }
 
    private Camera.AutoFocusCallback    
_pfnAutoFocusCallback = new AutoFocusCallback();
 
    private final class AutoFocusCallback 
implements Camera.AutoFocusCallback
    {
        public void onAutoFocus(boolean success, 
Camera camera)
        {
            Log.d(TAG, 
"CameraView::onAutoFocus()");
 
            camera.autoFocus(null);
            
camera.takePicture(_pfnShutterCallback, 
_pfnRawPictureCallback,new JpgPictureCallback());
            if(N == 1);{
            SwitchCamera1();
            }
            TakePicture();
        };
    }
 
    public void SwitchCamera1()
    {
        if (_Camera != null) {
            _Camera.stopPreview();
            try {
                _Camera.setPreviewDisplay(null);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            _Camera.release();
            _Camera = null;
        }
        // カメラを切り替え
        _Camera = Camera
                
.open(CameraInfo.CAMERA_FACING_FRONT);
        try {
            
_Camera.setPreviewDisplay(_SurfaceHolder);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        // プレビュー再開
        _Camera.startPreview();
        _nReady = 0;
        }
 
    private ShutterCallback     
_pfnShutterCallback = new ShutterCallback();
 
    private final class ShutterCallback implements 
android.hardware.Camera.ShutterCallback
    {
        public void onShutter()
        {
            Log.d(TAG, "CameraView::onShutter()");
        }
    };
 
 
 
    private RawPictureCallback  
_pfnRawPictureCallback = new RawPictureCallback();
    
    private final class RawPictureCallback 
implements PictureCallback
    {
        public void onPictureTaken(byte [] 
rawData, android.hardware.Camera camera)
        {
            Log.d(TAG, 
"CameraView::onRawPictureTaken()");
        };
    }
    
    private final class JpgPictureCallback 
implements PictureCallback
    {
        public void onPictureTaken(byte [] data, 
android.hardware.Camera camera)
        {
            Log.d(TAG, 
"CameraView::onJpgPictureTaken()");
 
            String  strFolder;
            String  strFile;
 
            strFolder = 
Environment.getExternalStorageDirectory()+"/DCIM/C
amera/";
 
            //保存ファイル名
            strFile = strFolder + "test" + 
_nShotNo + ".jpg";
            try
            {
                FileOutputStream    cFile = new 
FileOutputStream(strFile);
                cFile.write(data);
                cFile.close();
 
                long    nDate;
                ContentValues values = new 
ContentValues();
 
                nDate = 
System.currentTimeMillis();
                
values.put(Images.Media.MIME_TYPE,"image/jpeg");            
//必須
                
values.put(Images.Media.DATA,strFile);
values.put(Images.Media.SIZE,new 
File(strFile).length()); 
                
values.put(Images.Media.DATE_ADDED,nDate);       
values.put(Images.Media.DATE_TAKEN,nDate);               
values.put(Images.Media.DATE_MODIFIED,nDate);
 ContentResolver contentResolver = 
getContext().getContentResolver();
                
contentResolver.insert(Media.EXTERNAL_CONTENT_URI, 
values);
            }
            catch(Exception e)
            {
                Log.e(TAG, 
"CameraView::onJpgPictureTaken() : Fail to save 
image file.");
            }
            _nShotNo++;
            camera.startPreview();
            _nReady = 1;
        };
    };
    
    private Camera.PictureCallback 
mPictureListener =new Camera.PictureCallback() {
    public void onPictureTaken(byte[] data, Camera 
camera) {
    if (data != null) {
    FileOutputStream foStream = null;
    File file = new 
File(Environment.getExternalStorageDirectory().get
Path() + "/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.EXT
ERNAL_CONTENT_URI, values);
    }catch(Exception e){
    Toast.makeText(context, "再起動後に画像が認識
されます。", Toast.LENGTH_SHORT).show();
    e.printStackTrace();
    }
    } catch (Exception e) {
   
    e.printStackTrace();
    }
    bool = true;
    camera.startPreview();
    _nReady = 1;
    }else{
    Toast.makeText(context, "データが取得できませ
んでした。", Toast.LENGTH_SHORT).show();
    bool = true;
    camera.startPreview();
    }
    }
    };
}


見づらくて申し訳ありません。

評価

0

連続投稿して申し訳ありません、
質問者です。

わかり辛いと思い、
私なりに簡単にまとめてみました。

疑問点は2つあります。
?takepictureを連続で使えないのか
?SwitchCamera1のプログラムが誤っているのか

上記にもありますが、
アウトだけ、インだけでは実行できています。
お願いします。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。