拍照_拍照divisionbyzero - CSDN
  • Android 7.0调用相机拍照,返回后显示拍照照片

    万次阅读 多人点赞 2017-11-29 08:33:02
    Android 7.0调用相机拍照,返回后显示拍照照片,并显示到手机相册中
    在7.0以前,调用相机拍照时一般如下
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    file = new File(Environment.getExternalStorageDirectory().getAbsolutePath()
            + "/test/" + System.currentTimeMillis() + ".jpg");
    file.getParentFile().mkdirs();
    
    Uri uri = Uri.fromFile(file);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
    在用Android 7.0版本时,出现了异常 FileUriExposedException,就是在传递uri时出错
    百度了一下,说是Android 7.0后又修改了文件权限,可以使用FileProvider解决
    1.在 res 目录下新建文件夹 xml 然后创建资源文件 filepaths(随意名字)
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <external-path
            name="images"
            path="test/"/>
    </resources>
    其中
    <files-path/> //代表的根目录: Context.getFilesDir()
    <external-path/> //代表的根目录: Environment.getExternalStorageDirectory()
    <cache-path/> //代表的根目录: getCacheDir()
    2.在manifest中添加provider
    <application
       
       ......
        <provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="com.xykj.customview.fileprovider" 
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/filepaths"/>
        </provider>
    </application>
    3.在java代码中
    /**
     * 使用相机
     */
    private void useCamera() {
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        file = new File(Environment.getExternalStorageDirectory().getAbsolutePath()
                + "/test/" + System.currentTimeMillis() + ".jpg");
        file.getParentFile().mkdirs();
        
        //改变Uri  com.xykj.customview.fileprovider注意和xml中的一致
        Uri uri = FileProvider.getUriForFile(this, "com.xykj.customview.fileprovider", file);
        //添加权限
        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        
        intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
        startActivityForResult(intent, REQUEST_CAMERA);
    }
    调用相机拍照,图片得存储吧,存储图片又需要权限,因此动态申请权限
    AndroidManifest.xml文件中
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    java代码中
    public void applyWritePermission() {
    
        String[] permissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE};
    
        if (Build.VERSION.SDK_INT >= 23) {
            int check = ContextCompat.checkSelfPermission(this, permissions[0]);
            // 权限是否已经 授权 GRANTED---授权  DINIED---拒绝
            if (check == PackageManager.PERMISSION_GRANTED) {
                //调用相机
                useCamera();
            } else {
                requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
            }
        } else {
            useCamera();
        }
    }
    
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
                                           @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            useCamera();
        } else {
            // 没有获取 到权限,从新请求,或者关闭app
            Toast.makeText(this, "需要存储权限", Toast.LENGTH_SHORT).show();
        }
    }
    然后在ImageView点击事件中调用applyWritePermission()方法 并在onActivityResult中编写显示图片的代码
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 1 && resultCode == RESULT_OK) {
            Log.e("TAG", "---------" + FileProvider.getUriForFile(this, "com.xykj.customview.fileprovider", file));
            imageView.setImageBitmap(BitmapFactory.decodeFile(file.getAbsolutePath()));
        }
    }
    完成,看下FileProvider.getUriFile方法得到的Uri结果
    content://com.xykj.customview.fileprovider/images/1494663973508.jpg
    可以发现 name为临时的文件夹名 path为自己定义路径的文件夹名
    <resources>
        <external-path name="images" path="test/"/>
    </resources>
    4.最后发现此方法相机拍照的图片并没有显示在手机图库中
    想要在手机相册图库中显示刚拍照的图片可以采用发送广播的方式
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 1 && resultCode == RESULT_OK) {
            headImageView.setImageURI(Uri.fromFile(file));
    
            //在手机相册中显示刚拍摄的图片
            Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
            Uri contentUri = Uri.fromFile(file);
            mediaScanIntent.setData(contentUri);
            sendBroadcast(mediaScanIntent);
        }
    }

    展开全文
  • 拍照

    2014-12-05 12:44:27
    近年来,拍照手机、电脑摄像头(PC-CAM)、监控等领域飞速发展,需求量日渐增长,CMOS图像传感器(CIS)作为这些应用的核心元件,其市场需求也越来越大。CIS芯片集光电、模拟电路和数字电路于一体,其设计、生产、测试、...

    参考:http://www.eccn.com/tech_260_2010051913335212.htm

    近年来,拍照手机、电脑摄像头(PC-CAM)、监控等领域飞速发展,需求量日渐增长,CMOS图像传感器(CIS)作为这些应用的核心元件,其市场需求也越来越大。CIS芯片集光电、模拟电路和数字电路于一体,其设计、生产、测试、封装以及最终应用与传统IC相比,都有其特别的地方,因此行业门槛也相对较高。

    北京思比科作为中国本土企业,是唯一基于自主专利技术开发成功高端CMOS图像传感器芯片并实现规模化生产的企业,近几年开发成功了一系列高品质图像传感器芯片。以下针对拍照手机,PC-CAM和监控三个领域的应用,具体介绍思比科的系列产品。

    1.拍照手机

    拍照手机可以实现预览、拍照、回显、录像和回放的全部功能。从传感器应用的角度,拍照手机可以分为以下两类:第一类是YUV型,即传感器输出标准的YUV图像数据,多媒体处理器接收后完成图像的编解码等后处理,传感器和多媒体处理器相对独立,SP80818(1/8 inch VGA)和SP82318(1/3.2 inch 2M)就是针对这种应用设计的。第二类是Raw Data型,传感器只输出原始数据,所有的图像处理和自动控制都由多媒体处理器来主导完成,SP80708(1/7 inch VGA)和SP83308(1/3 inch 3.2M)符合这种应用。以下分别介绍两种方案。

    1.1 YUV型

    YUV型的方案是目前中低端拍照手机普遍采用的一种方案,主要集中在VGA,1.3M和2M的拍照手机,要求传感器输出标准的YUV数据。传感器除了完成图像采集的功能外,还要完成图像处理和图像转换的功能。图1是SP80818和SP82318的结构框图以及YUV手机的结构图。其中传感器核(Sensor Core)部分包含有感光阵列、曝光控制和读出电路、可变增益放大器(PGA)和模数转换器(ADC),主要完成图像采集功能。传感器核输出的原始图像数据送到图像处理器(ISP),ISP完成一系列图像处理和图像转换功能,主要包含以下处理:灰度补偿、数字增益和白平衡、镜头阴影修正、坏点检测和修正、彩色插值、平滑处理和轮廓增强、GAMMA校正、色彩校正、亮度、饱和度和对比度调节、图像尺寸变换、色彩空间转换、图像数据打包输出。控制模块完成自动曝光控制,自动白平衡,50Hz/60Hz闪烁检测等功能,对传感器核和ISP进行控制,以及和多媒体处理器的通信(多媒体处理器通过串行总线接口访问传感器内部寄存器,实现对传感器的控制。)

    图1: YUV传感器SP0818和SP2318的结构框图及应用。

    虽然绝大多数主流的传感器设计公司都是按照以上功能来设计自己的产品,但由于设计能力和所采用的工艺性能的不同,市面上产品的性价比仍然会存在较大的差距。

    思比科在设计这些产品之前,已经做了大量的基础研究,从工艺,算法到电路原理都有了很多的突破,形成了以SuperPix和SuperImage为核心的技术特点,相关专利已经达到数十件以上,SuperPix技术具体体现在高性能的像素单元(Pixel)设计,高精度、高速度和超低功耗的CDS电路,PGA电路和ADC电路设计;SuperImage技术则主要包含一系列效果优良、实现简洁的算法,如自动白平衡,自动曝光控制,彩色插值,平滑去噪,轮廓增强等。

    YUV方案的优点在于照相模块的独立性和灵活性。工程师很容易完成不同的传感器和多媒体处理器之间的对接,而复杂繁琐的图像调试工作已经由照相模块的供应商完成,工程师只需要将多媒体处理器中传感器的配置参数更新就可以得到理想的图像效果。

    然而,随着手机市场的竞争加剧,客户对传感器的性价比要求越来越高,这种方案的缺点也越来越明显。由于传感器工艺的特殊性决定了在设计和制造过程中,不能使用超过4层的金属连线资源,这将大大增加逻辑关系复杂的图像处理电路的面积,从而增加传感器的成本。而另一方面,为了降低成本,传感器的感光单元尺寸越来越小,为了得到更好的图像质量,需要越来越复杂的算法对图像进行处理。基于以上原因,ISP的功能已经开始从传感器转移到多媒体处理器。对于规模庞大的多媒体处理器来说,ISP的集成对其成本不会有明显增加,而传感器的成本则有大幅度下降。因此?Raw Data方案也越来越被关注。

    1.2 Raw Data型

    Raw Data型方案是最有争议的一个方案,系统只要求传感器输出原始数据,后端多媒体处理器完成所有ISP和图像编解码等功能,和普通的数码相机的解决方案一样,而多媒体处理器则类似于数码相机中的核心处理器。 SP80708和SP83308就是基于这种应用方案设计的,其结构框图见图2。

    图2:Raw Data传感器SP0708和SP3308的结构框图。

    从结构上看,Raw Data型传感器实际是YUV 传感器去掉ISP和部分传感器控制功能之后的简化产品。

    这种方案在最低端手机和最高端手机中都有应用。如联发科的MTK6226和展讯6600D+华邦99685,就属于这一方案在低端手机上的应用。而可以支持到3.2M Raw Data 传感器,Broadcom的BCM2820甚至可以支持8M像素的Raw Data 传感器,很多高端手机采用了这些方案。

    对于3.2M以上的高像素拍照手机,Raw Data方案从系统设计的角度讲是合理的。高像素的拍照手机为了取代传统数码相机,对图像质量的要求已经达到专业级的要求。在提高模拟前端图像采集性能的同时,后端复杂的图像处理技术也是必不可少的。要把这些功能复杂的ISP集成到传感器中,几乎很难实现,比如复杂的彩色插值算法要求保存一帧的Raw Data,需要很大的缓冲,传感器中不可能做到;而性能越来越高的多媒体处理器,无论是处理能力,还是配备的缓冲,都非常适合来完成这个功能。从整个系统的结构和性价比来看,这种方案也是最有竞争力的。

    对于低端的VGA拍照手机,传感器的成本压力越来越大。Raw Data型的传感器是降低成本最有效的方案。联发科推出的一系列平台方案就恰好集成了图像处理的功能,MTK6226就是最典型的代表。

    Raw Data型方案目前也存在缺点,它需要传感器厂商和多媒体芯片或是平台厂商紧密配合,才能很顺利的完成系统集成。尤其是方案设计阶段,对不同的传感器,甚至相同的传感器搭配不同的镜头,都需要基于多媒体芯片重新调试图像效果。传感器厂商只有得到这些平台厂商的配合,才能完成design-in。

    目前手机市场的情况是YUV型和Raw Data型两种方案并存。思比科也有针对性的开发出了不同的产品,来满足客户多元化的需求。其中SP0818和SP2318满足YUV型手机客户的需求,而SP80708和SP83308则符合Raw Data型手机客户的要求。

    2.PC摄像头

    相对手机而言,PC摄像头(PC-CAM)是一个较为简单的应用。由于英特网的普及以及越来越流行的网络视频应用,PC-CAM的需求量也非常庞大。SP80708在满足手机应用的同时,也因为高性价比的优势而被大量使用在PC-CAM上。

    PC-CAM的方案非常简单,一颗DSP搭配一颗传感器,就组成了一个PC-CAM方案。图3是一个典型的PC-CAM的结构图。

    图3:典型的PC-CAM方案。

    SP80708采用了思比科最新的像素技术,感光度高达1.2V,足以满足PC-CAM对低照度的严格要求;色彩还原性好,原始数据经过简单处理就可以达到理想的效果;而像素尺寸缩小到3.2umx3.2um,可以较大幅度降低传感器成本。同时内嵌思比科特有的曝光控制算法,很大程度上提高了动态范围,在各种光照条件的复杂环境下,都能达到理想的曝光效果。

    PC-CAM也有很多种类。从传感器的分辨率来分,有30万像素,130万像素和200万像素的PC-CAM,早期甚至还有10万像素的产品。由于受到USB带宽的限制,PC-CAM很少有200万像素以上的产品。从传感器的类型来分,有使用Raw Data 传感器的PC-CAM,也有使用YUV 传感器的产品;绝大多数DSP都集成了ISP的功能,但多数的ISP只支持到VGA,所以大多数30万像素的PC-CAM都采用Raw Data的传感器,或是采用YUV 传感器的Raw Data输出,而130万像素和200万像素的产品则多使用YUV 传感器。

    从DSP的功能来分,PC-CAM又可以分为USB1.1和USB2.0两种,因为USB1.1的带款很窄,视频在传到PC之前需要压缩,所以USB1.1的DSP都集成了JPEG压缩的模块;而USB2.0则能够传输未经压缩的VGA视频流,因此USB2.0的PC-CAM视频质量优于USB1.1的产品。有些USB2.0的DSP也集成了JPEG模块,向下兼容USB1.1的应用,以保证产品能应用在非常低端的PC上。

    随着市场的多元化发展,PC-CAM产品的种类也越来越多。如有带语音输入功能的、有带自动聚焦和跟踪功能的。而最近出现的“免驱动”的PC-CAM,则有可能成为未来的主流产品。

    3.监控系统

    传统的监控系统几乎都采用CCD。随着CMOS 传感器技术的发展,CMOS的品质已经达到CCD相当的水平。而监控系统应用的普及,也面临着降低成本的压力。低成本的CMOS取代CCD在监控系统上应用的趋势已经非常明显。图4是采用CMOS 传感器的监控系统的典型结构。

    图4: IP camera解决方案。

    传感器将采集到的高品质图像数据转换成标准YUV格式,传给后边的处理器,处理器完成对视频的压缩,并通过有线或无线网络,将压缩后的视频流发送出去。因为监控系统的应用环境差别比较大,而且都是处于全天候工作状态,因此对传感器的要求非常高,比如传感器的动态范围,灵敏度,温度特性等,都比普通的传感器高出很多。思比科目前正在积极开发这类产品,预计在年内推出新一代宽动态范围,高灵敏度的传感器,满足监控领域的应用需求。

    思比科的产品完全根据客户的需求设计,具有性价比高,应用方便的特点。表1总结了思比科系列产品的技术指标,这些产品适用于各种解决方案,可以满足绝大多数客户的需求。

    表1: 思比科系列产品指标。


    展开全文
  • 目前支持谷歌、火狐浏览器
  • 我们常见的上传文件或者图片 是...如果是上传照片图片,安卓机有一个问题,只能选取照片,不能去调取相机进行拍照。 而苹果机 ios系统的 会直接出现选择 相机拍照还是照片图库。 所以解决安卓调取照相机的问题,...

    我们常见的上传文件或者图片 是使用的input

    <form>
      <input type="file" name="pic" id="pic"  />
    </form>
    

    此时一个问题出现:
    如果是上传照片图片,安卓机有一个问题,只能选取照片,不能去调取相机进行拍照。
    而苹果机 ios系统的 会直接出现选择 相机拍照还是照片图库。
    在这里插入图片描述
    所以解决安卓调取照相机的问题,次是只需加一个属性 accept 是规定能够通过文件上传进行提交的文件类型
    accept 属性只能与 配合使用

    //本例中的输入字段可以接受 GIF 和 JPEG 两种图像:
        <form>
            <input type="file" name="pic" id="pic" accept="image/gif, image/jpeg" />
        </form>
      //如果不限制图像的格式,可以写为:accept="image/*"。   
       <form>
      		<input type="file" name="" accept="image/*" >
       </form>
    

    加上accept属性后,安卓机就可以调取照相机拍照功能了,快试试吧

    展开全文
  • 不止一次听到同学的抱怨,说Win7下貌似没有用摄像头拍照的功能。在XP系统中貌似是在“我的电脑”里就能找到摄像头,也可以直接拍照。Win7没有了这项功能。我不知道Win7到底是不是还自带了拍照功能,也不想去找。与其...

    不止一次听到同学的抱怨,说Win7下貌似没有用摄像头拍照的功能。在XP系统中貌似是在“我的电脑”里就能找到摄像头,也可以直接拍照。Win7没有了这项功能。我不知道Win7到底是不是还自带了拍照功能,也不想去找。与其去下载一些国产垃圾软件来实现这个简单的功能,不如自己动手写个照相机~

    用OpenCV的库,就会有一种游刃有余的感觉。不到30行,就可以完成一个简单的照相程序。代码贴上,也做了简单的注释。欢迎各位拍砖~

    #include <cstdio>
    #include <highgui.h>
    int main()
    {
        IplImage *pImg = NULL;
        CvCapture *cap = cvCaptureFromCAM(0);
        char fileName[100];
        char key;
        int count = 0;

        while(1)
        {
            pImg = cvQueryFrame(cap);
            cvFlip(pImg, NULL, 1); //
    水平翻转图像,像照镜子一样,不想要这个效果可以去掉此句
            key = cvWaitKey(50);
            if(key == 27) break//
    按ESC键退出程序
            if(key == 'c')       //按c键拍照
            {
                sprintf(fileName, "Picture %d.jpg", ++count); //
    生成文件名
                cvSaveImage(fileName, pImg);
                cvXorS(pImg, cvScalarAll(255), pImg);         //
    将拍到的图像反色(闪一下形成拍照效果)
                cvShowImage("Camera",pImg);
                cvWaitKey(200); //
    反色图像显示ms
            }
            cvShowImage("Camera",pImg);
        }
        cvReleaseCapture(&cap);
        return 0;
    }

    后记:

    1.实现图像反色(算法:对于RGB每个通道,255-原像素值)这一功能的时候,发现OpenCV没有自带的反色函数。于是想到了先用矩阵数乘,乘以-1,然后再用矩阵减法。后来发现貌似也没有数乘的函数(有吗?请知道的同学留言,谢谢。)

    Google了一下,发现网上给出的答案都很弱智,全部是两层循环,逐个像素操作。我了个去,这个不用你告诉我啊。。。

    最后还是在OpenCV的sample里发现了一个很好的解决方法。就是cvXorS(pImg, cvScalarAll(255), pImg);就是将每个像素值都异或255。255的二进制是11111111,对于8位整数来说,异或就是减法啊~Orz,这个思路。。。呵呵,我就知道这个问题可以用一句话解决,用不着自己写两层循环。。。

     

    2.为了图省事,我就直接用OpenCV自带的采集函数了。这个函数在Windows下使用的是VFW机制,效率非常低,自己照个相应该问题不大。但是要做产品的话还不够好,在Windows下最好用DirectShow来采集视频,OpenCV附带的videoInput静态链接库(在3rdparty下可以找到)封装了DirectShow的操作,使用很方便,具体的用法和范例程序可以参见我的另一篇博文(http://kqwd.blog.163.com/blog/static/412234482010611105013322/

    展开全文
  • Android如何调用系统现有的照相机拍照与摄像

    千次下载 热门讨论 2020-07-30 23:32:29
    Android如何调用系统现有的照相机拍照与摄像,详细参见博客:http://www.cnblogs.com/plokmju/p/Android_SystemCamera.html
  • 近期小巫在学校有一个创新项目,也不是最近,是一个拖了很久的项目,之前一直没有去搞,最近因为要中期检查,搞得我跟小组成员一阵忙活,其实开发一款照相机软件并不太难,下面就是通过自定义的方式来实现手机照相的...
  • Android 调用系统照相机拍照和录像
  • 最近要搞一个项目,需要上传相册和拍照的图片,不负所望,终于完成了! 不过需要说明一下,其实网上很多教程拍照的图片,都是缩略图不是很清晰,所以需要在调用照相机的时候,事先生成一个地址,用于标识拍照的图片...
  • 我用下面的代码来实现拍照功能。但是它总是返回一个空白图像.错误出现在哪呢? Camera.Parameters p = camera.getParameters(); List<Size> sizes = p.getSupportedPictureSizes(); // Choose any one you ...
  • 使用intent调用系统照相机拍照

    千次阅读 2016-09-15 10:20:30
    1.使用intent调用系统照相机拍照 static final int REQUEST_IMAGE_CAPTURE = 1; private void dispatchTakePictureIntent() { Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); if ...
  • [UE4][Blueprint]虚幻4实现照相机拍照功能 创建渲染目标,绘制渲染目标,创建动态材质实例,设置实例图片参数为渲染目标,setbrush
  • Android移动开发-调用摄像头进行拍照的实现

    万次阅读 多人点赞 2019-05-24 08:34:59
    现在Android智能手机的像素都会提供照相的功能,大部分的手机的摄像头的像素都在1000万以上的像素,有的甚至会更高。它们大多都会支持光学变焦、曝光以及快门等等。 下面的程序Demo实例示范了使用Camera v2来进行...
  • 前段时间在做face++相关的功能,对于照相机也是进行了一番研究,小有收获,解决了不少拍照预览图片模糊、部分机型黑屏等问题,目前已经保证了团队里面十多部安卓手机的完美适配。
  • 一个简单的照相功能,拍照之后在另一个activit中显示出拍照的图片。 首先是布局文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=...
  • android调用照相机拍照获取照片并…

    万次阅读 2014-06-23 13:15:30
    1.调用系统的照相机程序 Intent intent = newIntent(MediaStore.ACTION_IMAGE_CAPTURE);  startActivityForResult(intent,TAKE_PHOTO_WITH_DATA); 2.在onActivityResult中处理返回的data final Bitmap photo = data...
  • android调用系统相机实现拍照功能

    万次阅读 热门讨论 2011-11-10 15:21:39
    在实现拍照的功能时遇到了很多问题,搜索了很多资料,尝试了很多办法,终于解决了,下面简要的描述下在开发过程中遇到的问题。 虽然之前看过android开发的书,但是没有做过东西,这次也是临时决定让我做一个android...
  • 1.调用照相机 //启动系统照相机 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); ...2.拍照后存储 @Override protected void onActivityResult(int requestCode, int resultCode,
  • 项目中最近需要用到摄像机拍照,起初的时候肯定怎么省事怎么来,直接就是调用系统的摄像机了,那么问题来了,调用系统摄像机的时候,发现不同的手机拍摄出的照片的旋转角度不一样。举个例子来说,小米手机拍摄出的...
  • 今天本来想写一篇关于百度地图定位SDK的文章的,无奈根据官网提供的例子编写的程序始终无法运行,所以这个计划只能...这个例子在很多场景中都会用到,比如在QQ空间里拍照然后分享给好友,在有道云笔记里拍照完成图像笔
1 2 3 4 5 ... 20
收藏数 130,262
精华内容 52,104
关键字:

拍照