1

シャッターボタンを押したときに2つの奇妙なことを経験しましたCameraActivity

  1. デバイス2.3および4.0(Galaxy Ace II、Nexus One、Galaxy Nexus)では、約2秒間フリーズしてから、に進みますnextActivity

  2. Galaxy Ace 2.3.6のみ、凍結期間中に下の写真のような文字化けしたピクセルが表示されますが、後で正しい画像が表示される可能性がありますnextActivity

文字化けしたピクセル

最初は、自分の方法で何かがおかしい、または時間がかかるのではないかと思いましたが、PicutureCallback大丈夫ですか?そして、なぜこの文字化けしたピクセルがギャラクシーエースにのみ表示されるのか理解できません。

PictureCallbackそれで、それをより速くするために処理するより良い方法がありますか?

エラーログがないので、関連するコードを入力するだけです。

// I call the takePicture in my button listener.
camera.takePicture(null, null, mPicture);

// here's the picture callback
private PictureCallback mPicture = new PictureCallback() {

    @Override
    public void onPictureTaken(byte[] data, Camera camera) {


        new ShutterHandler(data).execute();
    }

    class ShutterHandler extends AsyncTask<Void, Void, Void> {

        Bitmap bm;
        String timeStamp;
        String filename;
        Intent nextIntent = new Intent(CameraActivity.this, nextActivity.class);

        // a tricky way to pass data into the AsyncTask
        public ShutterHandler(byte[] data) {
            bm = BitmapFactory.decodeByteArray(data, 0, data.length);

        }


        @Override
        protected Void doInBackground(Void... params) {
            // simply generate a time stamp as filename
            timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
            filename = timeStamp + ".jpg";
            Uri path;
            try {

                // save file to app's private folder
                FileOutputStream fos = openFileOutput(filename, Context.MODE_PRIVATE);

                bm.compress(Bitmap.CompressFormat.JPEG, 100, fos);              
                // retrieve Uri from the file
                path = Uri.fromFile(getFileStreamPath(filename));

                Log.d("CameraActivity", "file saved to: " + path);
                fos.flush();
                fos.close();

                // launch ShowMarkersActivity
                String pathString = path.getPath();
                nextIntent.putExtra("IMG", pathString);
                nextIntent.putExtra("FileName", filename);
                nextIntent.putExtra("FLAG", true);

            } catch (FileNotFoundException e) {
                Log.d("CameraActivity", "File not found: " + e.getMessage());
            } catch (IOException e) {
                Log.d("CameraActivity", "Error accessing file: " + e.getMessage());
            }
            return null;                        
        }
        protected void onPostExecute(Void v) {
            CameraActivity.this.startActivity(nextIntent);
            finish();
        }

    }
};
4

1 に答える 1

0

カメラの画像のコールバックにjpeg形式を返すように依頼すると、すべてが大幅に高速になります。それでも、利用可能なほとんどのデバイスでは、画像のコールバックが遅くなります。

于 2012-10-27T04:30:50.083 に答える