菜鳥ノート2——Android Camera呼び出し
最も簡単な7段階のcamera Take Picture Googleはコードを提供しています.詳細は以下の通りです.http://code.google.com/p/openmobster/wiki/CameraTutorial
今日は主にその中の第6ステップを確認しました.Buttonを触発して写真撮影を実現しました.
ok、紹介を開始します
1.「写真を撮る」という動作はどのmethodで行われますか?答えは――android.hardware.amera類の方法です.
public final void TaePicture(Camera.ShutterCallback shutter、Camera.Picture Callback raw、Camera.Picture Callback postview、Camera.Picture Callback jpeg)
私たちはこのTaePicture方法をclass IsiCamera 1 Activity extens Activityのに置きます.
クラスprvate class Cameraa SurfaceView SurfaceVieds SurfaceView implements SurfaceHolder.Callbackに含まれています.
このようにIsiCamera 1 Activity類ではタタリPictureが必要です.camera.TaePictureを呼び出すだけでいいです.ここでcameraはprvate class Camera SurfaceViewの一つのobjectです.
2.camera.take Picture()と書いたら写真を撮ることができますか?答えは似ていますが、あまり良くないです.なぜですか?take Pictureはいつでもできないからです.例えば、写真を撮り終わったばかりです.
例えば、プログラムを開けたばかりのCamera camera.openがまだ実行されていないとき.だから判断します.
具体的に採用した戦略はもう一つの手順を包むことです.
3.capture方法で伝わるパラメータは何ですか?答えは――一つのインターフェース!おかしいでしょう.でも下の文字を見たらinterfaceがパラメータを作るのは本当に強いと思います.
一つの方法のパラメータがinterfaceタイプの場合、一つのクラスがinterfaceを実現すれば、このクラスのobjectのhandleをinterfaceパラメータに渡すことができる.このように、インターフェースパラメータは、class implementによって実現されるインターフェース内の方法をフィードバックすることができる.
ちょっと分かりにくいですか?
ということは、このような設定により、capture()メソッドが呼び出された時に、
interface Camera.Picture Callbackの方法を使って、つまりabstract void onPicture Takeの方法を使うことができます.
これはまさに私達が欲しいのです.onPictureTake()メソッドのコードは写真の保存機能を実現します.
コードを見てください
これはclass IsiCamera 1 Activityでcaptureメソッドを呼び出すコードです.new Camera.Picture Callbackを伝えました.
実は上記のプログラムはオプンFIleOutput(STILLAGEFuFILE)、STILLです.IMAGEF_FILEというパスの父の経路は何ですか?分かりません.sdcardで探してみましたが、見つけられませんでした.メモリに保存したと思いますが、メモリの無駄ですね.
ヒムのブログを転載してください.
原文の住所: http://blog.csdn.net/xiaominghimi/archive/2011/01/02/6113019.aspx
私たちのデータをOutputStream/InputStreamを通してSDカードにどうやって取り込むかを紹介します.
実は私達のデータをSDカードに入れて、コードを二箇所修正する必要があります.
注意:必ずSDカードが必要です.どうやってSDカードを作るかについては前の文章でもう二つの方法を話しました.できない子供靴は見に行ってもいいです.
第一:SDカードがあるかどうかを確認する.
第二:読み込んだ箇所を修正する(備考1)
fis=this.openFileInput(「save.hisi」);ここにはパスがありません.パスはデフォルトのdata-data-come.hisi-filesの下です.
私たちのSDカードのパスを置き換えればいいです.
File path=new File('/sdcard/hisi/save.hisi)//ここにFileディレクトリのパスを新規作成します.
fis=new FileInputStream(path)着信経路
3番目 : 書き込みの箇所を変更する(備考2)
fos=this.openFileOutput(「save.hisi」、MODE uPRIVATE)ここもデフォルトパスです.変更が必要です.
注意:ここで修正したら、finallyでの判定も適切に修正します.
システムパスであれば、このファイルがない場合、アンディはデフォルトで作成します.しかし、私たちはSDカードを入れる時、自分でディレクトリパスとファイルを作成します.
今日は主にその中の第6ステップを確認しました.Buttonを触発して写真撮影を実現しました.
ok、紹介を開始します
1.「写真を撮る」という動作はどのmethodで行われますか?答えは――android.hardware.amera類の方法です.
public final void TaePicture(Camera.ShutterCallback shutter、Camera.Picture Callback raw、Camera.Picture Callback postview、Camera.Picture Callback jpeg)
私たちはこのTaePicture方法をclass IsiCamera 1 Activity extens Activityのに置きます.
クラスprvate class Cameraa SurfaceView SurfaceVieds SurfaceView implements SurfaceHolder.Callbackに含まれています.
このようにIsiCamera 1 Activity類ではタタリPictureが必要です.camera.TaePictureを呼び出すだけでいいです.ここでcameraはprvate class Camera SurfaceViewの一つのobjectです.
2.camera.take Picture()と書いたら写真を撮ることができますか?答えは似ていますが、あまり良くないです.なぜですか?take Pictureはいつでもできないからです.例えば、写真を撮り終わったばかりです.
例えば、プログラムを開けたばかりのCamera camera.openがまだ実行されていないとき.だから判断します.
具体的に採用した戦略はもう一つの手順を包むことです.
public boolean capture(Camera.PictureCallback jpegHandler) {
if (camera != null) {
camera.takePicture(null,null,jpegHandler);
return true;
} else {
return false;
}
}
そこで写真を撮るときは、この強化タイプのcapture方法を呼ぼう.3.capture方法で伝わるパラメータは何ですか?答えは――一つのインターフェース!おかしいでしょう.でも下の文字を見たらinterfaceがパラメータを作るのは本当に強いと思います.
一つの方法のパラメータがinterfaceタイプの場合、一つのクラスがinterfaceを実現すれば、このクラスのobjectのhandleをinterfaceパラメータに渡すことができる.このように、インターフェースパラメータは、class implementによって実現されるインターフェース内の方法をフィードバックすることができる.
ちょっと分かりにくいですか?
ということは、このような設定により、capture()メソッドが呼び出された時に、
interface Camera.Picture Callbackの方法を使って、つまりabstract void onPicture Takeの方法を使うことができます.
これはまさに私達が欲しいのです.onPictureTake()メソッドのコードは写真の保存機能を実現します.
コードを見てください
これはclass IsiCamera 1 Activityでcaptureメソッドを呼び出すコードです.new Camera.Picture Callbackを伝えました.
cameraView.capture(new Camera.PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {//Camera.PictureCallback interface
Log.v("Still", "Image data received from camera"); // abstract void onPictureTake()
FileOutputStream fos;
try {
// Fully qualified path name. In this case, we
// use the Files subdir
String pathForAppFiles = getFilesDir().getAbsolutePath();
pathForAppFiles = pathForAppFiles + "/" + STILL_IMAGE_FILE;
Log.d("Still image filename:", pathForAppFiles);
fos = openFileOutput(STILL_IMAGE_FILE, MODE_WORLD_READABLE);
fos.write(data);
fos.close();
} catch (Exception e) {
Log.e("Still", "Error writing file", e);
}
}
});
4.写真の保存実は上記のプログラムはオプンFIleOutput(STILLAGEFuFILE)、STILLです.IMAGEF_FILEというパスの父の経路は何ですか?分かりません.sdcardで探してみましたが、見つけられませんでした.メモリに保存したと思いますが、メモリの無駄ですね.
ヒムのブログを転載してください.
原文の住所: http://blog.csdn.net/xiaominghimi/archive/2011/01/02/6113019.aspx
私たちのデータをOutputStream/InputStreamを通してSDカードにどうやって取り込むかを紹介します.
実は私達のデータをSDカードに入れて、コードを二箇所修正する必要があります.
注意:必ずSDカードが必要です.どうやってSDカードを作るかについては前の文章でもう二つの方法を話しました.できない子供靴は見に行ってもいいです.
第一:SDカードがあるかどうかを確認する.
第二:読み込んだ箇所を修正する(備考1)
fis=this.openFileInput(「save.hisi」);ここにはパスがありません.パスはデフォルトのdata-data-come.hisi-filesの下です.
私たちのSDカードのパスを置き換えればいいです.
File path=new File('/sdcard/hisi/save.hisi)//ここにFileディレクトリのパスを新規作成します.
fis=new FileInputStream(path)着信経路
3番目 : 書き込みの箇所を変更する(備考2)
fos=this.openFileOutput(「save.hisi」、MODE uPRIVATE)ここもデフォルトパスです.変更が必要です.
注意:ここで修正したら、finallyでの判定も適切に修正します.
システムパスであれば、このファイルがない場合、アンディはデフォルトで作成します.しかし、私たちはSDカードを入れる時、自分でディレクトリパスとファイルを作成します.