我使用以下代碼捕獲圖像。其中我使用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();
}
}
}
很抱歉,但我在GridView中使用Android默認的相機,並從SD卡中的圖片形象定位是爲了很好......但是當我使用Surfacview捕捉圖像比問題發生(SurfaceView捕獲圖像在potrait模式,但顯示圖像在風景模式..) – rajeev
是啊我使用此代碼.....但此代碼設置相機在橫向模式下不使用此代碼我的相機處於potrait模式... 。但主要prblm是在橫向模式下顯示的圖像.... – rajeev
好吧我想告訴你一件事,當您使用相機不同的設備具有不同的相機方向在縱向和橫向模式。所以你無法處理它的每一個設備,如果你想設置你的旋轉肖像模式,那麼我張貼一些代碼嘗試告訴我是前置攝像頭還是後退。 –