カメラプレビュー:エラーはありませんが、画像はありません:-(

android camera
カメラプレビュー:エラーはありませんが、画像はありません:-(

本やヒントを読み、すべてのコンパイルエラーと警告を取り除き、いくつかのデバッグステートメントを入れてください。

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デバッガーでは、「アクティビティの作成」のログメッセージに続いて「コールバックを待機します」というデバッグメッセージが表示されるため、コールバックが機能していないと思います-私の人生はできません私がどこを間違えたかを見てください。

マニフェストには

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

最後に、Androidフォン(HTC Wildfire)でページが読み込まれ、textViewメッセージが左上に表示されます。

このプラットフォームは非常に新しいので、非常に基本的なものを見逃している可能性があることを受け入れてください。

どんなアイデア/コメントも大歓迎です、

オリバー

  1  1


ベストアンサー

ApiDemos(グラフィックス→ CameraPreview)とクラスCameraPreviewを見てください。 それが私がやったことで(すべてのApiDemosは素晴らしいです)、それは魅力のように働きました。 最初に何かを機能させておくのは良いことです。その後、アプリで必要のないものを取り除くことができます。 デモはこちらからもオンラインで入手できます:http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/CameraPreview.html。 お役に立てば幸いです。

1


説明するのに十分な時間がない(数分で友人と会う)。 基本的に、「surfaceChanged()」にいくつかの機能を追加しました(プレビューを開始する場所です)。

したがって、「surfaceCreated()」のmCam.startPreview()は必要ありません。

    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 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-file(コピーアンドペーストエラーが少しありました)

私が助けることができることを願っています:)方向を設定することで、カメラの写真をポートレートモードに変更できると思います。 :)(今は風景です)

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");
  }
}

デフォルトより大きい画像が必要な場合は、http://developer.android.com/reference/android/provider/MediaStore.html#EXTRA_OUTPUT [MediaStore.EXTRA_OUTPUT]をご覧ください。

0


タイトルとURLをコピーしました