關於android camera.setPreviewCallback問題(在預覽模式,直接做影像做修改)

2009.10.09 09:51PM
關於android camera.setPreviewCallback問題(在預覽模式,直接做影像做修改)

問題如下,希望一起研究Android的camera 一起來討論吧^^ 下面是預覽模式時,會做的動作

 

camera.setPreviewCallback(new PreviewCallback() {  
    public void onPreviewFrame(byte[] _data, Camera _camera) { 
            // TODO Do something with the preview image. 
            在這邊我將byte[] _data 轉成bitmap後,對bitmap做改變完,我要怎麼更新到預覽的顯示??
 
       Bitmap bm = null;
        bm = BitmapFactory.decodeByteArray(_data, 0, _data.length); 
       Log.i("bitmap1",bm.getHeight()+"_height");//執行到這行時…會寫未正常中止…的錯誤,用到bm的相關資源…就給我出錯…透過bm在copy一份 bitmap也是…
因為他是YCBCR的格式,可是就算我加一個方法上去把data改成RGB,跑不到十秒就會出現OUT OF MEMORY問題…
 
        Bitmap bitmap1 = bm.copy(android.graphics.Bitmap.Config.RGB_565, true);
        int r=0,g=0,b=0,color=0;
          //將bitmap1轉灰階
          for(int y=0;y<bitmap1.getHeight();y++){
            for(int x=0;x<bitmap1.getWidth();x++){
              color=0;
              r=(bitmap1.getPixel(x, y)&0xFF0000)>>16;
              g=(bitmap1.getPixel(x, y)&0xFF00)>>8;
              b=(bitmap1.getPixel(x, y)&0xFF);
              //color= (r+g+b)/3;
              color= (int)(r*0.299+g*0.587+b*0.114);
              color=((color<<16)^0xFF0000)+((color<<8)^0xFF00)+((color)^0xFF);
              color=(color*-1)-1;
              bitmap1.setPixel(x,y,color);
              
            }
          
          }       
 
也就是我目前的預覽的資源目前 都被我 改成bitmap了,接下來如何更新到SurfaceView 
有大大會嗎^^
     }
});

 

2 則回應

  • 請問您的問題有解決了嗎?

    我目前有一樣的需求要處理, 更慘的是…

    BitmapFactory.decodeByteArray(_data, 0, _data.length); 

    這一行回傳給我null 看起來是_data 沒辦法被decode

    2010-02-08
    • chillpicky wrote:

      請問您的問題有解決了嗎?

      我目前有一樣的需求要處理, 更慘的是…

      BitmapFactory.decodeByteArray(_data, 0, _data.length); 

      這一行回傳給我null 看起來是_data 沒辦法被decode

       

       請問您問題解決了嗎

      小弟剛好也遇到這個問題

      可以分享一下你的解決方法嗎

      謝謝你

      2010-08-20