java如何修复SurfaceView和安卓摄像头的大小
我为安卓编写程序、摄像头。我使用下一个代码
package camera;
public class SurfaceCamera extends Activity implements SurfaceHolder.Callback {
TextView testView;
Camera camera;
SurfaceView surfaceView;
SurfaceHolder surfaceHolder;
PictureCallback rawCallback;
ShutterCallback shutterCallback;
PictureCallback jpegCallback;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.video_surf);
surfaceView = (SurfaceView) findViewById(R.id.surfaceView);
surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(this);
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
jpegCallback = new PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
FileOutputStream outStream = null;
try {
outStream = new FileOutputStream(String.format("/sdcard/Octopus/gif/%d.jpg", System.currentTimeMillis()));
outStream.write(data);
outStream.close();
Log.d("Log", "onPictureTaken - wrote bytes: " + data.length);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
}
Toast.makeText(getApplicationContext(), "Picture Saved", 2000).show();
refreshCamera();
}
};
}
public void captureImage(View v) throws IOException {
//take the picture
camera.takePicture(null, null, jpegCallback);
}
public void refreshCamera() {
if (surfaceHolder.getSurface() == null) {
// preview surface does not exist
return;
}
// stop preview before making changes
try {
camera.stopPreview();
} catch (Exception e) {
// ignore: tried to stop a non-existent preview
}
// set preview size and make any resize, rotate or
// reformatting changes here
// start preview with new settings
try {
camera.setPreviewDisplay(surfaceHolder);
camera.startPreview();
} catch (Exception e) {
}
}
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
// Now that the size is known, set up the camera parameters and begin
// the preview.
refreshCamera();
}
public void surfaceCreated(SurfaceHolder holder) {
try {
// open the camera
camera = Camera.open();
} catch (RuntimeException e) {
// check for exceptions
System.err.println(e);
return;
}
Camera.Parameters param;
param = camera.getParameters();
//param.setColorEffect(Camera.Parameters.EFFECT_NEGATIVE);
// modify parameter
param.setPreviewSize(600, 900);
camera.setDisplayOrientation(90);
camera.setParameters(param);
try {
// The Surface has been created, now tell the camera where to draw
// the preview.
camera.setPreviewDisplay(surfaceHolder);
camera.startPreview();
} catch (Exception e) {
// check for exceptions
System.err.println(e);
return;
}
}
public void surfaceDestroyed(SurfaceHolder holder) {
// stop preview and release camera
camera.stopPreview();
camera.release();
camera = null;
}
}
布局
<LinearLayout xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
xmlns:tools="http://schemas.安卓.com/tools"
安卓:id="@+id/container"
安卓:layout_width="match_parent"
安卓:layout_height="match_parent"
安卓:orientation="vertical"
tools:context="com.javacodegeeks.安卓surfaceviewexample.AndroidSurfaceviewExample" >
<SurfaceView
安卓:id="@+id/surfaceView"
安卓:layout_width="300dp"
安卓:layout_height="200dp" />
<LinearLayout
安卓:id="@+id/capture"
安卓:layout_width="match_parent"
安卓:layout_height="wrap_content"
安卓:clickable="true"
安卓:gravity="center"
安卓:onClick="captureImage"
安卓:orientation="horizontal" >
<TextView
安卓:layout_width="wrap_content"
安卓:layout_height="wrap_content"
安卓:gravity="center"
安卓:padding="10dp"
安卓:text="Capture"
安卓:textAppearance="?安卓:attr/textAppearanceLarge" />
</LinearLayout>
</LinearLayout>
我在表面上看到的图像(在表面上)图片是扭曲的,在拐角处拉伸https://www.dropbox.com/s/ul5enua7tb07zkr/shot_000002.png?dl=0
但是如果我拍了所有的照片好吗https://www.dropbox.com/s/zibn89tl38a8eur/1424809721079.jpg?dl=0
请帮忙,我写错了什么?我怎么能修好它
多谢各位
共 (0) 个答案