标签: android-camera-intent

Android:无法获取相机拍摄的原始照片(只能读取压缩照片)

在我的应用程序中,我通过Android摄像头捕获照片,然后我想将其发送到服务器.为此我使用Client Socket编程.我将捕获照片转换为bytearray(byte []),然后将其发送到服务器.每件事都在事实上发挥作用.

问题在那里我无法将原始照片发送到服务器.缩略图照片由Android手机发送.但是当我通过相机捕捉照片时,原始照片就在画廊中.

如何在我的应用程序中使用此原始照片?

我的代码:

Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        cameraIntent.putExtra("outputFormat",Bitmap.CompressFormat.JPEG);
        cameraIntent.putExtra("return-data", true);
    startActivityForResult(Intent.createChooser(cameraIntent, "Select Picture"),
                    CAMERA_REQUEST);
Run Code Online (Sandbox Code Playgroud)

在onActivityResult方法中:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == CAMERA_REQUEST) {
        Bitmap photo = (Bitmap) data.getExtras().get("data");
//          byte[] a = (byte[]) data.getExtras().getByteArray("data"); // I also use this but not work


        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        photo.compress(CompressFormat.JPEG, 100, bos);
        byte[] bitmapdata = bos.toByteArray();


    }
}
Run Code Online (Sandbox Code Playgroud)

bitmapdata照片是有,但压缩的照片不是原始的.有人说,改变压缩质量领域(CompressFormat.JPEG,100,bos); 在0到100之间,但什么都不会发生.

- >>还有其他方法可以获得相机拍摄的原始照片 …

android photo android-camera android-camera-intent

2
推荐指数
1
解决办法
5089
查看次数

三星Galaxy SIII的相机有错误吗?

我使用以下代码启动相机,但是,3/4的时间,照片无法保存到内存中.这只发生在Galaxy SIII上.它适用于Nexus S和Nexus One

public void photoNew() {
    holdingImage = getContentResolver().insert(MUtil.genImgUri(), new ContentValues());   
    Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    Bundle extras = new Bundle();
    extras.putParcelable(MediaStore.EXTRA_OUTPUT, holdingImage);
    extras.putBoolean("return-data", true);
    i.putExtras(extras);
    startActivityForResult(i, REQ_PHOTO);   
}
Run Code Online (Sandbox Code Playgroud)

android android-camera android-camera-intent

2
推荐指数
1
解决办法
1950
查看次数

用于旋转摄像头意图捕获的图像的代码无法在Android中运行

我有一个问题,我使用相机意图捕获的图像被旋转,我问为什么使用相机意图捕获的图像在Android上的某些设备上旋转?

所以根据那里的建议答案,我现在正在尝试旋转使用相机获得的图像(我已经使用了相机意图).我的代码是,

public class SimpleCameraActivity extends Activity {
private static final int TAKE_PICTURE = 1888;
private Uri imageUri;
ImageView imageView;
Bitmap bitmap;
Button btnOK, btnDiscard;
RelativeLayout rLButtons;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.simple_camera);
    imageView = (ImageView) findViewById(R.id.image_view_sc);
    captureImage();
}

