如何使用Camera.takePicture你把高分辨率的图像()? [英] How do you take high resolution images using Camera.takePicture()?
问题描述
我实现应用程序内的摄像头和我每次拍照我的形象是320×240,虽然我的手机的摄像头能够更高的分辨率(Galaxy Nexus的)。我无法找到设置分辨率的参数,所以我怎么了图片,我采取的分辨率是多少?以下是有关code:
@覆盖
公共无效surfaceCreated(SurfaceHolder持有者){
setSurfaceHolder(保持器);
}
@覆盖
公共无效surfaceDestroyed(SurfaceHolder持有者){
setSurfaceHolder(空);
}
私人无效attachCameraToSurface(摄像头摄像头,SurfaceHolder持有人){
尝试 {
camera.set previewDisplay(保持器);
瑟酮preVIEW(真正的);
}
赶上(IOException异常E){
Log.e(CameraFragment,异常的attachCameraToSurface(),E);
}
}
@覆盖
公共无效surfaceChanged(SurfaceHolder持有人,INT格式,诠释的宽度,高度INT){
摄像头摄像头= getCamera的();
如果(相机== NULL){
返回;
}
Camera.Size大小= getCamera的previewSize(摄像头);
Camera.Parameters PARAMS = camera.getParameters();
params.set previewSize(size.width,size.height);
camera.setParameters(PARAMS);
attachCameraToSurface(摄像头,支架);
启动preVIEW();
}
私人Camera.Size getCamera的previewSize(摄像机镜头){
Camera.Parameters PARAMS = camera.getParameters();
名单< Camera.Size> supportedSizes = params.getSupported previewSizes();
矩形框= getSurfaceHolder()getSurfaceFrame()。
INT宽度= frame.width();
INT高= frame.height();
对于(Camera.Size大小:supportedSizes){
如果(size.width> =宽度|| size.height> =身高){
返回的大小;
}
}
返回supportedSizes.get(0);
}
@覆盖
公共无效的onClick(视图v){
开关(v.getId()){
案例R.id.camera_action_ImageView:
。getCamera的()takePicture(getShutterCallback(),空,新JpegPictureCallback());
打破;
}
}
私有类JpegPictureCallback实现PictureCallback {
@覆盖
公共无效onPictureTaken(byte []的数据,摄像头摄像头){
点阵位图= NULL;
尝试 {
位= BitmapFactory.de codeByteArray(数据,0,data.length);
}
赶上(OutOfMemoryError异常E){
Log.e(CameraFragment,内存不足从相机图像解码,E);
返回;
}
数据= NULL;
如果(位图!= NULL){
新SavePictureWorker(getActivity()).execute(位图);
}
启动preVIEW();
}
}
使用 params.setPictureSize()
。请参阅 Camera.Parameters 了解更多信息。
请确保你调用 params.getSupportedPictureSizes()
第一个获得支持的图片大小的数组。然后从列表中选择一个的大小和使用setPictureSize()方法来设置所需的大小。
Camera.Parameters PARAMS = camera.getParameters();
名单< Camera.Size> supportedSizes = params.getSupportedPictureSizes();
。
。
Camera.Size sizePicture =(从supportedSizes列表尺寸之一);
。
params.setPictureSize(sizePicture.width,sizePicture.height);
I'm implementing an in-app camera and every time I take a picture my image is 320x240, though my phone's camera is capable of much higher resolutions (Galaxy Nexus). I couldn't find a parameter for setting the resolution, so how do I up the resolution of images I am taking? Here's the relevant code:
@Override
public void surfaceCreated( SurfaceHolder holder ) {
setSurfaceHolder( holder );
}
@Override
public void surfaceDestroyed( SurfaceHolder holder ) {
setSurfaceHolder( null );
}
private void attachCameraToSurface( Camera camera, SurfaceHolder holder ) {
try {
camera.setPreviewDisplay( holder );
setInPreview( true );
}
catch (IOException e) {
Log.e( "CameraFragment", "Exception in attachCameraToSurface()", e );
}
}
@Override
public void surfaceChanged( SurfaceHolder holder, int format, int width, int height ) {
Camera camera = getCamera();
if ( camera == null ) {
return;
}
Camera.Size size = getCameraPreviewSize( camera );
Camera.Parameters params = camera.getParameters();
params.setPreviewSize( size.width, size.height );
camera.setParameters( params );
attachCameraToSurface( camera, holder );
startPreview();
}
private Camera.Size getCameraPreviewSize( Camera camera ) {
Camera.Parameters params = camera.getParameters();
List<Camera.Size> supportedSizes = params.getSupportedPreviewSizes();
Rect frame = getSurfaceHolder().getSurfaceFrame();
int width = frame.width();
int height = frame.height();
for (Camera.Size size : supportedSizes) {
if ( size.width >= width || size.height >= height ) {
return size;
}
}
return supportedSizes.get( 0 );
}
@Override
public void onClick( View v ) {
switch (v.getId()) {
case R.id.camera_action_ImageView:
getCamera().takePicture( getShutterCallback(), null, new JpegPictureCallback() );
break;
}
}
private class JpegPictureCallback implements PictureCallback {
@Override
public void onPictureTaken( byte[] data, Camera camera ) {
Bitmap bitmap = null;
try {
bitmap = BitmapFactory.decodeByteArray( data, 0, data.length );
}
catch (OutOfMemoryError e) {
Log.e( "CameraFragment", "Out of memory decoding image from camera.", e );
return;
}
data = null;
if ( bitmap != null ) {
new SavePictureWorker( getActivity() ).execute( bitmap );
}
startPreview();
}
}
Use params.setPictureSize()
. See Camera.Parameters for more information.
Ensure that you call params.getSupportedPictureSizes()
first to get an array of supported picture sizes. Then choose a size from the list and use the setPictureSize() method to set the desired size.
Camera.Parameters params = camera.getParameters();
List<Camera.Size> supportedSizes = params.getSupportedPictureSizes();
.
.
Camera.Size sizePicture = (one of the sizes from supportedSizes list);
.
params.setPictureSize(sizePicture.width, sizePicture.height);
这篇关于如何使用Camera.takePicture你把高分辨率的图像()?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!