Я пишу специальное приложение для камеры, которое следует этому уроку:
http://marakana.com/forums/android/examples/39.html
Теперь я могу использовать камеру и получать данные изображения после нажатия пользователем кнопки.
Но у меня возникла проблема, что предварительный просмотр сбоку, поэтому я добавляю следующий код в SurfaceCreated
@Override
public void surfaceCreated(SurfaceHolder holder) {
// Open the camera when the preview is created
Log.d("Callback", "[surfaceCreated]");
theCamera = Camera.open();
Display display = ((WindowManager)getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
int displayRotation = display.getRotation();
switch (displayRotation) {
case Surface.ROTATION_0: theCamera.setDisplayOrientation(90); break;
case Surface.ROTATION_90: break;
case Surface.ROTATION_180: break;
case Surface.ROTATION_270: theCamera.setDisplayOrientation(180); break;
}
}
Предварительный просмотр был в порядке.
Однако когда я получил данные изображения, я использую BitmapFactory.decodeByteArray
, чтобы получить растровое изображение, и устанавливаю его в свой imageView, который определен в моем макете xml.
Вот мой main.xml
<SurfaceView
android:id="@+id/previewSurfaceView"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_gravity="center" />
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="fill_parent"
android:layout_height="250px" >
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="Button" />
<ImageView
android:id="@+id/imageView1"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:maxHeight="100dp"
android:maxWidth="100dp"
android:scaleType="fitCenter"
android:src="@drawable/ic_launcher" />
</LinearLayout>
<LinearLayout
android:id="@+id/linearLayout2"
android:layout_width="fill_parent"
android:layout_height="250px" >
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="Button" />
<ImageView
android:id="@+id/imageView2"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:maxHeight="100dp"
android:maxWidth="100dp"
android:scaleType="fitCenter"
android:src="@drawable/ic_launcher" />
</LinearLayout>
previewSurfaceView - это небольшой вид для предварительного просмотра камеры
button1 и button2 - это кнопка, когда я нажимаю, камера захватывает изображение и устанавливает изображения, соответствующие imageView1 / imageView2
Есть некоторые проблемы:
Я установил ширину и высоту макета, а также максимальную ширину и высоту равными 100dp, а также тип шкалы для fitCenter. Но, похоже, не отображать как то, что я хочу. Я хочу, чтобы изображение показывалось внутри границ. Я делаю неправильно в настройках макета?
Изображение всегда в альбомной ориентации, даже если я сделал снимок в портретном режиме.
Кроме того, я хочу добавить кнопку для включения / выключения камеры, но не могу понять, как это сделать.
Может кто-нибудь предложить решение для меня? Спасибо.