public void captureImage() {
    Intent intentCamera = new Intent("android.media.action.IMAGE_CAPTURE");
    File filePhoto = new File(Environment.getExternalStorageDirectory(), "Pic.jpg");
    imageUri = Uri.fromFile(filePhoto);
    MyApplicationGlobal.imageUri = imageUri.getPath();
    intentCamera.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
    startActivityForResult(intentCamera, TAKE_PICTURE);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intentFromCamera) {
    super.onActivityResult(requestCode, resultCode, …
Run Code Online (Sandbox Code Playgroud)

android image rotation image-rotation android-camera-intent

2
推荐指数
1
解决办法
6713
查看次数

Android代码相机意图+裁剪图像的说明

想要拍摄照片,裁剪并将图像保存在Android应用程序中时,我在Java中使用以下意图...

            Intent camera=new Intent();
            camera.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
            camera.putExtra("crop", "true");
            camera.putExtra("outputX",600);
            camera.putExtra("outputY", 600);
            camera.putExtra("aspectX", 1);
            camera.putExtra("aspectY", 1);
            camera.putExtra("scale", true);
            camera.putExtra("return-data", false); 
Run Code Online (Sandbox Code Playgroud)

上述意图效果很好,但我的Y和X总是相等的.我打算分解代码,找出指定的内容,这样我就可以为我拍摄的图像制作可定制的 - 最重要的是独立的 - X和Y值...

android crop android-camera android-camera-intent resize-crop

2
推荐指数
1
解决办法
5271
查看次数

具有摄像头的设备上的intent.resolveActivity()为NULL(4.2.2)

建议使用这段代码并说明

请注意,startActivityForResult()方法受调用resolveActivity()的条件的保护,该条件返回可以处理intent的第一个活动组件.执行此检查很重要,因为如果使用无应用程序无法处理的意图调用startActivityForResult(),您的应用程序将崩溃.因此,只要结果不为null,就可以安全地使用intent.

码:

private void dispatchTakePictureIntent() {
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
    }
}
Run Code Online (Sandbox Code Playgroud)

它工作正常,但不适用于运行4.2.2的Alcatel设备.我收到了ELSE祝词"不能用相机......"

如果设备有相机,这怎么可能?

我现在应该怎么做?如何处理这个用例 - 显然我不得不依赖一些带摄像头的设备会报告"无法使用摄像头",检测到那些设备有摄像头然后使用它?!

文档或SO问题对ELSE案例一无所知.

android android-camera android-camera-intent

2
推荐指数
2
解决办法
4233
查看次数

onActivityResult 返回 Intent data.getData(); 始终为 Null 仅在 Marshmallow 和 Lollipop 中

阅读我的全部代码。除了Marshmallow和之外,它在每部手机上都能完美运行Lollipop。In Marshmallowand Lollipopphone Only 问题是只有在Picture Captured 的情况下才会data.getData()返回。如果我捕获视频,它工作正常。我有 4 个案例 -null

  1. 从图库中选择图片并在Imageview- 工作正常中显示其缩略图。

  2. 从相机捕获图片并在中显示其缩略图Imageview-在和 中不起作用MarshmallowLollipop

  3. 从图库中选择视频并在Imageview- 工作正常中显示其缩略图。

  4. 3.Capturing Video from Camera 并在Imageview- Working Fine 中显示其缩略图。

现在有很多解决方案,但它们看起来都不令人满意,如果代码在视频捕获的情况下工作正常,那么为什么它不适用于图像捕获?这是错误还是我在某处做错了?

这是我的代码。我评论了发生崩溃的一行-

 @Override
      protected void onActivityResult(int requestCode, int resultCode, Intent data) {
      super.onActivityResult(requestCode, resultCode, data);
      int THUMBSIZE = 120;
      switch (requestCode){


        case RESULT_LOAD_IMAGE:


            if (resultCode==RESULT_OK){
                String column_Name= MediaStore.Images.Media.DATA;
                String picturePath=getPath(column_Name,data.getData());
                Bitmap …
Run Code Online (Sandbox Code Playgroud)

camera android android-camera-intent onactivityresult

2
推荐指数
1
解决办法
8783
查看次数

使用相机意图拍摄的照片在ImageView(7.0+)上质量不高

我知道有很多这方面的例子,但我还没有找到一个适用于7.0+的可靠例子.我知道我正在设置图像的缩略图而不是原始图像,但我不知道如何获得它.

这是我的代码:

if( ContextCompat.checkSelfPermission(this, android.Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            requestPermissions(new String[]{android.Manifest.permission.CAMERA},
                    CAMERA_REQUEST_CODE);

        }

    }else{
        Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
            startActivityForResult(takePictureIntent, CAMERA_REQUEST_CODE);
        }
    }

    }


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == CAMERA_REQUEST_CODE&& resultCode == RESULT_OK && data != null ) {

        Bitmap bitmap = (Bitmap) data.getExtras().get("data");
        mImageView.setImageBitmap(bitmap);




    }}
Run Code Online (Sandbox Code Playgroud)

android android-camera-intent

2
推荐指数
1
解决办法
1692
查看次数

如何从 MediaStore.Images.Media.getBitmap(contentResolver, uri) 获取位图?

我在从 uri 检索位图时遇到困难。我试图通过意图打开相机后获取从相机拍摄的图像。

                    try {
                        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                            intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
                            imageUri = FileProvider.getUriForFile(mContext, mContext.getApplicationContext().getPackageName(), createImageFile());
                            intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);   // set the image file name
                        }
                        startActivityForResult(intent, PERMISSION_REQUEST_CODE_CAMERA);
                    } catch (ActivityNotFoundException e) {
                        e.printStackTrace();
                    }
