标签: android-camera

通过意图拍照后调用的活动已被杀死/ onCreate

我试图用意图拍照.我的问题是,有时在拍照后我的活动(调用startActivityForResult)似乎被破坏,以便再次调用onCreate.

这是我点击图片浏览后拍照的代码,应替换哪个图片:

if (!getPackageManager().hasSystemFeature(
                PackageManager.FEATURE_CAMERA)) {
            Util.makeLongToast(R.string.lang_no_camera);
        } else {
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            startActivityForResult(intent, TAKE_ITEM_PHOTO);
        }
Run Code Online (Sandbox Code Playgroud)

...

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    Log.v(TAG, "onactivityresult called");
    if (requestCode == TAKE_ITEM_PHOTO) {
        if (data != null) {

            imageUri = data.getData();


                try {
                    img_photo.setImageBitmap(Media.getBitmap(
                            getContentResolver(), imageUri));
            } catch (FileNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

        } else
            Log.w(TAG, "data is null");
    } …
Run Code Online (Sandbox Code Playgroud)

android android-camera android-camera-intent android-activity

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

从Android相机的NV21格式中提取黑白图像

我做了一些google-ing,但找不到有关此格式的足够信息.它是相机预览的默认格式.任何人都可以建议有关它的良好信息来源以及如何从该格式的照片/预览图像中提取数据?更具体地说,我需要提取黑白图像.

编辑:似乎这种格式也称为YCbCr 420 Semi Planar

rgb android format-conversion android-camera

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

从图库或相机中选取的图像中获取文件扩展名,作为字符串

我想得到从图库加载或从相机中拾取的图像的图像扩展名(例如"jpg","png","bmp"ecc.).

我已经使用此表单中的方法从库中加载图像

    private static final int SELECT_PICTURE_ACTIVITY_REQUEST_CODE = 0;
....
private void selectPicture() {
    Intent intent = new Intent(Intent.ACTION_PICK);
    intent.setType("image/*");
    startActivityForResult(intent, SELECT_PICTURE_ACTIVITY_REQUEST_CODE);
}
....
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) {
    super.onActivityResult(requestCode, resultCode, imageReturnedIntent);

    switch (requestCode) {
        case SELECT_PICTURE_ACTIVITY_REQUEST_CODE:
            if (resultCode == RESULT_OK) {
                Uri selectedImage = imageReturnedIntent.getData();
                String[] filePathColumn = {MediaStore.Images.Media.DATA};
                Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
                if (cursor.moveToFirst()) {
                    int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
                    String filePath = cursor.getString(columnIndex);
                    Bitmap bitmap = BitmapFactory.decodeFile(filePath);
                    .........
                } …
Run Code Online (Sandbox Code Playgroud)

android android-gallery android-camera

31
推荐指数
7
解决办法
4万
查看次数

Android Nexus 7 Jelly Bean:s​​tartPreview/takePicture调用getCameraStereoMode记录错误

我刚买了一个Nexus 7我试图将一些代码移植到.以下行在运行Ice Cream的Xoom上没有问题:

mCamera.startPreview();
Run Code Online (Sandbox Code Playgroud)

它也可以在Nexus 7上正常工作,但它会记录错误:

E/NvOmxCamera(  126): OMX_ERRORTYPE android::NvOmxCamera::getCameraStereoMode(NvxComponent*, NvOmxCameraUserStereoMode&): Error: invalid NVX mode 0.
E/NvOmxCamera(  126): OMX_ERRORTYPE android::NvOmxCamera::getCameraStereoModeAndCaptureInfo(NvxComponent*, NvOmxCameraUserStereoMode&, NVX_STEREOCAPTUREINFO&): getCameraStereoMode failed with 0x00000000
Run Code Online (Sandbox Code Playgroud)

这是一个问题,因为当我执行该行时,它还会每帧记录一次这些错误

mCamera.takePicture(null, null, null, pictureCallback);
Run Code Online (Sandbox Code Playgroud)

因为我每秒需要10帧,所以这让我感到不安,所以我想修复错误.我已经浏览了所有的源代码(android sdk和ndk),上述错误的文本没有出现在任何地方.我相信很多谷歌搜索都发生在Nvidia的OpenMax实现中,它似乎与参数"nv-stereo-mode"有关,它具有"左","右"或"立体声"的可能值. (Nexus 7只有一个摄像头,所以我不知道它为什么会关心立体摄像机模式,但无论如何).我尝试将其设置为每个合法值,例如:

mParams = mCamera.getParameters();
mParams.set("nv-stereo-mode", "right");
mCamera.setParameters(mParams);
Run Code Online (Sandbox Code Playgroud)

但是,我的日志说:

E/NvOmxCameraSettingsParser(  126): Skipping non-standard parameter: nv-stereo-mode
Run Code Online (Sandbox Code Playgroud)

这似乎与源文件nvomxcamerasettingsparser.cpp有关,我无法在网络上的任何地方找到它.我真的不知道从哪里开始,我已经用我想到的所有内容进行了搜索和搜索,所以任何帮助都会有很大的帮助.

android nvidia android-ndk android-camera

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

全屏相机显示/预览不保持纵横比 - 图像歪斜,拉伸以适合屏幕

我开发了一个小应用程序,用于全屏显示摄像头预览.我正在使用Camera API.

这是活动布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">

    <!-- This is the container for the camera preview screen -->
    <FrameLayout android:id="@+id/camera_preview"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

当设备处于纵向状态时,显示器将垂直缩放以匹配设备屏幕的高度 - 因此纵横比与本机相机的纵横比不同.这些是2张图片,更好地解释了我所说的内容:

在此输入图像描述在此输入图像描述

第一张图像是使用原生相机设备制作的.第二张图片是用我的应用程序制作的,相机全屏 - 图像歪斜,拉伸以适应屏幕.

无论getSupportedPreviewSizes()mehod 提供的预览尺寸和无失真,我都需要将相机预览设置为全屏.有没有办法实现这个目标?当相机预览全屏时,有没有办法保持适当的宽高比?我希望这可以通过操作系统自动完成 - 裁剪图像以匹配所请求的分辨率,同时保持宽高比,但这不会发生.

我试图使SurfaceView显示器大于显示器(遵循这个问题:将相机预览适合大于显示器的SurfaceView),但在我的情况下不行,因为我捕获快照(6帧/秒)和那些不是用户在屏幕上看到的内容(框架包含所有相机预览,即使并非所有相机都在屏幕上可见).

我在这里发布:https://www.dropbox.com/s/3d52xt8kazynsae/CameraFullScreen.7z?v = 0mcn我做的整个项目.

任何想法/解决方案对我来说都非常重要.非常感谢.

================================================== ======================

由于ss1271答案更新:

我将分析你为三星Galaxy Ace II上面写的一些分辨率.

I.屏幕分辨率:480x800 - 宽高比3:5 = 0,6

II.getSupportedPreviewSizes - 我几乎可以肯定这些值来自后置摄像头.以下是这些决议的方面比率:

   2560x1920   - 0,75

   2560x1536   - 0,60

   2048x1536   - 0,75

   2048x1232   - …
Run Code Online (Sandbox Code Playgroud)

android android-camera

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

Android Camera AutoFocus on Demand

内置摄像机应用程序(就像HTC EVO上的那个)似乎camera.autoFocus()只在预览图像发生变化时调用.如果你保持相机稳定没有camera.autoFocus()发生.
我想在camera.startPreview()激活时复制此行为,如下面的初始预览设置代码中所示:

camera = camera.open();
Camera.Parameters parameters = camera.getParameters();
List<String> focusModes = parameters.getSupportedFocusModes();
if (focusModes.contains(Camera.Parameters.FOCUS_MODE_AUTO))
{
    parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
}
camera.setParameters(parameters);
camera.setPreviewDisplay(holder);
camera.startPreview();
Run Code Online (Sandbox Code Playgroud)

我找到的所有例子autoFocus()似乎都是每隔500毫秒到2000毫秒调用一次,或者在拍摄照片或开始录制之前的一刻.
EVO摄像机应用程序似乎使用传感器或算法来触发autoFocus().然而,这个autoFocus()触发器完成它非常好.有没有人知道如何autoFocus()在需要时按需触发,例如当相机移近或远离拍摄对象或稍微平移时?谢谢你,格里

android android-camera

30
推荐指数
3
解决办法
4万
查看次数

使用Android MediaCodec从摄像头编码H.264

我试图让它在Android 4.1上运行(使用升级的Asus Transformer平板电脑).感谢Alex对我之前的问题的回答,我已经能够将一些原始的H.264数据写入文件,但是这个文件只能播放ffplay -f h264,而且似乎丢失了有关帧速率的所有信息(极快的播放).此外,色彩空间看起来不正确(atm使用摄像机默认的编码器侧).

public class AvcEncoder {

private MediaCodec mediaCodec;
private BufferedOutputStream outputStream;

public AvcEncoder() { 
    File f = new File(Environment.getExternalStorageDirectory(), "Download/video_encoded.264");
    touch (f);
    try {
        outputStream = new BufferedOutputStream(new FileOutputStream(f));
        Log.i("AvcEncoder", "outputStream initialized");
    } catch (Exception e){ 
        e.printStackTrace();
    }

    mediaCodec = MediaCodec.createEncoderByType("video/avc");
    MediaFormat mediaFormat = MediaFormat.createVideoFormat("video/avc", 320, 240);
    mediaFormat.setInteger(MediaFormat.KEY_BIT_RATE, 125000);
    mediaFormat.setInteger(MediaFormat.KEY_FRAME_RATE, 15);
    mediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420Planar);
    mediaFormat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 5);
    mediaCodec.configure(mediaFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
    mediaCodec.start();
}

public void close() {
    try {
        mediaCodec.stop();
        mediaCodec.release();
        outputStream.flush();
        outputStream.close();
    } …
Run Code Online (Sandbox Code Playgroud)

android video-encoding video-streaming h.264 android-camera

30
推荐指数
3
解决办法
5万
查看次数

Enable rear camera with HTML5

I'm working on a project with MVC ASP.Net 4 HTML5 (default browser is google-chrome v29.0.1547.57) I can interact with these tools and take photographs but only with front camera, How I could enable rear camera? the characteristic of the Tablet: Samsung Galaxy Tab 2 I hope you can help me

html5 android google-chrome android-camera asp.net-mvc-4

30
推荐指数
3
解决办法
7万
查看次数

android摄像头surfaceview方向

好的,我有一个扩展SurfaceView和覆盖的类

surfaceChanged - 只需调用startPreview
surfaceCreated - 打开相机,编辑params*,设置surfaceHolder
surfaceDestroyed - 调用stopPreview,释放相机

这一切都很有效,因为当方向是肖像:

来自surfaceCreated*

m_camera = Camera.open();
Camera.Parameters p = m_camera.getParameters();

if (getResources().getConfiguration().orientation != 
    Configuration.ORIENTATION_LANDSCAPE)
{
    p.set("orientation", "portrait");

    // CameraApi is a wrapper to check for backwards compatibility  
    if (CameraApi.isSetRotationSupported())
    {
         CameraApi.setRotation(p, 90);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,每次方向改变时,它都会调用Camera.open()......正如您所知,这是一项非常昂贵的操作,导致转换不是那么顺利.

当我强制定位到横向时,预览很棒.创建只调用一次,因为预览是横向的,相机始终是用户看到的.但是,我需要一种方法来设置纵向拍摄时实际拍摄的照片的方向.当我强制横向渲染时,表面永远不会被重新创建,并且当相机以纵向方式保持时,参数永远不会被设置.

那么如何才能完成以下任一项(专门)?

  1. 当方向发生变化时,保持 onDestroy和onCreate之间的m_camera,以便过渡平滑

  2. 强制风景和检测方向改变另一种方式...旋转最终的snaped图片,如果保持纵向.

此外,如果我离开基地,有人能指出我更好的方向吗?谢谢.

android smartphone orientation android-sdk-2.1 android-camera

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

不幸的是,相机已停止

在此输入图像描述

当我启动Camera应用程序时,我收到此错误,这是我的logcat.

12-08 12:50:10.393 2275-2369/com.android.launcher3 E/Surface: getSlotFromBufferLocked: unknown buffer: 0xa21675b0
12-08 12:50:10.509 965-3048/? E/CameraService: CameraService::connect X (PID 3209) rejected (invalid camera ID 0)
12-08 12:50:10.510 3209-3224/com.android.camera E/CameraHolder: fail to connect Camera
12-08 12:50:10.510 3209-3224/com.android.camera E/CameraHolder: java.lang.RuntimeException: Fail to connect to camera service
12-08 12:50:10.510 3209-3224/com.android.camera E/CameraHolder:     at android.hardware.Camera.<init>(Camera.java:495)
12-08 12:50:10.510 3209-3224/com.android.camera E/CameraHolder:     at android.hardware.Camera.open(Camera.java:341)
12-08 12:50:10.510 3209-3224/com.android.camera E/CameraHolder:     at com.android.camera.CameraHolder.open(CameraHolder.java:131)
12-08 12:50:10.510 3209-3224/com.android.camera E/CameraHolder:     at com.android.camera.Util.openCamera(Util.java:267)
12-08 12:50:10.510 3209-3224/com.android.camera E/CameraHolder:     at com.android.camera.Camera$3.run(Camera.java:1100)
12-08 12:50:10.510 3209-3224/com.android.camera E/CameraHolder:     at java.lang.Thread.run(Thread.java:818)
12-08 12:50:10.511 3209-3224/com.android.camera …
Run Code Online (Sandbox Code Playgroud)

android android-emulator android-camera android-studio

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