Android 拍照获取缩略图以及完整图片(适配androidN)

Android 拍照获取缩略图以及完整图片(适配androidN),第1张

takePictureIntentresolveActivity(getPackageManager()) != null

在官方文档中有描述:startActivityForResult()方法受到调用resolveActivity()的条件的保护,该方法返回可处理该意图的第一个活动组件,执行此检查很重要,因为如果您使用没有应用程序可以处理的意图调用startActivityForResult(),则您的应用程序将崩溃。所以只要结果不为空,就可以安全的使用意图,大概意思是检测手机中有没有相机

另外一种检测相机的方法是

required=true 表示要安装该应用,手机必须有摄像头该硬件。要不然不允许安装

鸿洋的博客关于android70 以及 40 拍照封装的处理(点击跳转)

类似介绍比较好的文章推荐-Android 调用系统相机拍照攻略(已适配Android N)

android开发怎么开启相机步骤

android 44:

Intent intent = new Intent();

intentsetClassName("androidcamera2",

"androidcameraCameraLauncher");

startActivity(intent);

android开发中怎么开启语音聊天

1YY语音最早用于魔兽玩家的团队语音指挥通话,逐渐吸引了部分传奇私服使用者,最后发展为穿越火线游戏使用者必备的团队语音工具,笔者曾在穿越火线游戏中目测,99%的战队收人广告后面都挂著YY语音ID。2009年初YY娱乐使用者已经形成了可以和游戏使用者抗衡的使用者群,YY语音的娱乐公会开始逐步超越游戏公会,人气也日渐增长。时至今日,YY语音已经成为集合团队语音、好友聊天、视讯功能、频道K歌、视讯直播、YY群聊天、应用游戏、线上影视等功能为一体的综合型即时通讯软体。

2腾讯QQ(简称“QQ”)是腾讯公司开发的一款基于Inter的即时通讯(IM)软体。腾讯QQ支援线上聊天、视讯通话、点对点断点续传档案、共享档案、网路硬碟、自定义面板、QQ邮箱等多种功能,并可与多种通讯终端相连。2015年,QQ继续为使用者创造良好的通讯体验。其标志是一只戴着红色围巾的小企鹅。目前QQ已经覆盖Microsoft Windows、OS X、Android、iOS、Windows Phone等多种主流平台。

android怎么开发 百度rss源订阅开发步骤

RSS的读取,一般都是获取一个网址,然后使用一些开源的解析xml的方法,来读取,因为RSS的格式都是基本固定的

说说java开发步骤和android开发步骤的异同。能不能不用eclipse而安装jdk去进行android开发。

Java我不知道,我是做Android的。一般使用的就是eclipse,不过要装外挂ADT,Android SDK。只用jdk肯定不行。android的专案结构有很多要求。具体的你可以上网查查。

Android开发搭建环境步骤详细

扣丁搭建环境工具及详细步骤

Android开发环境适合新手

:codingke/course/166

0基础学android开发自学步骤 0基础学android开发要多久

要是0基础的话要学Android,得先学Java基础,然后在学Android部分,自学的话大概需3个月左右

完全新手,想学android开发,求步骤

一点程式设计经验都没有就别搞了。做你擅长的。

java三个月。android api一个月。

主要是你得会面向物件程式设计。会了搞什么都容易。

android手机怎么开启开发者选项

1、点选“系统设定”

2、点选“关于手机”

3、找到“版本号”

4、连续快速点选版本号5次在点选过程中,如果你停止,就会提示“还有×次,就可以开启“开发人员选项””,你只需接着点选即可,直至提示“已开启‘开发人员选项’”

5、按返回键,回到“系统设定”介面,就可以看到‘开发人员选项’出现了

天猫分期怎么开启?求步骤。

1首先找到可以分期的商品,如果有分期资格,就可以选择分期付款。 可以在天猫分期付款页面检视自己的分期额度。选择好之后点选“分期付款”按钮。

2然后选好收货地址。

3然后右下角还可以在选择分几期购买,3期是免手续费的,6-9期需要收手续费。

4提交订单之后,输入支付宝密码支付,这里支付宝里面没钱也可以支付。

5然后提示成功就代表分期购买成功了。

6然后返回我的订单页面,点选天猫分期账单。

7然后在这里可以看到自己的每月还款日期, 这之前支付宝里面一定要有还款的钱在里面哦。

android 调用系统相机解决方法:直接通过Intent调用系统相机

