Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更改目录文件-Android Camera_Android_File_Camera_Save_Surfaceview - Fatal编程技术网

更改目录文件-Android Camera

更改目录文件-Android Camera,android,file,camera,save,surfaceview,Android,File,Camera,Save,Surfaceview,我已经尝试了很多android相机的例子,但是()是我保存图像并在图库中查看的第一个例子。但我想知道的是如何更改保存图像的文件夹。我认为实际上它将它们保存在sdcard0/DCIM上 以下是主要活动: public class Foto extends Activity implements SurfaceHolder.Callback{ private LayoutInflater myInflater = null; Camera myCamera; byte[] tempdata; bo

我已经尝试了很多android相机的例子,但是()是我保存图像并在图库中查看的第一个例子。但我想知道的是如何更改保存图像的文件夹。我认为实际上它将它们保存在
sdcard0/DCIM

以下是主要活动:

public class Foto extends Activity implements SurfaceHolder.Callback{

private LayoutInflater myInflater = null;
Camera myCamera;
byte[] tempdata;
boolean myPreviewRunning = false;
private SurfaceHolder mySurfaceHolder;
private SurfaceView mySurfaceView;
ImageButton takePicture;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    getWindow().setFormat(PixelFormat.TRANSLUCENT);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

    setContentView(R.layout.foto);

    mySurfaceView = (SurfaceView) findViewById(R.id.surface);
    mySurfaceHolder = mySurfaceView.getHolder();
    mySurfaceHolder.addCallback(this);
    mySurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

    myInflater = LayoutInflater.from(this);
    View overView = myInflater.inflate(R.layout.segundacapa,null);
    this.addContentView(overView, new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));

    takePicture = (ImageButton) findViewById(R.id.button);
    takePicture.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            myCamera.takePicture(myShutterCallback, myPictureCallback, myJpeg);
        }
    });


}

ShutterCallback myShutterCallback = new ShutterCallback() {
    @Override
    public void onShutter() {
    }
};

PictureCallback myPictureCallback = new PictureCallback() {
    @Override
    public void onPictureTaken(byte[] data, Camera myCamera) {
        // TODO Auto-generated method stub
    }
};

PictureCallback myJpeg = new PictureCallback() {
    @Override
    public void onPictureTaken(byte[] data, Camera myCamera) {
        // TODO Auto-generated method stub
        if(data != null){
            tempdata = data;
            done();
        }
    }
};

void done(){
    Bitmap bm = BitmapFactory.decodeByteArray(tempdata, 0, tempdata.length);
    String url = Images.Media.insertImage(getContentResolver(), bm, null, null);
    bm.recycle();
    Bundle bundle = new Bundle();
    if(url != null){
        bundle.putString("url",url);
        Intent mIntent = new Intent();
        mIntent.putExtras(bundle);
        setResult(RESULT_OK, mIntent);
        Toast.makeText(this, "Picture saved on" + url, Toast.LENGTH_SHORT).show();
    }
    else{
        Toast.makeText(this, "Picture can not be saved", Toast.LENGTH_SHORT).show();
    }
    finish();
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
    // TODO Auto-generated method stub
    try{
        if(myPreviewRunning){
            myCamera.stopPreview();
            myPreviewRunning = false;
        }
        Camera.Parameters p = myCamera.getParameters();
        p.setPreviewSize(width,height);

        myCamera.setParameters(p);
        myCamera.setPreviewDisplay(holder);
        myCamera.startPreview();
        myPreviewRunning = true;
    }catch(Exception e){}
}

@Override
public void surfaceCreated(SurfaceHolder holder) {
    // TODO Auto-generated method stub
        myCamera = Camera.open();
    }

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
    // TODO Auto-generated method stub
    myCamera.stopPreview();
    myPreviewRunning = false;
    myCamera.release();
    myCamera = null;
    }       
}
还有一个XML布局,带有
SurfaceView
(称为
foto.XML
)和另一个带有按钮的
segundacapa.XML


非常感谢

您可以使用另一种风格的,采用您的文件路径,而不是使用Images.Media将图像存储在磁盘上(使用默认位置)。你应该先写这个文件。您不需要将
onPictureTaken()->数据
转换为
位图
;只需将
字节[]
写入Jpeg文件即可

FileOutputStream fos = openFileOutput("saved.jpg", Context.MODE_PRIVATE);
fos.write(data);
fos.close();
您可以根据需要选择文件名;您可以使用其他参数保存文件(请参阅更多信息。如果愿意,您可以在/sdcard上打开wile,例如

FileOutputStream fos = new FileOutputStream("/sdcard/saved.jpg");
请注意,您需要请求写入SD卡的权限;请检查以下行是否出现在AndroidManifest.xml中:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />