我正在使用Camera Activity来捕捉图片.我用MediaStore.EXTRA_OUTPUT额外参数调用它.图像被正确保存到提供的路径,把它保存到图库文件夹,所以我可以在"图库"应用程序中查看图像 - 我可以避免这种情况吗?
...
File file = new File(Environment.getExternalStorageDirectory(), "Test.jpg" );
iImageOutputUri = Uri.fromFile( file );
// Start camera intent to capture image
Intent intent = new Intent( MediaStore.ACTION_IMAGE_CAPTURE );
intent.putExtra( MediaStore.EXTRA_OUTPUT, iImageOutputUri );
startActivityForResult( intent, CAPTURE_IMAGE );
...
Run Code Online (Sandbox Code Playgroud)
谢谢
是否有使用Android NDK拍照的标准API?
或者是否真的有必要通过Java来实现这一目标?
我使用下面的代码录制视频并且录制完美,但是当它播放视频时,它会颠倒播放.
我mrec.setOrientationHint(180)之前尝试过设置,mrec.prepare();但没用.任何提示?
import java.io.File;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import android.app.Activity;
import android.hardware.Camera;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.Surface;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.Window;
/**
* @author SANA HASSAN
*/
public class CameraSurfaceView extends Activity {
private Preview mPreview;
private MediaRecorder mrec = new MediaRecorder();
private int cameraId = 0;
private Camera mCamera;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
mPreview = new Preview(this);
setContentView(mPreview); …Run Code Online (Sandbox Code Playgroud) 场景:
我需要尽快拍照并将其保存到SD卡.如果我能在0.2秒左右拍摄照片并保存它,那将是非常棒的.
到目前为止我做了什么:
像往常一样,我创建了一个SurfaceView来处理Camera预览并初始化相机对象.图像的质量不需要非常高,这就是为什么我没有使用尽可能大的分辨率而且也不需要自动对焦的原因.我设置这样的参数:
Parameters parameters = camera.getParameters();
parameters.set("jpeg-quality", 70);
parameters.setPictureFormat(ImageFormat.JPEG);
List<Camera.Size> sizes = parameters.getSupportedPictureSizes();
Size size = sizes.get(Integer.valueOf((sizes.size()-1)/2)); //choose a medium resolution
parameters.setPictureSize(size.width, size.height);
camera.setParameters(parameters);
camera.setDisplayOrientation(90);
List<Size> sizes2 = parameters.getSupportedPreviewSizes();
Size size2 = sizes.get(0);
parameters.setPreviewSize(size2.width, size2.height);
camera.setPreviewDisplay(holder);
camera.startPreview();
Run Code Online (Sandbox Code Playgroud)
我将图像保存到SD卡非常简单:
PictureCallback handlePictureStorage = new PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
FileOutputStream outStream = null;
try {
outStream = new FileOutputStream(String.format("/sdcard/%d.jpg", System.currentTimeMillis()));
outStream.write(data);
outStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} …Run Code Online (Sandbox Code Playgroud) 我目前正在使用意图拍照,如下所示:
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
intent.putExtra("return-data", true);
startActivityForResult(intent, CAMERA_REQUEST);
Run Code Online (Sandbox Code Playgroud)
但我真的需要将图像大小设置为尽可能接近正方形.所以在研究之后,你似乎需要做这样的事情:
Camera camera = Camera.open();
Parameters params = camera.getParameters();
List<Camera.Size> sizes = params.getSupportedPictureSizes();
// Once you will see the supported Sizes, you can define them with the method :
setPictureSize(int width, int height);
Run Code Online (Sandbox Code Playgroud)
我的问题是,这些是一起工作还是一个或两个?哪种方法最适合我的需求?
同样,我有96px到96px的盒子用于用户个人资料图片.用户拍摄照片后,我希望图像无需拉伸即可填满整个盒子.是在拍摄照片时设置尺寸的最佳方法,还是在事后改变imageView或bitmap(或......?)?或者,我应该让用户裁剪图片,我可以定义裁剪区域尺寸吗?
编辑:请参阅赏金以获取更新的问题.
我正在为Android开发相机应用程序.
一个要求是将拍摄的照片保存到设备的默认相机照片文件夹中,即Android本机相机存储的文件夹.
我怎么能弄清楚原生相机存放照片的位置 - 我的理解是,不同品牌(三星,HTC,摩托罗拉,索尼......)和型号(Galaxy Tab,Galaxy S4 ......)可能会有所不同. .)
我正在创建一个相机应用程序.捕获时的图像显示在网格视图中.现在,代码在除三星设备之外的所有设备上都能正常工作.
我正面临着方向问题.当我以纵向模式拍摄图像时,图像在网格视图中显示时会旋转.我没有保留任何旋转代码.其次,使用EXIF我在网格视图中获得了正确的图像,但是当设备方向改变时,图像再次以旋转的方式旋转.
附加图片:


对不起图像的分辨率.请知道它们是否不正确.将再次上传.我知道SO上有很多这样的帮助.但我想我在某个地方被困住了.
我指的是以下链接:
http://blog.andolasoft.com/2013/06/how-to-show-captured-images-dynamically-in-gridview-layout.html
android screen-orientation android-camera android-camera-intent android-orientation
我使用此代码从相机获取图片并将其放在imageview上:
private void openCamera()
{
mMediaUri =getOutputMediaFileUri(MEDIA_TYPE_IMAGE);
Intent photoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
photoIntent.putExtra(MediaStore.EXTRA_OUTPUT, mMediaUri);
startActivityForResult(photoIntent, REQUEST_TAKE_PHOTO);
// dialog.dismiss();
}
private Uri getOutputMediaFileUri(int mediaTypeImage)
{
//check for external storage
if(isExternalStorageAvaiable())
{
File mediaStorageDir = getActivity().getExternalFilesDir(Environment.DIRECTORY_PICTURES);
String fileName = "";
String fileType = "";
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new java.util.Date());
fileName = "IMG_"+timeStamp;
fileType = ".jpg";
File mediaFile;
try
{
mediaFile = File.createTempFile(fileName,fileType,mediaStorageDir);
Log.i("st","File: "+Uri.fromFile(mediaFile));
}
catch (IOException e)
{
e.printStackTrace();
Log.i("St","Error creating file: " + mediaStorageDir.getAbsolutePath() +fileName +fileType);
return null;
} …Run Code Online (Sandbox Code Playgroud) 目前我正在尝试将Camera2.Face转换为实际视图的rect,以便在Camera2 API检测到的脸部上绘制圆圈.
我可以通过以下代码获取面数及其数据到Callback中:
private CameraCaptureSession.CaptureCallback mCaptureCallback
= new CameraCaptureSession.CaptureCallback() {
private void process(CaptureResult result) {
Integer mode = result.get(CaptureResult.STATISTICS_FACE_DETECT_MODE);
Face [] faces = result.get(CaptureResult.STATISTICS_FACES);
if(faces != null && mode != null)
Log.e("tag", "faces : " + faces.length + " , mode : " + mode );
}
@Override
public void onCaptureProgressed(CameraCaptureSession session, CaptureRequest request, CaptureResult partialResult) {
process(partialResult);
}
@Override
public void onCaptureCompleted(CameraCaptureSession session, CaptureRequest request, TotalCaptureResult result) {
process(result);
}
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我尝试使用下面的代码将Face rect转换为实际的视图坐标(似乎它不起作用):
/**
* Callback from the CameraCaptureSession.CaptureCallback …Run Code Online (Sandbox Code Playgroud)