Не удалось сохранить изображение с максимальным разрешением из намерения камеры - PullRequest
1 голос
/ 23 февраля 2011

Я собираюсь открыть камеру через намерения и пытаюсь сохранить изображение в папку на SDCard. Я могу взять изображение, и изображение сохраняется.

Но проблема в том, что сохраняется изображение с разрешением миниатюры (160 * 120).

Это то, что я делаю ...

Чтобы открыть камеру

mIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    mIntent.putExtra(MediaStore.EXTRA_OUTPUT,
            MediaStore.Images.Media.EXTERNAL_CONTENT_URI
                    .toString());
    mIntent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
    startActivityForResult(mIntent, PHOTO_SELECT);

А на Activity для результата ...

imageFileFolder = new File(Environment.getExternalStorageDirectory(),
            "MyApp");
    FileOutputStream out = null;
    Calendar c = Calendar.getInstance();
    String date = fromInt(c.get(Calendar.MONTH))
            + fromInt(c.get(Calendar.DAY_OF_MONTH))
            + fromInt(c.get(Calendar.YEAR))
            + fromInt(c.get(Calendar.HOUR_OF_DAY))
            + fromInt(c.get(Calendar.MINUTE))
            + fromInt(c.get(Calendar.SECOND));
    imageFileName = new File(imageFileFolder, date.toString() + ".jpg");

    try
    {
        out = new FileOutputStream(imageFileName);
        bmp.compress(Bitmap.CompressFormat.JPEG, 100, out);
        out.flush();
        out.close();
        scanPhoto(imageFileName.toString());
        out = null;

Может ли кто-нибудь помочь в сохранении изображения с высоким разрешением, которое я делаю ...

1 Ответ

1 голос
/ 22 июля 2011

Я думаю, что вы используете следующий класс для захвата изображения, это сохранить изображение и разрешение изображения зависит от вашей камеры MP ... может быть ..

public class CameraApplication extends Activity implements
        SurfaceHolder.Callback {
    private static final String TAG = "cookbook.hardware";
    private LayoutInflater mInflater = null;
    Camera mCamera;
    byte[] tempdata;
    boolean mPreviewRunning = false;
    private SurfaceHolder mSurfaceHolder;
    private SurfaceView mSurfaceView;
    Button takepicture;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
    getWindow().setFormat(PixelFormat.TRANSLUCENT);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);

    setContentView(R.layout.main);

    mSurfaceView = (SurfaceView) findViewById(R.id.surface);

    mSurfaceHolder = mSurfaceView.getHolder();
    mSurfaceHolder.addCallback(this);
    mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

    mInflater = LayoutInflater.from(this);

    View overView = mInflater.inflate(R.layout.cameraoverlay, null);
    this.addContentView(overView, new LayoutParams(
            LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));

    takepicture = (Button) findViewById(R.id.button);

    takepicture.setOnClickListener(new OnClickListener() {
        public void onClick(View view) {
            mCamera.takePicture(mShutterCallback, mPictureCallback, mjpeg);
        }
    });
}

ShutterCallback mShutterCallback = new ShutterCallback() {
    @Override
    public void onShutter() {
    }
};
PictureCallback mPictureCallback = new PictureCallback() {
    public void onPictureTaken(byte[] data, Camera c) {
    }
};
PictureCallback mjpeg = new PictureCallback() {
    public void onPictureTaken(byte[] data, Camera c) {
        if (data != null) {
            tempdata = data;
            done();
        }
    }
};

void done() {
    Bitmap bm = BitmapFactory.decodeByteArray(tempdata, 0, tempdata.length);
    String url = Images.Media.insertImage(getContentResolver(), bm, null,
            null);
    bm.recycle();
    Bundle bundle = new Bundle();
    if (url != null) {
        bundle.putString("url", url);
        Intent mIntent = new Intent();
        mIntent.putExtras(bundle);
        setResult(RESULT_OK, mIntent);
    } else {
        Toast
                .makeText(this, "Picture can not be saved",
                        Toast.LENGTH_SHORT).show();
    }
    finish();
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
    Log.e(TAG, "surfaceChanged");
    try {
        if (mPreviewRunning) {
            mCamera.stopPreview();
            mPreviewRunning = false;
        }
        Camera.Parameters p = mCamera.getParameters();
        p.setPreviewSize(w, h);
        mCamera.setParameters(p);
        mCamera.setPreviewDisplay(holder);
        mCamera.startPreview();
        mPreviewRunning = true;
    } catch (Exception e) {
        Log.d("", e.toString());
    }
}

@Override
public void surfaceCreated(SurfaceHolder holder) {
    Log.e(TAG, "surfaceCreated");
    mCamera = Camera.open();
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
    Log.e(TAG, "surfaceDestroyed");
    mCamera.stopPreview();
    mPreviewRunning = false;
    mCamera.release();
    mCamera = null;
}
}

main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" android:layout_height="fill_parent"
    android:orientation="vertical">
    <SurfaceView android:id="@+id/surface"
        android:layout_width="fill_parent" android:layout_height="fill_parent">
    </SurfaceView>
</LinearLayout>

cameraoverlay.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" android:layout_height="fill_parent"
    android:orientation="vertical" android:gravity="bottom"
    android:layout_gravity="bottom">
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent" android:layout_height="wrap_content"
        android:orientation="horizontal" android:gravity="center_horizontal">
        <Button android:id="@+id/button" android:layout_width="wrap_content"
            android:layout_height="wrap_content" android:text="take picture" />
    </LinearLayout>
</LinearLayout>

и не забудьте разрешение пользователя камеры

<uses-permission android:name="android.permission.CAMERA"></uses-permission>

может работать в вашем приложении ....

...