直接调用系统的相机应用,只需要在Intent对象中传入相应的参数即可,总体来说需要以下三步:

1 Compose a Camera Intent

MediaStoreACTION_IMAGE_CAPTURE 拍照;

MediaStoreACTION_VIDEO_CAPTURE录像。

2 Start the Camera Intent

使用startActivityForResult()方法,并传入上面的intent对象。

之后,系统自带的相机应用就会启动,用户就可以用它来拍照或者录像。

3 Receive the Intent Result

用onActivityResult()接收传回的图像,当用户拍完照片或者录像,或者取消后,系统都会调用这个函数。

Android camera采集到的可以是yuv420sp也可以食yuv420p。我知道yuv420中yuv的分布。现在主要有个前提是从Android Camera 中采集到的yuv420数据,这个byte[]的长度是一倍的视频宽高乘积,不是15倍。在jni里面获取到的长度又确实是15倍,但是在jni里面转换为jbyte 的长度还是1倍,就不知道怎么弄了~

        本文之所以有必要编写并作记录,主要原因是因为在工作中开发出一个万能的自定义camera预览控件之后,本是一个提高效率以及提供一个强大能力的控件,但是产品并不能理解这个万能控件存在的意义,产品无法与技术设计相结合的理解使用;并且发现我们的智能业务部Camera自定义预览技术虽然是使用多年,但是我们并没有真正的形成规范,由于产品在不能够理解系统平台(Android/iOS)给产品和研发带来了什么,导致产品可能会出现在不理解系统平台以及系统知识的情况下,臆想产品所谓的形态;当产品设计脱离了系统平台所支持的技术点以及设计的初衷,就会导致回归问题的时候,出现不必要的讨论,其根结就是一点:“信息不同步,知识不同步”。

        所以,为了提高效率,就采用记录和分享的方式,尝试性推动产品、测试、研发三者对工程与架构的同步理解,更深的懂得程序架构设计意义,尝试性通过信息同步的方式,在一个统一的知识储备的平台下,共同完成一个更高效,和高品质的工程产品。(为了能够让非技术:产品设计,以及测试都能够理解,所以,使用了更多的白话解释)

        附:强大灵活的FsCameraTextureView(第一版,自适应截取)( 第二版本版本:自适应展示)

        首先,抛出几个问题,

      1)什么是摄像头支持的previewSize?

      2)什么是视频或者的pictureSize

      3)  如何获取和查看摄像头支持的PreViewSize 和PictureSize ?

      4)手机预览所见的区域SurfaceView(TextureView)与camera 的previewSize的关系是什么?

      5)为什么会设计了两种预览方式view,两种预览方式都会有什么样子的效果呢?

一,概述

通过Android Camera拍摄预览中设置setPreviewCallback实现onPreviewFrame接口,实时截取每一帧视频流数据(简单说来,就是通过设置一个接口,接收系统回调通知我们的每一帧数据)

二,知识点

    1, camera支持的格式:

    2,拍照流程

    3,camera权限

  三,Android Camera中PreviewSize、 PictureSize、 SurfaceView(TextureView)之间的关系

        1,PreviewSize:

          相机预览时候的能支持的尺寸,简单的说一下,就是预览的大小,也就是拍照前能够看到的大小。(通过Android手机相机可以试一下,这个参数设置不同,同样的焦距下,拍摄桌子上一个固定距离的东西,看到的视野会不同)

          相机的预览尺寸,不能随意的设置值,只能通过camera的parameters的getSupportedPreviewSizes方法,获取支持的预览尺寸列表,并从列表中选择一个设置在parameters中。(通俗简单的说就是,获取camera中能够支持的预览大小合集,如果你想要查看某个预览对应的尺寸,就把该尺寸设置到camera的属性中即可,则camera会返回相对应尺寸的预览数据流提供显示)。

        2,PictureSize :