Run Code Online (Sandbox Code Playgroud)

登录时的 imageUri 是

内容://com.example/external_files/Pictures/CustomFolder/15122017_photo_115344.jpg

打开相机并拍照后,调用我的 onActivityResult 。因为我使用 MediaStore.EXTRA_OUTPUT,所以我的数据对象中没有收到任何内容,它为空。我尝试使用 MediaStore.Images.Media.getBitmap() 来检索位图。我传入 imageUri。我相信这可能不正确,因为我收到了异常。

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == PERMISSION_REQUEST_CODE_CAMERA) {
        if (resultCode == Activity.RESULT_OK) {

            Bitmap bitmap;
            try {
                bitmap = MediaStore.Images.Media.getBitmap(mContext.getContentResolver(), …
Run Code Online (Sandbox Code Playgroud)

android bitmap mediastore android-camera-intent

2
推荐指数
1
解决办法
1万
查看次数

ACTION_IMAGE_CAPTURE 意图:避免 Activity 被破坏/进程被终止

这个问题是针对熟悉Activity Lifecycle 的Android 开发人员的。

我正在开发一个执行面部检测和面部标志识别的应用程序。

相应的机器学习模型需要很长时间才能从 SD 存储中解析并加载到内存中。在当前的平均 Android 设备上,很容易需要长达 20 秒的时间。顺便说一句,所有这些面部分析内容和模型加载都发生在 C++ 本机代码中,并使用 Android NDK + JNI 进行集成。

由于模型加载需要很长时间,因此实际的解析和加载是通过 AsyncTasks 提前安排在后台的,因此用户不会注意到巨大的延迟。

在执行实际的人脸分析之前,用户可以通过 MediaStore.ACTION_IMAGE_CAPTURE 进行自拍。这将调用设备上安装的单独相机应用程序并通过 onActivityResult 接收图片。

现在问题开始了:当用户位于单独的相机活动/应用程序中时,几乎总是整个应用程序进程都会被终止。大多数情况下,它似乎发生在从相机应用程序返回之前(时间似乎很奇怪)。我做了另一个测试,以确认在相机应用程序内按下拍摄按钮时会发生这种情况。在那一刻,我的应用程序被杀死了。当按下“接受图像”按钮时,将重新创建应用程序。ActivityManager 在 logcat 中给出的进程终止原因是“prev LAST”(我通过 Google 没有找到任何关于此含义的信息,但我看到许多其他应用程序也因这个原因被终止,所以它似乎发生了经常)。

因此,我的应用程序的所有 Activity 都需要由 Android 重新创建(对我来说很好,因为它发生得很快),而且面部分析模型也必须从头开始重新加载,用户会注意到在自拍之前有巨大的延迟可以进行处理。

我的问题是:是否有可能告诉Android,活动/应用程序有合法的理由在暂时处于后台获取相机图片时不被杀死?毕竟,ActivityManager 做出了终止应用程序的错误决定。如此频繁地重新加载模型会占用大量的 CPU 和内存资源。

这似乎是 Android 生命周期架构中的一个疏忽。我知道很少有应用程序有我的应用程序的特定要求,但它仍然看起来很愚蠢。我能想到的“解决”这个问题的唯一方法是在应用程序中实现我自己的相机 Activity,但这违背了 Android 自己的最佳实践。

还有一些“android:persistent”标志,您可以通过 AndroidManifest.xml 坚持您的 Activity,但文档完全不清楚其含义。请参阅有关此的文档。

顺便说一句:当应用程序进程被杀死时,onDestroy 不会被调用。我在某处读到不能保证 onDestroy 会被调用,这对我来说实际上不是问题。虽然我想知道为什么 Android 文档没有明确说明这一点。

android android-ndk application-lifecycle activity-lifecycle android-camera-intent

2
推荐指数
1
解决办法
1060
查看次数

自定义视频录制屏幕

我正在尝试实现一个应用程序,当启动时,我的自定义视频录制屏幕自动启动视频录制,我自己的按钮停止录制和其他按钮.我所做的是设计按钮的布局,直到现在,但如何在后台添加视频录制屏幕..请帮助.

android video-capture android-camera android-camera-intent

1
推荐指数
1
解决办法
1万
查看次数