2012-05-18 42 views
0

我使用以下代碼捕獲圖像。其中我使用Surfaceview。捕獲的圖像保存在我創建的android Sdcard文件夾中,但是當我在GridView中顯示這​​些圖像時,圖像方向不同。如果我使用Intent (ACTION_IMAGE_CAPTURE)使用攝像頭,那麼輸出圖像已被很好地定義。任何一個可以幫助我爲什麼使用Surface視圖的相機圖像與使用Intent捕捉的圖像不同(ACTION_IMAGE_CAPTURE)

這裏我有延伸Activity類工具SurfaceHolder.Callback

public class CameraView extends Activity implements SurfaceHolder.Callback { 

     private static final String TAG = "CameraVeiw"; 

     private Camera camera; 
     boolean previewing = false; 
     SurfaceHolder surfaceHolder; 
     private File file = null; 
     private static String mFileName = null; 

     private long name; 

     final int RESULT_SAVEIMAGE = 0; 
     private int w; 
     private int h; 

     public static byte[] data = null; 

     @Override 
     public void onCreate(Bundle savedInstanceState){ 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.camera); 
     } 

我用SurfaceView捕捉圖像

SurfaceView surfaceView = (SurfaceView) findViewById(R.id.surfaceview); 
    surfaceHolder = surfaceView.getHolder(); 
    surfaceView.getWindowVisibility(); 
    surfaceHolder.addCallback(this); 
    surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
    surfaceHolder.setFixedSize(300, 300); //hard coded 

    Button button2 = (Button) findViewById(R.id.picbutton); 
    button2.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 



    camera.takePicture(new CustomShutter(), null, 
    new CustomPictureCallback()); 
    } 
    }); 

    } 
public void surfaceChanged(SurfaceHolder holder, int format, int width, 
    int height) { 

     if(previewing){ 
      camera.stopPreview(); 
      previewing = false; 
     } 

     if (camera != null){ 
      try { 
       camera.setPreviewDisplay(surfaceHolder); 
       camera.startPreview(); 


       previewing = true; 


      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
    } 

public void surfaceCreated(SurfaceHolder holder) { 
     camera = Camera.open(); 
      camera.setDisplayOrientation(90);  } 

@Override 
public void surfaceDestroyed(SurfaceHolder holder) { 
    camera.stopPreview(); 
    camera.release(); 
    camera = null; 
    previewing = false; 
} 

class CustomPictureCallback implements Camera.PictureCallback { 
    private Bitmap bitmap; 
public void onPictureTaken(byte[] data, Camera camera) { 

      FileOutputStream outStream = null; 

       try { 

     String path = "/sdcard/MonsterApp/Photos/" + data+".jpg"; 
       outStream = new FileOutputStream(String.format(path)); 
        outStream.write(data); 
        outStream.close(); 
        Log.d(TAG, "onPictureTaken - wrote bytes: " + data.length); 
       } catch (FileNotFoundException e) { 
        e.printStackTrace(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } finally { 
       } 
       Log.d(TAG, "onPictureTaken - jpeg"); 

       camera.startPreview(); 
       Log.i("Information", "Helllllooooo"); } } 




class CustomShutter implements Camera.ShutterCallback { 


    public void onShutter() { 

    } 

    } 
    @Override 
    public void onDestroy() { 
    super.onDestroy(); 
    if(camera != null) { 
    camera.release(); 
    } 
    } 

} 

回答

0

我認爲當你使用意向(ACTION_IMAGE_CAPTURE),那麼它使用從不處理設備方向的默認應用程序。該設備始終只處於橫向模式。但是如果您在旋轉設備時觀看表面視圖,則會處理方向。所以它也旋轉相機捕獲。我認爲最好的解決方案是將相機捕捉活動修復爲風景,並在風景中設置正確的方向。我認爲那麼你的相機會正常工作。如果你不明白,我可以發佈一些代碼給你..但首先嚐試..我不知道,但我認爲它應該工作。

你可以試試這個曾經

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

在您的創建和寫入使用您的表面視圖。

試試這個設置正確的方向

mCamera.setDisplayOrientation(90);

mCamera.setDisplayOrientation(0);

有四個不同的角度,一定會與您的代碼一起工作。嘗試其中的每一個..

+0

很抱歉,但我在GridView中使用Android默認的相機,並從SD卡中的圖片形象定位是爲了很好......但是當我使用Surfacview捕捉圖像比問題發生(SurfaceView捕獲圖像在potrait模式,但顯示圖像在風景模式..) – rajeev

+0

是啊我使用此代碼.....但此代碼設置相機在橫向模式下不使用此代碼我的相機處於potrait模式... 。但主要prblm是在橫向模式下顯示的圖像.... – rajeev

+0

好吧我想告訴你一件事,當您使用相機不同的設備具有不同的相機方向在縱向和橫向模式。所以你無法處理它的每一個設備,如果你想設置你的旋轉肖像模式,那麼我張貼一些代碼嘗試告訴我是前置攝像頭還是後退。 –

0

有一個元數據與Android相機拍攝的所有圖像。我認爲在使用表面視圖進行捕捉時,您並未保存帶有圖像的EXIF元數據。 EXIF元數據包含拍攝圖像時手機的方向細節。所以Android系統在顯示時根據方向細節旋轉圖像。這個細節可以幫助你

http://mobisocial.stanford.edu/news/2011/08/rotating-images-in-android/

+0

對不起,但我dnt取消和這個代碼做和在哪裏使用此代碼...... – rajeev

+0

鑑於鏈接不可用(404找到) – Asha

相關問題