指的是拍照之后,最终拍摄到的大小,也就是的质量。尺寸同样也只能从支持的列表中选取一个设置。 调用camera的takePicture方法(拍照)后,获得拍照的图像数据,注意picturesize和previewsize的宽高比也要保证一致,否则获取的会将preview时的图像裁剪成picturesize的比例。 previewsize的分辨率,只会影响预览时的分辨率,不会影响获取的分辨率,所以preview只是确定了图像的取景最大范围。最终的分辨率是由picturesize来决定。 所以,最好的设置方法,例如:previewsize为1280720,picturesize为25601440。(由于我们没有拍照业务,目前这个知识,不做深究)

        3,SurfaceView(TextureView)

          用于展示camera预览图像的view,就是将preview获得的数据,放在这个view上。所以如果preview的宽高比和SurfaceView的宽高比不一样,就会导致看到的图像拉伸变形。图像拉伸变形解决的办法:

          (1)就是在确定preview的分辨率后,重新设置SurfaceView宽高;

          (2)如果SurfaceView宽高定死,则需要获取一个比例适合SurfaceView尺寸的PreviewSize 的preview,尽量小的裁剪,然后填充在SurfaceView中。

        4,利用的显示方式,理解Preview与SurfaceView(TextureView)显示关系

          ImageView (UI上面设计的一个控件)与bitmap 的关系,比如限定死一个ImageView的大小,但是与ImageView尺寸不一致,就会有几种方案,首先选取一张长方形19201080的,ImageView就是紫色部分,无论长宽比都比ImageView要大。

适配例1:拉伸填充ScaleTypeFIT_XY :虽然被全部填充,但是整个为了适配已经扭曲,失真,缩放到控件大小,完全填充控件大小展示。

适配例2:等比例裁剪填充ScaleTypeCENTER_CROP ,因为在该模式下,会被等比缩放直到完全填充整个ImageView,并居中显示。该模式也是最常用的模式了。如图可以看到,的高度是能完全展示出来的,但是左右部分被进行了裁剪,并没有完全显示。

适配例3 :  ScaleTypeCENTER_INSIDE,此模式,用以完全展示内容为目的。将被等比缩放到能够完整展示在ImageView中并居中,如果大小,小于控件尺寸,那么就直接居中展示该

            适配ImageView方式还有很多,就不一一列举,这三种已经足够重要,为什么讲解camera预览,却穿插了的适配,其实可以这么理解,camera的preview就是由多张组成,不断的像帧动画一样变化,而SurfaceView就是一个载体,相当于ImageView,业务中定死了SurfaceView的大小之后,被动的承载你选择的previewSize,来展示camera的Preview,你可以选择类似于前面三种例子来理解preview的填充,以下会举例说明preview的填充策略选择有哪几种方式,我们会采用哪种方式:

        1)拉伸填充,自适应view,不可取,比如:手机的SurfaceView是整个手机的屏幕尺寸(全屏填充),或者任意尺寸比例的surfaceView,使用这种方式,就如同(适配例1)的方式,导致视频扭曲,拉伸。

        2)等比例裁剪填充,目前我们项目中,采用的就是这种方式,并且提供给很多三方使用,已经成为一种独立,并且稳定的技术实现自定义view,简单说一下视频的适配策略方式,SurfaceView随便由业务方,自定义宽度大小,比如业务方选择了19001000的SurfaceView, 我们的适配过程是:(1)从PreviewSize列表中选取最接近SurfaceView尺寸的PreviewSize(假设该摄像头,只支持19201080,和320640),19201080最接近,所以被获取;(此处展示一下蹩脚的英文Try to find an size match aspect ratio and size,尝试找到纵横比与view大小比适中的一个尺寸)(2)等比例裁剪填充到SurfaceView,首先我们设计的逻辑是,先选取一个缩放比例,假设等比例1920的按照SurfaceView的宽度等比例缩小到1900,而为了不让Preview失真,则高度1080等比例缩小的值是106875(等比例方程式,这里就不重复初中的知识,请自行计算),所以被压缩成为19001068这个尺寸,依旧保证完整,并且不失真。(3)将等比例缩减的,19001068进行显示在19001000的SurfaceView中,就会有一种效果类似(适配例2),宽度全部展示,高度被裁剪。(如同  适配例2中左右部分裁剪一样的道理)                       

          3)完全展示camera内容的缩放填充(类似适配例3),我们打开任意一部手机的camera,预览图像都没有全屏幕展示,类似拍照功能,所见即所得,PreviewSize是多少,就显示什么样子的比例尺寸,以及最后生产的照片比例就是多少,我们的自定义view,也可以随意设置大小,此模式下,用以完全展示camera内容为目的。Preview将被等比缩放到能够完整展示在SurfaceView中并居中,但是可能会有部分位置无法填充(类似适配例3显示效果)。

(该方式只是进行了技术储备,由于没有业务场景设计,所以没有使用,目前只是储备了这样的自定义控件)

