gpt4 book ai didi

android - 无法从相机 Intent 中以最大分辨率保存图像

转载 作者:行者123 更新时间:2023-11-30 04:45:24 28 4
gpt4 key购买 nike

我正在通过 Intent 打开相机并尝试将图像保存到 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;

任何人都可以帮助存储我正在拍摄的高分辨率图像......

最佳答案

我想你使用下面的类来捕获图像它保存图像和图像分辨率取决于您的相机 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;
}
}

主.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>

可能适用于您的应用程序....

关于android - 无法从相机 Intent 中以最大分辨率保存图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5087836/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com