如何从SurfaceView android获取图像路径
如何从如何从SurfaceView android获取图像路径,android,android-layout,android-fragments,Android,Android Layout,Android Fragments,如何从SurfaceView获取图像路径直到现在我尝试了这段代码 public class CameraSwitch extends Activity implements SurfaceHolder.Callback, OnClickListener { private static final String TAG = "MainActivity"; private Cursor mImageCursor; private ImageThumbnailAdapte
SurfaceView
获取图像路径直到现在我尝试了这段代码
public class CameraSwitch extends Activity implements SurfaceHolder.Callback, OnClickListener {
private static final String TAG = "MainActivity";
private Cursor mImageCursor;
private ImageThumbnailAdapter mAdapter;
private TwoWayGridView mImageGrid;
Camera camera;
SurfaceView surfaceView;
SurfaceHolder surfaceHolder;
boolean previewing = false;
LayoutInflater controlInflater = null;
int camId = Camera.CameraInfo.CAMERA_FACING_BACK;
int numberOfCamera;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.cameraswitch);
surfaceView = (SurfaceView)findViewById(R.id.surfaceView1);
surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(this);
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
controlInflater = LayoutInflater.from(getBaseContext());
View viewControl = controlInflater.inflate(R.layout.custom, null);
Button switchCam = (Button)findViewById(R.id.flip);
// Button toggleFlash = (Button)findViewById(R.id.toggleflash);
LayoutParams layoutParamsControl = new LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.FILL_PARENT);
this.addContentView(viewControl, layoutParamsControl);
switchCam.setOnClickListener(this);
initGrid();
Button picbtn = (Button) findViewById(R.id.button1);
picbtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
camera.takePicture(null,null, new PhotoHandler(getApplicationContext()));
}
});
}
private void initGrid() {
// TODO Auto-generated method stub
Log.e("Bottom Grid View", "Grid view Bottom");
}
@SuppressLint("NewApi")
public void openFrontFacingCamera() {
numberOfCamera = Camera.getNumberOfCameras();
if(camId == Camera.CameraInfo.CAMERA_FACING_BACK){
camId = Camera.CameraInfo.CAMERA_FACING_FRONT;
Toast.makeText(getApplicationContext(), "BACK TO FRONT" ,1000).show();
try {
Toast.makeText(getApplicationContext(), "try block BACK TO FRONT" ,1000).show();
camera.release();
camera = Camera.open(camId);
camera.setDisplayOrientation(90);
//camera = Camera.open(Camera.CameraInfo.CAMERA_FACING_FRONT);
/* Comment this set previewDisplay*/
// camera.setPreviewDisplay(surfaceHolder);
camera.startPreview();
previewing = true;
}
catch (RuntimeException e)
{
e.printStackTrace();
}
catch (Exception e) {}
}
else if(camId == Camera.CameraInfo.CAMERA_FACING_FRONT){
camId = Camera.CameraInfo.CAMERA_FACING_BACK;
Toast.makeText(getApplicationContext(), "FRONT TO BACK" ,1000).show();
try {
camera.release();
camera = Camera.open(camId);
camera.setDisplayOrientation(90);
camera.setPreviewDisplay(surfaceHolder);
camera.startPreview();
} catch (RuntimeException e) {
e.printStackTrace();
} catch (IOException e) {}
}
}
@Override
public void onClick(View click) {
if(click.getId() == R.id.flip){
openFrontFacingCamera();
}else if(click.getId() == R.id.flip){
openFrontFacingCamera();
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
if(previewing)
{
camera.stopPreview();
previewing = false;
}
if (camera != null){
try {
camera.setPreviewDisplay(surfaceHolder);
camera.startPreview();
previewing = true;
} catch (IOException e)
{
e.printStackTrace();
}
}
}
@SuppressLint("NewApi")
@Override
public void surfaceCreated(SurfaceHolder holder) {
camera = Camera.open(camId);
camera.setDisplayOrientation(90);
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
camera.stopPreview();
camera.release();
camera = null;
previewing = false;
}
}
图片处理程序类
import java.io.File;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import android.content.Context;
import android.hardware.Camera;
import android.hardware.Camera.PictureCallback;
import android.os.Environment;
import android.util.Log;
import android.widget.Toast;
public class PhotoHandler implements PictureCallback {
private final Context context;
public PhotoHandler(Context context) {
this.context = context;
}
@Override
public void onPictureTaken(byte[] data, Camera camera) {
File pictureFileDir = getDir();
if (!pictureFileDir.exists() && !pictureFileDir.mkdirs()) {
// Log.d(MakePhotoActivity.DEBUG_TAG, "Can't create directory to save image.");
Toast.makeText(context, "Can't create directory to save image.",
Toast.LENGTH_LONG).show();
return;
}
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyymmddhhmmss");
String date = dateFormat.format(new Date());
String photoFile = "Picture_" + date + ".jpg";
String filename = pictureFileDir.getPath() + File.separator + photoFile;
Log.e("path", filename.toString());
File pictureFile = new File(filename);
try {
FileOutputStream fos = new FileOutputStream(pictureFile);
fos.write(data);
fos.close();
Toast.makeText(context, "New Image saved:" + photoFile,Toast.LENGTH_LONG).show();
} catch (Exception error) {
// Log.d(MakePhotoActivity.DEBUG_TAG, "File" + filename + "not saved: "
// + error.getMessage());
Toast.makeText(context, "Image could not be saved.",
Toast.LENGTH_LONG).show();
}
}
private File getDir() {
File sdDir = Environment
.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
return new File(sdDir, "Demo App");
}
}
直到现在我都试过了
谢谢在takePicture()方法中,一个参数是picture callback。您必须在拍摄的照片上实现该回调及其方法。它将以字节为单位提供图像数据。您可以从那里保存图像,然后您可以对该数据执行任何操作。此链接可能对您有所帮助
hi Bhavin Parmar我已经通过PhotoHandler类完成了这项工作,现在我想获取从该文件夹到CameraSwitch类的捕获图像路径。您可以将文件pictureFileDir设置为全局成员,或者在捕获时将图像路径存储在数据库中。您有一个方法getDir right。然后使用PhotoHandler实例记录getDir。