四,灵活的自定义TextureView预览控件       

        FsCameraTextureView(第一版,自适应截取):等比例裁剪填充,方式(适配方式2),采用前面说的适配方式2,而产出的一种自定义view,2019年5月产出至今,在金融APP,以及商城的app中使用,经过逐步优化,和多版本检验,目前该控件,拥有以下特点:  1)稳定:目前各个使用场景,均无逻辑崩溃,内存泄漏,线程等任意问题; 2)灵活:随意设置预览view的尺寸大小,自适应任意业务设计;不仅仅满足刷脸业务,并且满足任意相机预览业务方使用; 3)提高效率,减轻工作量:使用简单, *** 作步骤简洁,接入只需要两步;减轻接入端,或者想要使用相机预览的业务的工作量,不需要重复造车,并且安全稳定。

      输出的业务方有(经不完全统计):(目前业务为保密进行公网保密处理)1)创新科技业务部-区块链部门 2)泰国人脸识别业务SDK3)S DBank 人脸业务4)核验身份z业务5)HTBank 人脸业务 6)云,商业平台部门

      FsAllPreviewCameraTextureView(技术储备版,全预览模式显示):完全展示camera内容的缩放填充,采用前面说的(适配方式3)适合拍照相关的业务使用,优点同样是,外部业务随意改变view大小,可以自适应view,由于目前没有业务方使用,暂时做储备,不深入讲解。

如果可以控件开源成功,后期,我将开源这两个控件,让更多的使用方使用,我们也希望共同技术进步,提高工程产出的使用能力。

预计下一次分享内容是(临时命名)

1)人脸核验内存和线程爆表到泄漏为零

2)分享七年前参于的Scrum(如何提高岗位间效率所定制的敏捷开发过程)

本文参考:

>

Android调用系统拍照的代码:

创建Intent Intent openCameraIntent = new Intent(MediaStoreACTION_IMAGE_CAPTURE);

String imagePath = EnvironmentgetExternalStorageDirectory() + "/image" ;

设置文件路径 File file = new File(imagePath);

if(!fileexists()){

filemkdirs(); }

设置URI,指定相册拍照后保存的路径,Uri imageUri = UrifromFile(new File(imagePath, "imagejsp"));

openCameraIntentputExtra(MediaStoreEXTRA_OUTPUT, imageUri);

startActivityForResult(openCameraIntent, REQUEST_CODE_TAKING_PICTURES);

拍照完以后,文件就会保存在这个指定的目录下了。Uri 里指定了相机拍照的路径。

从 Android 50 开始,Google 引入了一套全新的相机框架 Camera2(androidhardwarecamera2)并且废弃了旧的相机框架 Camera1(androidhardwareCamera)。作为一个专门从事相机应用开发的开发者来说,这一刻我等了太久了,Camera1 那寥寥无几的 API 和极差的灵活性早已不能满足日益复杂的相机功能开发。Camera2 的出现给相机应用程序带来了巨大的变革,因为它的目的是为了给应用层提供更多的相机控制权限,从而构建出更高质量的相机应用程序。本文是 Camera2 教程的开篇作,本章将介绍以下几个内容:

Camera2 的 API 模型被设计成一个 Pipeline(管道),它按顺序处理每一帧的请求并返回请求结果给客户端。下面这张来自官方的图展示了 Pipeline 的工作流程,我们会通过一个简单的例子详细解释这张图。

为了解释上面的示意图,假设我们想要同时拍摄两张不同尺寸的,并且在拍摄的过程中闪光灯必须亮起来。整个拍摄流程如下:

一个新的 CaptureRequest 会被放入一个被称作 Pending Request Queue 的队列中等待被执行,当 In-Flight Capture Queue 队列空闲的时候就会从 Pending Request Queue 获取若干个待处理的 CaptureRequest,并且根据每一个 CaptureRequest 的配置进行 Capture *** 作。最后我们从不同尺寸的 Surface 中获取数据并且还会得到一个包含了很多与本次拍照相关的信息的 CaptureResult,流程结束。

相机功能的强大与否和硬件息息相关,不同厂商对 Camera2 的支持程度也不同,所以 Camera2 定义了一个叫做 Supported Hardware Level 的重要概念,其作用是将不同设备上的 Camera2 根据功能的支持情况划分成多个不同级别以便开发者能够大概了解当前设备上 Camera2 的支持情况。截止到 Android P 为止,从低到高一共有 LEGACY、LIMITED、FULL 和 LEVEL_3 四个级别:

