2012-04-05 8 views
3

問題:アプリ - >カメラ - >写真 - >低解像度

私のアプリを使って写真を撮ってSDに保存すると、解像度は160x120になります。 普通のカメラを使用している場合、写真の解像度は1920x2560です。

私は、標準高解像度で写真を撮るために、アプリから始めたカメラを強制するために何をしなければならないのかを教えてください。

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
    startActivityForResult(cameraIntent, CAMERA_REQUEST); 
} 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == CAMERA_REQUEST) { 

    Bundle xz = data.getExtras(); 
    if (xz!=null) { 

    Bitmap image = (Bitmap) data.getExtras().get("data"); 

    String filePath = "/mnt/sdcard/DCIM/"; 
    filePath += "hml.png"; 
try { 
    image.compress(Bitmap.CompressFormat.PNG, 100, new FileOutputStream(new File(filePath))); 
} 
    catch (FileNotFoundException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace();} 
    catch (NullPointerException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace();  } 
    }} 

感謝します:

これは私がカメラの意図を起動し、写真を保存するために使用するコードです!

答えて

1

同じ問題が見つかりました。多分私たちはフロントカメラを使用します。私は、カメラを使いコードブローを見つけることがもう一つあることを知っています。

のAndroidManifest.xml:

</application> 
    <uses-sdk android:minSdkVersion="8" /> 
<uses-permission android:name="android.permission.CAMERA" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
<uses-feature android:name="android.hardware.camera"/> 
<uses-feature android:name="android.hardware.camera.autofocus"/></manifest> 

ソースコード:

import java.io.BufferedOutputStream; 
import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.util.Calendar; 
import java.util.Locale; 

import android.app.Activity; 
import android.content.Context; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.graphics.PixelFormat; 
import android.hardware.Camera; 
import android.os.Bundle; 
import android.text.format.DateFormat; 
import android.util.Log; 
import android.view.KeyEvent; 
import android.view.SurfaceHolder; 
import android.view.SurfaceView; 
import android.view.Window; 
import android.view.WindowManager; 
import android.widget.FrameLayout; 
import android.widget.TextView; 
import android.widget.Toast; 

public class MainActivity extends Activity { 

    private CameraView cv; 
    private Camera mCamera = null; 
    private Bitmap mBitmap = null; 

    public Camera.PictureCallback pictureCallback = new Camera.PictureCallback() { 

     public void onPictureTaken(byte[] data, Camera camera) { 
      Log.i("yao","onPictureTaken"); 
      Toast.makeText(getApplicationContext(), "saving……", Toast.LENGTH_LONG).show(); 
      mBitmap = BitmapFactory.decodeByteArray(data, 0, data.length); 
      File file = new File("/sdcard/YY"+ new DateFormat().format("yyyyMMdd_hhmmss", Calendar.getInstance(Locale.CHINA)) + ".jpg"); 
      try { 
       file.createNewFile(); 
       BufferedOutputStream os = new BufferedOutputStream(new FileOutputStream(file)); 
       mBitmap.compress(Bitmap.CompressFormat.PNG, 100, os); 
       os.flush(); 
       os.close(); 
       Toast.makeText(getApplicationContext(), "save completed", Toast.LENGTH_LONG).show(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 

    }; 

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

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

     FrameLayout fl = new FrameLayout(this);  

     cv = new CameraView(this); 
     fl.addView(cv); 

     TextView tv = new TextView(this); 
     tv.setText("take a picture"); 
     fl.addView(tv); 

     setContentView(fl); 

    } 

    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     Log.i("yao","MainActivity.onKeyDown"); 
     if (keyCode == KeyEvent.KEYCODE_CAMERA) { 
      if (mCamera != null) { 
       Log.i("yao","mCamera.takePicture"); 
       mCamera.takePicture(null, null, pictureCallback); 
      } 
     } 
     return cv.onKeyDown(keyCode, event); 
    } 

    class CameraView extends SurfaceView { 

     private SurfaceHolder holder = null; 

     public CameraView(Context context) { 
      super(context); 
      Log.i("yao","CameraView"); 

      holder = this.getHolder(); 
      holder.addCallback(new SurfaceHolder.Callback() { 

       @Override 
       public void surfaceDestroyed(SurfaceHolder holder) { 
        mCamera.stopPreview(); 
        mCamera.release(); 
        mCamera = null; 
       } 

       @Override 
       public void surfaceCreated(SurfaceHolder holder) { 
        mCamera = Camera.open(); 
        try { 
         mCamera.setPreviewDisplay(holder); 
        } catch (IOException e) { 
         mCamera.release(); 
         mCamera = null; 
        } 

       } 

       @Override 
       public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { 

        Camera.Parameters parameters = mCamera.getParameters(); 
        parameters.setPictureFormat(PixelFormat.JPEG); 
        parameters.setPreviewSize(854, 480); 
        parameters.setFocusMode("auto"); 
        parameters.setPictureSize(2592, 1456); 
        mCamera.setParameters(parameters); 
        mCamera.startPreview(); 
       } 
      }); 
      holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
     } 

    } 

} 
4

あなたは、出力画像のURIを指定しない場合、カメラの意図サムネイルのみを返すf画像。これを正しく行うには、以下の手順に従ってください。 http://www.tutorialforandroid.com/2010/10/take-picture-in-android-with.html

+0

エミュレータでも動作するはずですか?私はまだEXTRA_OUTPUTでサムネイルを取得します。 –

+1

は完全に機能しました。ありがとう –

関連する問題