電話からの驚きなしに、どのくらいの速さで次々と写真を撮れるか疑問に思っています (fx: 'force close; のように)
当時のことを知っている人はいますか?
500 ミリ秒が安全な時間であることはわかっています。100、200、300ミリ秒で実験するとエラーが発生しますが、間違っているかもしれません。
Motorola droid は 30 fps のビデオを撮影できるので、本当に高速な画像が必要な場合は、MediaRecorder を使用できます。
それは、ソフトウェアの問題とは別に、実際に使用しているデバイスによって異なります。電話でテストを実行するには、固定数 (1000 枚など) の写真を自動的に撮影し、タイミングを合わせて、そこから平均時間と標準偏差を見つけます。いくつかのデバイスとエミュレーターでそれを行うと、実際にかかる時間が確実にわかります.
これは、「写真を撮る」と定義するものに完全に依存します-ネイサンが述べたように、ビデオ(基本的に一連の縮小された圧縮された写真)を記録するとき、30ミリ秒ごとに写真を「撮る」ことができます。ただし、「写真を撮る」を 5MP jpeg 画像を SD カードにコピーすることと定義すると、おそらく時間がかかります。
「(1000 枚の写真を撮るために) ループを作るだけ」と言うとき、特にエラーについて不平を言うときは、その意味を明示的に説明する必要があります。
インターフェイスを拡張すると仮定するとCamera.PictureCallback
、画像を渡す前に多くの処理が舞台裏で行われます (jpeg 圧縮のように)。onPictureTaken
別の写真を撮るために、実装内でイベントをスローしようとしましたか? これは、やりたいことをテストする安全な方法かもしれません。そうしないと、大量の「写真を撮る」イベントを発生させると、何らかのヒープ オーバーフローが発生する可能性があります。
編集:大まかに言えば、これは私が意味したことです:
public void onPictureTaken(
final byte [] data, final android.hardware.Camera camera) {
saveDataToFile("/DCIM/tempjpeg.jpg", data);
camera.takePicture(null, null, this);
}
できるだけ早く takePicture を呼び出してください - コールバックの中で! これは永久にループするため、変更せずに使用しないでください。これを試したところ、数枚の写真で機能しましたが、応答が停止しました。2 枚の写真で停止すると、Nexus One では 1 秒もかからないようです。それが役立つことを願っています。