2012-07-08 23 views
0

我正在編寫一個較大的Android應用程序,並在應用程序中使用相機。我想用相機拍攝的所有內容都是讓用戶拍攝一張照片,然後開始一項新活動以顯示該圖像,並允許用戶決定是否要保留該圖像。我有最難的時間搞清楚如何簡單地存儲來自onPictureTaken方法的byte []數據,以便我可以在下一個活動中將其顯示給用戶。我嘗試過很多不同的路線,但都沒有成功。我嘗試的最後一件事是創建一個全局設置類,該類擴展了Application類並在其中創建了一個byte []字段以存儲來自相機的byte [],以便我可以在另一個activity中使用它,但是我的全局變量仍然不是設置。我CameraActivity代碼如下所示:如何在Android應用程序中存儲byte [] onPictureTaken方法以備後用

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(); 
    } 
} 
+0

這篇文章不再需要一個答案。我找出了什麼是錯的。一旦我實際調試了我的設備上的應用程序,我意識到我正在日誌中獲取java.lang.outOfMemory。爲了解決這個問題,我使用了一種快速算法來查找運行該應用程序的設備所特有的最小支持的圖片大小,然後將其設置爲相機的圖片大小。 – 2012-07-09 14:12:17

回答

0

什麼使用意圖:

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

把這裏面的onPictureTaken方法。

相關問題