Я пишу приложение для камеры, которая этот учебный курса: http://marakana.com/forums/android/examples/39.htmlAndroid пользовательского результат камеры ориентация изображения
Теперь я могу использовать камеру и получить данные изображения после пользователя нажмите кнопку. Но у меня проблема, что предварительный просмотр косо, так что я добавить следующий код в 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
, чтобы получить растровое изображение, и установите его в мое изображение, которое определено в моем макете 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 являются кнопки, когда я нажал на , камера фиксирует изображение и устанавливает отображаемые данные, соответствующие изображениюView1/imageView2
Есть некоторые проблемы:
установить ширину и высоту макета, а также максимальную ширину и высоту 100dp, также тип шкалы для fitCenter. Но, похоже, это не так, как я хочу. Я хочу, чтобы изображение отображалось внутри границы. Неужели я ошибаюсь в настройках компоновки?
Изображение всегда в ландшафте, даже я сделал снимок в портретном режиме.
Кроме того, я хочу, чтобы добавить кнопку для переключения включения/выключения камеры, но я не могу понять, как это сделать.
Может кто-нибудь предложить решение для меня? Спасибо.
Извините, я отправил неправильный код выше. У меня нет проблем на поверхности. Но как я могу получить ориентацию данных изображения. Кажется, что я не могу получить EXIF из данных – Hanon