я хочу установить захваченное изображение в SurfaceView в портретном режиме, поэтому ниже мой код
Сохранение захваченного изображения
private String imgPathHacked = "";
PictureCallback jpegCallback = new PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
FileOutputStream outStream = null;
long time = 0;
try {
time = System.currentTimeMillis();
FileUtility fileUtility = new FileUtility();
File file = new File(fileUtility.getDirectoryName(NumericPassActivity.this)+Constans.HACK_ATTEMPT_URI);
if(!file.exists()){
file.mkdirs();
}
File dataFile = new File(file.getAbsolutePath(),String.format("%d.jpg", System.currentTimeMillis()));
if(!dataFile.exists()){
dataFile.createNewFile();
}
Uri uri = Uri.fromFile(dataFile.getAbsoluteFile());
camera.setDisplayOrientation(getCameraPhotoOrientation(NumericPassActivity.this, uri , dataFile.getAbsolutePath()));
outStream = new FileOutputStream(dataFile);
outStream.write(data);
outStream.close();
imgPathHacked = dataFile.getAbsolutePath();
Utility utility = new Utility();
HackAttemptModel model = new HackAttemptModel();
model.setmAttemptedFor("Wrong PIN");
model.setmAttemptedPass(pass);
model.setmHackedImg(imgPathHacked);
utility.saveAttempt(model);
if(preview!=null && preview.camera!=null){
preview.camera.startPreview();
fr.removeAllViews();
fr.addView(preview);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
}
Log.d(TAG, "onPictureTaken - jpeg");
}
};
Предварительный просмотр.java
package com.Zebracom.filesecurity.utility;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.hardware.Camera;
import android.hardware.Camera.PreviewCallback;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class Preview extends SurfaceView implements SurfaceHolder.Callback {
private static final String TAG = "Preview";
SurfaceHolder mHolder;
public Camera camera;
public Preview(Context context) {
super(context);
mHolder = getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
public void surfaceCreated(SurfaceHolder holder) {
camera = Camera.open(Camera.CameraInfo.CAMERA_FACING_FRONT);
try {
parm.setPictureSize(150, 150);
parm.setPreviewSize(150, 150);
parm.set("orientation", "portrait");
camera.setDisplayOrientation(90);
camera.setParameters(parm);*/
camera.setDisplayOrientation(90);
Camera.Parameters parameters = camera.getParameters();
List<Camera.Size> previewSizes = parameters.getSupportedPreviewSizes();
Camera.Size previewSize = previewSizes.get(o);
parameters.setPreviewSize(previewSize.width, previewSize.height);
//parameters.setRotation(90);
//parameters.set("orientation", "portrait");
parameters.setPreviewSize(previewSize.width, previewSize.height);
camera.setParameters(parameters);
camera.setPreviewDisplay(holder);
camera.setPreviewCallback(new PreviewCallback() {
public void onPreviewFrame(byte[] data, Camera arg1) {
FileOutputStream outStream = null;
try {
/*File file = new File(Environment.getExternalStorageDirectory()+"/camera/");
if(!file.exists()){
file.mkdirs();
}
File dataFile = new File(file.getAbsolutePath(),String.format("%d.jpg", System.currentTimeMillis()));
if(!dataFile.exists()){
dataFile.createNewFile();
}
outStream = new FileOutputStream(dataFile);
outStream.write(data);
outStream.close();*/
Log.d(TAG, "onPreviewFrame - wrote bytes: " + data.length);
} catch (Exception e) {
e.printStackTrace();
} finally {
}
Preview.this.invalidate();
}
});
} catch (IOException e) {
Log.e(TAG, "surfaceCreated >> "+e.toString());
}
}
public void surfaceDestroyed(SurfaceHolder holder) {
this.getHolder().removeCallback(this);
camera.stopPreview();
camera.release();
camera = null;
}
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
camera.startPreview();
}
@Override
public void draw(Canvas canvas) {
super.draw(canvas);
Paint p= new Paint(Color.RED);
Log.d(TAG,"draw");
canvas.drawText("PREVIEW", canvas.getWidth()/2, canvas.getHeight()/2, p );
}
}
когда я запускаю приведенный выше код, мое захваченное изображение всегда устанавливается в ландшафтном режиме, но я хочу, чтобы оно было портретным, так что есть идеи, как я могу решить эту проблему? все ваши предложения заметны.