2012-02-19 9 views
4

私は多くのチュートリアルと情報を見てきましたが、他のカスタマイズされたカメラアプリケーションに既存のカメラアプリケーションのデフォルト設定を使用する方法を見つけることができませんでした。私は画像の鮮明さを見てきましたが、内蔵カメラアプリケーションではその焦点は非常に精細です。今私は私のカスタマイズされた機能で自分のアプリケーションを作成していますが、私はそれをシャープで非ぼやけにすることができません...私は後でいくつかの画像処理を行う必要があるため、カメラのインテント技術を使いたいと思いません。Android:内蔵カメラアプリケーションのデフォルトのカメラ設定を取得する方法

それはここでは、内蔵カメラアプリケーション

で働くように...私はズームを使用しているが、妙にズームが正常に動作していないが、私の表面変化コードが

public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) 
{ 
    Log.e(TAG, "surfaceChanged"); 

    // XXX stopPreview() will crash if preview is not running 
    if (mPreviewRunning) { 
     mCamera.stopPreview(); 
    } 


    Camera.Parameters params = mCamera.getParameters(); 
    List<Camera.Size> sizes = params.getSupportedPreviewSizes(); 
    mFrameWidth = w; 
    mFrameHeight = h; 

    // selecting optimal camera preview size 
    { 
     double minDiff = Double.MAX_VALUE; 
     for (Camera.Size size : sizes) 
     { 
      if (Math.abs(size.height - h) < minDiff) 
      { 
       mFrameWidth = size.width; 
       mFrameHeight = size.height; 
       minDiff = Math.abs(size.height - h); 
      } 
     } 
    } 

    try 
    { 

     //params.set("rotation", 180); 
     //params.set("orientation", "landscape"); 
     //params.set("auto", "WHITE_BALANCE_AUTO");//WHITE_BALANCE_AUTO 




     Display display = ((WindowManager)getSystemService(WINDOW_SERVICE)).getDefaultDisplay(); 

     if(display.getRotation() == Surface.ROTATION_0) 
     { 
      params.setPreviewSize(mFrameHeight, mFrameWidth);       
      mCamera.setDisplayOrientation(90); 
     } 

     if(display.getRotation() == Surface.ROTATION_90) 
     { 
      params.setPreviewSize(mFrameWidth, mFrameHeight);       
     } 

     if(display.getRotation() == Surface.ROTATION_180) 
     { 
      params.setPreviewSize(mFrameHeight, mFrameWidth);    
     } 

     if(display.getRotation() == Surface.ROTATION_270) 
     { 
      params.setPreviewSize(mFrameWidth, mFrameHeight); 
      mCamera.setDisplayOrientation(180); 
     } 

     if(params.isZoomSupported()) 
     { 

      Log.e(TAG, params.getZoom()+"surfaceChanged camer zoom"+params.getMinExposureCompensation()); 
      params.setZoom(params.getMaxZoom()); 
      params.setExposureCompensation(1); 
        // params.setColorEffect("none"); 
      params.setWhiteBalance(params.WHITE_BALANCE_AUTO); 
      params.setFocusMode(params.FOCUS_MODE_AUTO); 
      params.setSceneMode(params.SCENE_MODE_ACTION); 

     } 

     params.set("auto", "FOCUS_MODE_AUTO"); 

     params.setPreviewSize(mFrameWidth,mFrameHeight); 
     mCamera.setParameters(params); 

     mCamera.setPreviewDisplay(holder); 
    } 
    catch (IOException e) 
    { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    mCamera.startPreview(); 
    mPreviewRunning = true; 
} 

で親切に私はどのように知っていますカメラのプレビューを、組み込みのアプリケーションプレビューとまったく同じにします。

+0

あなたはAndroid Camera Applicationコードを見ましたか?あなたはサポートするOSの最小バージョンでそれを引っ張ってベースとして使用することができます。すべてのOSアップグレード機能には機能が追加されていることに注意してください。また、デバイスのデバイスはおそらく他のデバイスに存在する可能性のある機能をサポートしています。 – Idistic

答えて

2

フルスクリーンカメラのプレビューを意味しますか?

this.requestWindowFeature(Window.FEATURE_NO_TITLE); //no title 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); //no status bar, etc 

と、この:

setContentView(R.layout.main); 
    addContentView(overlay, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
((FrameLayout) findViewById(R.id.preview)).addView(preview); 

最初のスニペットがフルスクリーンとタイトルとステータスバーを非表示にするアプリを設定

私はこのコードを使用します。 2番目のスニペットは、メインレイアウトに自分のオーバーレイ(拡張ビュー)を追加します。

ここに私のXMLとJavaコード: main.xml:

<?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 
    <FrameLayout 
     android:id="@+id/preview" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/ic_launcher" /> 
    </LinearLayout> 

Overlay.java:

class Overlay extends View { 
    String text = ""; 
    String textBearing = "Bearing: "; 

    public Overlay(Context context) { 
      super(context); 
    } 
    @Override 
    protected void onDraw(Canvas canvas) { 
     Paint paint = new Paint(); 
     paint.setStyle(Paint.Style.FILL); 
     paint.setColor(Color.WHITE); 
     paint.setTextSize(16); 
     canvas.drawText(text, 20, 20, paint); 
     canvas.drawText(textBearing, 20, 50, paint); 
     super.onDraw(canvas); 
    } 
} 

そして、私の活動:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    this.requestWindowFeature(Window.FEATURE_NO_TITLE); //no title 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); //fullscreen 
    overlay = new Overlay(this); 
    setContentView(R.layout.main); 
    addContentView(overlay, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
    camera = getCameraInstance(); //camera.open(); 
    preview = new Preview(this, camera); 
    ((FrameLayout) findViewById(R.id.preview)).addView(preview); 
} 

はそれが

を役に立てば幸い
+0

あなたのコードはバーが占めていたスペースを占めていますか?私も同様の解決策がありましたが、バーの高さを求めてパディングとして追加する必要がありました。 – Johnny

0

I enあなたと同じ問題を解決しました。内蔵のカメラアプリのソースコードを読んで、内蔵のカメラと自分のカメラのフォーカス処理を比較したところ、問題はオートフォーカスにあることに気付きました。

だから、これを試してみてください。

シャープとして組み込みカメラとして結果画像を作る
mCamera.autoFocus(new Camera.AutoFocusCallback() { 
     @Override 
     public void onAutoFocus(boolean success, Camera camera) { 
      mCamera.takePicture(null, null, mPicture); 
     } 
    }); 

。 文書はhereです。

関連する問題