2011-01-25 4 views
1

:-(いない画像は、いくつかのデバッグ文にすべてを処分した、書籍やヒントを読んでエラーと警告をコンパイルして入れているカメラプレビュー:エラーなししかし

package com.cit.BroadcastSim; 

import java.io.IOException; 

import android.app.Activity; 
import android.hardware.Camera; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.SurfaceHolder; 
import android.view.SurfaceView; 

public class BroadcastActivity extends Activity implements SurfaceHolder.Callback { 
    public Camera myCamera; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.broadcast); // Inflate the broadcast.xml file 

    Log.d("BROADCAST", "Creating the Activity"); 
    SurfaceView cameraSurface = (SurfaceView)findViewById(R.id.camerasurface); 
    SurfaceHolder cameraHolder = cameraSurface.getHolder(); 
    cameraHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
    cameraHolder.addCallback(this); 
    Log.d("BROADCAST", "Now wait for some CallBacks"); 
} 


    public void surfaceCreated(SurfaceHolder holder) { 
    // Surface created, now it is possible to set the preview 
    Log.d("BROADCAST", "Surface Created"); 
    try { 
     Log.d("BROADCAST","CAMERA: NOT NULL"); 
     myCamera = Camera.open(); 
     myCamera.setPreviewDisplay(holder); 
     myCamera.startPreview(); 
     } catch (IOException e) { 
     Log.d("BROADCAST", e.getMessage()); 
     } 
    } 

    public void surfaceDestroyed(SurfaceHolder holder) { 
    Log.d("BROADCAST", "Surface Destroyed"); 
    myCamera.stopPreview(); 
    myCamera.release(); 
    } 

    public void surfaceChanged(SurfaceHolder holder, int I, int J, int K) { 
    Log.d("BROADCAST", "Surface Changed"); 
    myCamera.stopPreview(); 
    myCamera.release(); 
    } 
} 

をDDMSデバッガでは、私が取得します「アクティビティの作成」のログメッセージ、「今、いくつかのCallBackを待っている」、そして何も私のデバッグメッセージに関して何もないのでコールバックは機能していないと思います - 私の人生にとっては、私は

を持つマニフェストで。

アクティビティXMLページは

<TextView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/Broadcast" 
    /> 
<SurfaceView 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:id="@+id/camerasurface" 
    /> 
</LinearLayout> 

最後に、Androidの携帯電話(HTCワイルドファイア)、ページがロードに、TextViewのメッセージが左上に表示されており、それがすべてです。

私はこのプラットフォームには非常に慣れ親しんでおり、非常に基本的なものを見逃している可能性があることにご注意ください。

任意のアイデア/コメントは非常に理解されるであろう、

オリバー

答えて

0

は(数分で友人との会議)を説明するのに十分な時間を持っていません。私は基本的にいくつかの関数を "surfaceChanged()"に追加しました(プレビューを開始する場所です)。

したがって、あなたが "surfaceCreated()"

public void surfaceCreated(SurfaceHolder holder) { 
    // Surface created, now it is possible to set the preview 
    Log.d("BROADCAST", "Surface Created"); 
    try { 
     Log.d("BROADCAST","CAMERA: NOT NULL"); 
     mCam = Camera.open(); 
     mCam.setPreviewDisplay(holder); 
     //myCamera.startPreview(); 
     } catch (IOException e) { 
     Log.d("BROADCAST", e.getMessage()); 
     } 
    } 

    public void surfaceDestroyed(SurfaceHolder holder) { 
    Log.d("BROADCAST", "Surface Destroyed"); 
    mCam.stopPreview(); 
    mCam.release(); 
    } 

    public void surfaceChanged(SurfaceHolder holder, int I, int J, int K) { 
     Camera.Parameters parameters = mCam.getParameters(); 
    List<Size> previewSizes = parameters.getSupportedPreviewSizes(); 
    Size bestSize = null; 
    int bestDiff = 0; 
    int diff = 0; 
    for (Size size : previewSizes) { 
      diff = Math.abs(K - size.height) + Math.abs(J - size.width); 
     if (bestSize == null || diff < bestDiff) { 
       bestSize = size; 
       bestDiff = diff; 
     } 
     parameters.setPreviewSize(bestSize.width, bestSize.height); 
     mCam.setParameters(parameters); 
    } 

    //start preview of camera 
     mCam.startPreview(); 
    } 

のxmlファイル(あなたが少しコピー&ペーストエラーをしました)

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
<TextView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello" 
    /> 

希望IにmCam.startPreviewを()は必要ありません。助けてくれるかもしれません:) 私は、向きを設定することで、カメラの画像をポートレートモードに変更できると思います。 :)(現在の風景です)

+1

こんにちは、私の問題のソームを整理することができました.-基本的にはSurfaceChanged()内のすべてを閉じていますが、土壌汚染はすごくいいです。今日の夕方を過ごして、それが正しく理解されていることを確認し、それを実行します。人間とのやりとりの実験の一部であるため、カメラをポートレートで表示することを意図しています。感謝していただきありがとうございます。 – LenseOnLife

1

ApiDemos(Graphics-> CameraPreview)とCameraPreviewクラスをご覧ください。それは私がやったこと(すべてのApiDemosは素晴らしいbtwです)、それは魅力のように機能しました。まず何かを働かせることは良いことです。アプリで必要としないものを取り除くことができます。デモはhttp://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/CameraPreview.htmlもオンラインです。それが助けられたと願っています。

+0

あなたの意見に同感できませんでした。最初は何かをしていて、ソースコード内の小さな赤いXの空白の画面を見ていないということがたくさんあります。サンプルコードを素早く覗いてみたら、以前にそれを逃したことは分かりませんでした。これは非常に包括的で、決して考えなかった状況を処理します。たくさんのより多くの学習が必要であり、多くのポインタが正しい方向に多くの感謝、ありがとう。オリバー – LenseOnLife

0

私は「手で」扱うカメラ全体のプレビューはあまりにも複雑だと思います。 最初にプレビューして写真を撮りたい場合は、インテントを介してシステムにこれを伝えることができます。私はいくつかの時間前にこのことについて記事を書いたhttp://javablogs.com/Jump.action?id=618025 は、基本的には行く:

Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
startActivityForResult(intent, 1); 

そして、あなたの方が大きい必要がある場合は、あなたの活動の中にあなたがonActivityResult()コールバック

@Override 
public void onActivityResult(int requestCode, int resultCode,Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if(requestCode==1&& resultCode==RESULT_OK) { 
    Bitmap bitmap = (Bitmap) data.getExtras().get("data"); 
    } 
} 

にデータを取得することができますイメージはデフォルトよりもMediaStore.EXTRA_OUTPUTです。

関連する問題