相机的所有 *** 作和参数配置最终都是服务于图像捕获,例如对焦是为了让某一个区域的图像更加清晰,调节曝光补偿是为了调节图像的亮度。因此,在 Camera2 里面所有的相机 *** 作和参数配置都被抽象成 Capture(捕获),所以不要简单的把 Capture 直接理解成是拍照,因为 Capture *** 作可能仅仅是为了让预览画面更清晰而进行对焦而已。如果你熟悉 Camera1,那你可能会问 setFlashMode() 在哪? setFocusMode() 在哪? takePicture() 在哪?告诉你,它们都是通过 Capture 来实现的。

Capture 从执行方式上又被细分为单次模式、多次模式和重复模式三种,我们来一一解释下:

CameraManager 是一个负责查询和建立相机连接的系统服务,它的功能不多,这里列出几个 CameraManager 的关键功能:

CameraCharacteristics 是一个只读的相机信息提供者,其内部携带大量的相机信息,包括代表相机朝向的 LENS_FACING ;判断闪光灯是否可用的 FLASH_INFO_AVAILABLE ;获取所有可用 AE 模式的 CONTROL_AE_AVAILABLE_MODES 等等。如果你对 Camera1 比较熟悉,那么 CameraCharacteristics 有点像 Camera1 的 CameraCameraInfo 或者 CameraParameters 。

CameraDevice 代表当前连接的相机设备,它的职责有以下四个:

熟悉 Camera1 的人可能会说 CameraDevice 就是 Camera1 的 Camera 类,实则不是,Camera 类几乎负责了所有相机的 *** 作,而 CameraDevice 的功能则十分的单一,就是只负责建立相机连接的事务,而更加细化的相机 *** 作则交给了稍后会介绍的 CameraCaptureSession。

Surface 是一块用于填充图像数据的内存空间,例如你可以使用 SurfaceView 的 Surface 接收每一帧预览数据用于显示预览画面,也可以使用 ImageReader 的 Surface 接收 JPEG 或 YUV 数据。每一个 Surface 都可以有自己的尺寸和数据格式,你可以从 CameraCharacteristics 获取某一个数据格式支持的尺寸列表。

CameraCaptureSession 实际上就是配置了目标 Surface 的 Pipeline 实例,我们在使用相机功能之前必须先创建 CameraCaptureSession 实例。一个 CameraDevice 一次只能开启一个 CameraCaptureSession,绝大部分的相机 *** 作都是通过向 CameraCaptureSession 提交一个 Capture 请求实现的,例如拍照、连拍、设置闪光灯模式、触摸对焦、显示预览画面等等。

CaptureRequest 是向 CameraCaptureSession 提交 Capture 请求时的信息载体,其内部包括了本次 Capture 的参数配置和接收图像数据的 Surface。CaptureRequest 可以配置的信息非常多,包括图像格式、图像分辨率、传感器控制、闪光灯控制、3A 控制等等,可以说绝大部分的相机参数都是通过 CaptureRequest 配置的。值得注意的是每一个 CaptureRequest 表示一帧画面的 *** 作,这意味着你可以精确控制每一帧的 Capture *** 作。

CaptureResult 是每一次 Capture *** 作的结果,里面包括了很多状态信息,包括闪光灯状态、对焦状态、时间戳等等。例如你可以在拍照完成的时候,通过 CaptureResult 获取本次拍照时的对焦状态和时间戳。需要注意的是,CaptureResult 并不包含任何图像数据,前面我们在介绍 Surface 的时候说了,图像数据都是从 Surface 获取的。

如果要我给出强有力的理由解释为什么要使用 Camera2,那么通过 Camera2 提供的高级特性可以构建出更加高质量的相机应用程序应该是最佳理由了。

如果你熟悉 Camera1,并且打算从 Camera1 迁移到 Camera2 的话,希望以下几个建议可以对你起到帮助:

本章到此结束,主要是介绍了 Camera2 的一些基础概念,让大家能够基本了解 Camera2 的工作流程和基础概念,并且知道使用 Camera2 能够做些什么。如果你对 Camera2 还是感到很陌生,不要紧,后续的教程会带领大家逐步深入了解 Camera2。

以上就是关于Android 拍照获取缩略图以及完整图片(适配androidN)全部的内容,包括:Android 拍照获取缩略图以及完整图片(适配androidN)、android开发怎么开启相机步骤、android studio怎么调用相机等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9629925.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存