Мне удалось сделать снимок с помощью камеры SonyEricsson. Снимок выглядит нормально, и для этого я использовал альбомную ориентацию в своей деятельности.
Проблема в том, что сделанный снимок не является полноэкранным ... он занимает только 50% моего экрана, и я не могу увеличить его.
Вот как я это сделал:
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
Log.e(TAG, "onCreate");
Bundle extras = getIntent().getExtras();
getWindow().setFormat(PixelFormat.TRANSLUCENT);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.editphoto);
mSurfaceView = (SurfaceView) findViewById(R.id.surface_camera);
mSurfaceView.setOnClickListener(this);
mSurfaceHolder = mSurfaceView.getHolder();
mSurfaceHolder.addCallback(this);
mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
mSurfaceHolder.setFixedSize(getWindow().getWindowManager()
.getDefaultDisplay().getWidth(), getWindow().getWindowManager()
.getDefaultDisplay().getHeight());
}
А вот мой surfaceChanged()
метод:
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
Log.e(TAG, "surfaceChanged");
if (mPreviewRunning) {
mCamera.stopPreview();
}
Camera.Parameters p = mCamera.getParameters();
List<Size> sizes = p.getSupportedPictureSizes();
System.out.println("Lista de parametrii este urmatoarea:"+sizes);
Size size = sizes.get(0);
p.setPreviewSize(640, 480);
p.setPictureSize(size.width,size.height);
mCamera.setParameters(p);
try {
mCamera.setPreviewDisplay(holder);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mCamera.startPreview();
mPreviewRunning = true;
}
Я пытаюсь получить список со всеми изображениями поддерживаемого размера, используя этот метод:
List<Size> sizes = p.getSupportedPictureSizes();
, который возвращает следующее:
[android.hardware.Camera$Size@65d4c50, android.hardware.Camera$Size@65d49ec, android.hardware.Camera$Size@50ddab8, android.hardware.Camera$Size@3fe4e00, android.hardware.Camera$Size@32ea628, android.hardware.Camera$Size@3be67b8, android.hardware.Camera$Size@27ef0c0, android.hardware.Camera$Size@27eefd0, android.hardware.Camera$Size@13f7860, android.hardware.Camera$Size@ef9a20]
Что я делаю, это зацикливаю этот список и устанавливаю размер моей картинки, чтобы получить больший размер:
Size size = sizes.get(0);
p.setPictureSize(size.width,size.height);
Я также сделал: sizes.get(1)
, sizes.get(2)
, sizes.get(3)
..... sizes.get(8)
.
Теперь проблема в том, что когда я делаю:
Size size = sizes.get(0);
p.setPictureSize(size.width,size.height);
мой экран становится черным, и через некоторое время я получаю эту ошибку в своей logcat:
WIN DEATH: null
Failed looking up window
java.lang.IllegalArgumentException: Requested window android.os.BinderProxy@2b40d510 does not exist
at com.android.server.WindowManagerService.windowForClientLocked(WindowManagerService.java:8180)
at com.android.server.WindowManagerService.windowForClientLocked(WindowManagerService.java:8171)
at com.android.server.WindowManagerService$WindowState$DeathRecipient.binderDied(WindowManagerService.java:7029)
at android.os.BinderProxy.sendDeathNotice(Binder.java:389)
at dalvik.system.NativeStart.run(Native Method)
И когда я пытаюсь: sizes.get(1)
, sizes.get(2)
, sizes.get(3)
..... sizes.get(8)
, это работает, но моя картинка выглядит так:
http://i53.tinypic.com/2ib2crn.png
Так что же мне делать, чтобы получить полноэкранное изображение? Спасибо