標籤

2011年10月29日 星期六

SCREENSHOT 將相機的影像一併存下來.

之前我們提過 surfaceview 影像是會移動的. 所以無論你怎麼抓. 都只會有自己的畫面, 而不會有任何相機的影像. 經過一天的實驗, 無論是THREAD.SLEEP 也好, 還是 WHILE(TRUE) 也好. 最後都不能讓使用者一鍵存檔上傳 FACEBOOK. 這樣子 FEEL 就不好了.

所以呢, 我們發現了幾個方法..... 其中之一就是相機影像 READY 之後再 CALL SCREENSHOT. 然後再 上傳 FACEBOOK

 PictureCallback jpegPictureCallback = new PictureCallback() {
  @Override
  public void onPictureTaken(byte[] arg0, Camera arg1) {
   ImageView myvv = (ImageView) findViewById(R.id.cambackfround);
   //camuse=true;
   // TODO Auto-generated method stub
   Bitmap resizedBitmap;
   try {
    Bitmap bitmapPicture = BitmapFactory.decodeByteArray(arg0, 0,
      arg0.length);
    Matrix matrix = new Matrix();
    matrix.postScale(1, 1);
    matrix.postRotate(90);
    resizedBitmap = null;
    try {
     resizedBitmap = Bitmap.createBitmap(bitmapPicture, 0, 0,
       bitmapPicture.getWidth(), bitmapPicture.getHeight(),
       matrix, true);
    } catch (Exception e) {
     // TODO Auto-generated catch block
        Toast.makeText(getApplicationContext(), "oops! 您要有 SD 卡才能存圖片喔!",
                Toast.LENGTH_LONG).show();
     e.printStackTrace();
    
    }
    // 大小不變, 先旋轉 90 度 因為我們是直立
    int width = resizedBitmap.getWidth();
    int height = resizedBitmap.getHeight();
    // Log.d("wh","w: "+String.valueOf(width)+" h: "+String.valueOf(height));
    float scaleWidth = (float) newwidth / width;
    float scaleHeight = (float) newheight / height;
    // Log.d("wh","w: "+String.valueOf(scaleWidth)+" h: "+String.valueOf(scaleHeight
    // ));
    matrix = new Matrix();
    matrix.postScale(scaleWidth, scaleHeight);
    // matrix.postRotate(90);
   
    try {
     resizedBitmap = Bitmap.createBitmap(resizedBitmap, 0, 0, width,
       height, matrix, true);
    } catch (Exception e) {
     // TODO Auto-generated catch block
        Toast.makeText(getApplicationContext(), "oops! 您要有 SD 卡才能存圖片喔!",
                Toast.LENGTH_LONG).show();
     e.printStackTrace();
    }
    
    myvv.setImageBitmap(resizedBitmap);
    myvv.setVisibility(View.VISIBLE);
   
    ScreenShot.shoot(Mycamera.this);
    myvv.setVisibility(View.INVISIBLE);
   } catch (Exception e) {
    // TODO Auto-generated catch block
       Toast.makeText(getApplicationContext(), "oops! 似乎記憶體不足喔, FACEBOOK 功能暫時取消了.",
               Toast.LENGTH_LONG).show();
       facebook_function=false;
      
    e.printStackTrace();
   }
  
  
   if(camuse==true){
    pp_facebook(); // 使用者已經按下上傳 FACEBOOK了. 一樣是啟動相機. 可是在最後才呼叫 FACEBOOK 副程式    //myCamera.startPreview();
    //previewing = true;
    
    //sersorrunning = true;
   
   }
   myvv.setVisibility(View.INVISIBLE); // 當然機關就是這句了
   sersorrunning = true;
   myCamera.startPreview();
   previewing = true;
   camuse=false;
  }
 };

沒有留言:

張貼留言