0

次の問題があります。カメラとその上部にあるアプリとオーバーレイとしての画像があります。画像は 4/3 です。画面に最適なサイズを取得し、画像を描画します。問題は、試してみるとすべての画像が表示されないことです。画面の上下で画像を切り取っています。問題は、写真を撮れば完璧な写真が見えるということです

Android SDK 8 を使用しており、カメラはランドスケープ モードです。私の Samsung Galaxy S では、オーバーレイとサーフェス プレビューで同じサイズの 640:480 が得られます。

しばらく遊んでいますが、まだ解決策が見つかりません。

これがコードです。

私のxml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/framecamera"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:gravity="center"
    android:padding="0dip"
    android:layout_margin="0dip"
>
<FrameLayout
    android:id="@+id/surface"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:padding="0dip"
    android:layout_margin="0dip"
>
</FrameLayout>
<ImageButton
    android:id="@+id/button_capture"
    android:contentDescription="@string/click"
    android:text="@string/click"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center|right"
    android:background="@drawable/camera"
    android:src="@drawable/camera"
/>
</LinearLayout>

私のコードの重要な部分:

setContentView(R.layout.camera);

//create an instance of Camera
mcam = getCameraInstance();
Camera.Parameters parameters=mcam.getParameters();
size=getBestPreviewSize(parameters);//gets the 4/3 size

horizontal = Bitmap.createScaledBitmap(horizontal, size.width, size.height, false);

// Create our Preview view and set it as the content of our activity.
mpreview = new CameraPreview(getBaseContext(), mcam);
FrameLayout frame = (FrameLayout) findViewById(R.id.surface);
SurfaceHolder mSurfaceHolder = mpreview.getHolder();
mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

//set our view to 4:3
ViewGroup.LayoutParams params = frame.getLayoutParams();
params.width = size.width;
params.height = size.height;
frame.setLayoutParams(params);

//add the necessary margin to the view
Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
MarginLayoutParams ps=(MarginLayoutParams )frame.getLayoutParams();
ps.topMargin = 0;
ps.bottomMargin = 0;
ps.leftMargin = (display.getWidth()-size.width)/2;//to center the overlay
frame.setLayoutParams(ps);

frame.addView(mpreview);

over = new OverlayPreview(getBaseContext(),horizontal);//inside I draw the canvas
frame.addView(over);

どんなアイデアでも大歓迎です。問題はおそらくパディングまたはxmlにあると思いますが、修正方法がわかりません。どうもありがとうございました。

pd: 私の母国語ではなく、私の英語で申し訳ありません。

4

1 に答える 1

0

わかった!私はついにそれを行う方法を見つけました!

私はそれを行う方法を変更し、現在はフレームに ImageView を使用しています。

// Create our Preview view
mpreview = new CameraPreview(getBaseContext(), mcam);

FrameLayout frame = (FrameLayout) findViewById(R.id.surface);

SurfaceHolder mSurfaceHolder = mpreview.getHolder();
mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

ImageView imageframe = (ImageView) findViewById(R.id.iframe);
imageframe.setImageBitmap(horizontal);

//set our view to 4:3
ViewGroup.LayoutParams params = frame.getLayoutParams();
params.width = size.width;
params.height = size.height;
frame.setLayoutParams(params); 

//add the necessary margin to the view
Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
MarginLayoutParams ps=(MarginLayoutParams)frame.getLayoutParams();
ps.topMargin = 0;
ps.bottomMargin = 0;
ps.leftMargin = (int)((display.getWidth()-size.width)/2) + 50;
ps.rightMargin = (int)((display.getWidth()-size.width)/2) + 50;
frame.setLayoutParams(ps);

frame.addView(mpreview);

それを行うのは最善の解決策ではないと思いますが、少なくとも機能しています。

于 2012-09-04T12:17:09.510 に答える