3

表示にSurfaceViewを使用するカメラアプリを開発しています。


getDrawingCache()(SurfaceViewをラップするレイアウト上)
とcanvas.drawBitmap(...)を使用して、SurfaceViewのスクリーンショットを撮ることができます(そしてそれをビットマップとして保存します)。

ただし、どちらの場合も、ビットマップは常に透明/空白です。

私はギャラクシーS3を持っています、そして私は彼らが彼らのカメラにその機能を持っているのを見ることができますか?

ありがとう!

4

2 に答える 2

2

数時間後、私はそのための素晴らしい解決策を得ました。
最善の方法ではないかもしれませんが、私にとっては十分です。

private long start;
private long end;
private long period;

まず、メディアレコーダーが起動した直後に開始時刻を取得します。

private void startRecording()
{
   mMediaRecoder.start();
   start = System.currentTimeMillis();
}

次に、スクリーンショットを撮るために画面/ボタンを押したときに、期間を保存します。

private void captureImage()
{
   end = System.currentTimeMillis();
   period = end - start;
}

最後に、記録を停止するときに、ピリオドとメディアレトリバーを使用してビットマップを取得します。

private void saveVideo()
{
   MediaMetadataRetriever retriever = new MediaMetadataRetriever();
   //path -> the path to the video
   retriever.setDataSource(path);
   Bitmap bitmap = retriever.getFrameAtTime(period * 1000,MediaMetadataRetriever.OPTION_CLOSEST);
}

お役に立てば幸いです。

于 2012-10-30T16:54:46.297 に答える
0

サーフェスビューのキャッシュは維持されません。そのため、キャッシュされたビットマップを取得できません。実際、ビューがレンダリングされ、そのキャッシュがオンになっている場合、ビューのビットマップはレンダリングされます。ビューのレンダリングの効率を向上させるために、描画のためのシステムによる数学的な計算は行われません。

于 2012-10-29T13:04:05.863 に答える