Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在应用程序中存储Android Camera onPictureTaken方法中的字节[],以供以后使用_Android_Image_Camera - Fatal编程技术网

如何在应用程序中存储Android Camera onPictureTaken方法中的字节[],以供以后使用

如何在应用程序中存储Android Camera onPictureTaken方法中的字节[],以供以后使用,android,image,camera,Android,Image,Camera,我正在编写一个更大的Android应用程序,我在应用程序中使用摄像头。我想用相机做的就是让用户拍一张照片,然后开始一个新的活动来显示该图像,并允许用户决定是否保留该图像。我最难理解的是如何简单地存储onPictureTaken方法中的byte[]数据,以便在下一个活动中向用户显示它。我尝试过许多不同的路线,但都没有成功。我尝试的最后一件事是创建一个globalsettings类来扩展应用程序类,并在其中创建一个byte[]字段来存储摄像头中的byte[],以便我可以在其他活动中使用它,但我的全局

我正在编写一个更大的Android应用程序,我在应用程序中使用摄像头。我想用相机做的就是让用户拍一张照片,然后开始一个新的活动来显示该图像,并允许用户决定是否保留该图像。我最难理解的是如何简单地存储onPictureTaken方法中的byte[]数据,以便在下一个活动中向用户显示它。我尝试过许多不同的路线,但都没有成功。我尝试的最后一件事是创建一个globalsettings类来扩展应用程序类,并在其中创建一个byte[]字段来存储摄像头中的byte[],以便我可以在其他活动中使用它,但我的全局变量仍然没有设置。我的CameraActivity代码如下所示:

public class CameraActivity extends Activity
{
    CameraPreview Preview;
    Intent intent;
    byte[] image;
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.cameralayout);
        Preview = new CameraPreview(this);
        ((FrameLayout)findViewById(R.id.uxfmlayPreview)).addView(Preview);
        intent = new Intent(this, PostCaptureActivity.class);
    }

    public void uxbtnCaptureSnap_Click(View v)
    {
        Preview.DeviceCamera.setPreviewCallback(null);
        Preview.DeviceCamera.takePicture(shutterCallback, rawCallback,   jpegCallback);
        startActivity(intent);
        finish();
    }

    public void uxbtnCaptureExit_Click(View v)
    {
        Intent i = new Intent(this, ExploreMenuActivity.class);
        setResult(RESULT_OK);
        startActivity(i);
        finish();
    }

    ShutterCallback shutterCallback = new ShutterCallback()
    {
    public void onShutter() {}
    };

    PictureCallback rawCallback = new PictureCallback() 
    {
    public void onPictureTaken(byte[] data, Camera camera) {}
    };

    PictureCallback jpegCallback = new PictureCallback() 
    {
        public void onPictureTaken(byte[] data, Camera camera)
        {
            ((GlobalSettings)getApplication()).setGlobalImage(data);
            camera.release();
            camera = null;

        }
    };
}
以下是我的PostCaptureActivity onCreate()方法中的代码,在该方法中,我尝试转换图像并将其设置为imageview的源:

public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.postcapturelayout);
    SnapShot = ((ImageView)findViewById(R.id.uximgSnapshot));
    if(((GlobalSettings)this.getApplication()).getGlobalImage() != null)
    {
        Bitmap b = BitmapFactory.decodeByteArray(((GlobalSettings)this.getApplication()).getGlobalImage(), 0, ((GlobalSettings)this.getApplication()).getGlobalImage().length);
        SnapShot.setImageBitmap(b);
    }
    else
    {
        Toast.makeText(this, "Oops! Picture cannot be saved", Toast.LENGTH_SHORT).show();
    }
}

关于使用意图:

intent = new Intent(this, PostCaptureActivity.class);
intent.putExtra("image", data);
startActivity(intent);
finish();

将其放入
onPictureTaken
方法中。

此帖子不再需要答案。我发现了问题所在。一旦我在我的设备上调试了这个应用程序,我意识到我在日志中得到了一个java.lang.outOfMemory。为了解决这个问题,我使用了一种快速算法,找到运行应用程序的设备所支持的最小图片大小,然后将其设置为相机的图片大小。