3

写真撮影アプリを作ろうとしています。

メインアクティビティには、プレビューとしてのサーフェスビューと「写真を撮る」ボタンがあります。2番目のアクティビティには、画像情報用のtextViewと画像を表示するためのimageViewがあります。

putExtra() メソッドを介してデータを転送しようとしました。

mainActivity のコード

public void onPictureTaken(byte[] data, Camera camera) 
{
    // TODO Auto-generated method stub

    RecognizedActivity = new Intent(MainActivity.this, recognized.class);

    RecognizedActivity.putExtra("score", rFace.score);

    //RecognizedActivity.putExtra("leyex", rFace.leftEye.x);
    //RecognizedActivity.putExtra("leyex", rFace.leftEye.x);
    /*RecognizedActivity.putExtra("leye_y", rFace.leftEye.y);
    RecognizedActivity.putExtra("reye_x", rFace.rightEye.x);
    RecognizedActivity.putExtra("reye_y", rFace.rightEye.y);

    RecognizedActivity.putExtra("mouth_x", rFace.mouth.x);
    RecognizedActivity.putExtra("mouth_y", rFace.mouth.y);
    */
    RecognizedActivity.putExtra("rect_bottom"   , rFace.rect.bottom);
    RecognizedActivity.putExtra("rect_right"    , rFace.rect.right);
    RecognizedActivity.putExtra("rect_left"     , rFace.rect.left);
    RecognizedActivity.putExtra("rect_top"      , rFace.rect.top);

    //RecognizedActivity.putExtra("picture", data);
    RecognizedActivity.putExtra("pic", data);

    startActivity(RecognizedActivity);

    cam.startPreview();
}

受け取り活動について

public class recognized extends Activity 
{
int score;
int leye_x, leye_y;
int reye_x, reye_y;

int mouth_x, mouth_y;

int r_bottom, r_top, r_left, r_right;

byte[] picture;
TextView tvFaceInfo;
ImageView ivFaceDisplay;
@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.recognized);

    Intent i = getIntent();
    tvFaceInfo = (TextView) findViewById(R.id.tvFaceInfo);
    ivFaceDisplay = (ImageView) findViewById(R.id.ivFacePicture);

    score       = i.getIntExtra("score", -1);

    r_bottom    = i.getIntExtra("rect_bottom"   , -1);
    r_right     = i.getIntExtra("rect_right"    , -1);
    r_left      = i.getIntExtra("rect_left"     , -1);
    r_top       = i.getIntExtra("rect_top"      , -1);

    picture     = i.getByteArrayExtra("pic");// getByteArrayExtra("picture");

    Bitmap bm = BitmapFactory.decodeByteArray(picture, 0, 1280*960);        
    //bm.copyPixelsFromBuffer(picture);
    ivFaceDisplay.setImageBitmap(bm);
    tvFaceInfo.setText("score: " + score + "\n"
                        + "rect " + r_bottom + " " + r_right + " " + r_left + " " + r_top);
}
}

デバッガーが画像を取得したとき = i.getByteArrayExtra("pic"); 例外がスローされます

「ソースが見つかりません」

どうしたの ?

4

1 に答える 1

1

プロセス間で限られた量のデータを渡すことができます(あなたの場合はアクティビティ)。バイト配列自体を渡す代わりに、バイト配列 (画像) をファイルとして保存し、代わりにそのファイルへのパス (URIContentProviderなど) を渡します。

于 2013-03-12T08:07:37.847 に答える