Articles of android camera

Android相机takePicture函数不调用callback函数

我正在为我的应用程序自定义相机活动。 我正在从Android开发者网站的指令: http : //developer.android.com/guide/topics/media/camera.html似乎一切正常,除了callback函数没有被调用,图片没有保存。 这是我的代码: public class CameraActivity extends Activity { private Camera mCamera; private CameraPreview mPreview; private static final String TAG = "CameraActivity"; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.camera); // Create an instance of Camera mCamera = getCameraInstance(); // Create our Preview […]

Android将图像添加到用相机拍摄的照片

我一直在做一个相机的应用程序,一切正在与拍摄和保存图片。 但是我想在拍摄的时候将图片保存在实际的图片中时显示出来。 那可能吗? 现在我一直在试图在相同的布局与我绘制相机预览的地方。 <FrameLayout android:id="@+id/camera_preview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" > <ImageView android:layout_width="50pt" android:layout_height="50pt" android:layout_gravity="center" android:src="@android:drawable/star_big_on" /> </FrameLayout> 我想也许如果是和相机一样的画面,那么它也会和图片一起看到这个图像。 有谁知道这是可能的,还是我必须采取另一种方法? 如果是这样,链接到其他解决scheme如何做到这一点将不胜感激:) 谢谢! 编辑:我一直在关注这个相机教程http://developer.android.com/guide/topics/media/camera.html#manifest如果有人想知道我如何保存图片等 编辑2:为了说明起见,我想让这个例子中的明星在拍摄后显示在拍摄的照片中。 所以,如果我拍一张墙的照片,那么当你在画廊里看照片的时候,我希望这个明星在墙上展示,就像拍照时一样!

JavaCV录像机方向在纵向模式下不适用

您好我使用https://github.com/bytedeco/javacv/录制video。 当使用风景模式方向是好的,但是当我将方向改变为肖像模式时,video旋转-90度。 任何机构都有一个想法,我可能做错了什么。 这是代码。 package org.bytedeco.javacv_android_example.record; import android.app.Activity; import android.content.Context; import android.content.pm.ActivityInfo; import android.hardware.Camera; import android.hardware.Camera.PreviewCallback; import android.media.AudioFormat; import android.media.AudioRecord; import android.media.MediaRecorder; import android.os.Bundle; import android.os.Environment; import android.os.PowerManager; import android.util.Log; import android.view.Display; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.view.View.OnClickListener; import android.view.WindowManager; import android.widget.Button; import android.widget.LinearLayout; import android.widget.RelativeLayout; import org.bytedeco.javacpp.opencv_core; import […]

在ImageView中保存时,从自定义相机拍摄图像会拉伸

我使用这段代码在Imageview中保存图片,但在imageview中dsave时图片被拉伸。 相机预览是完美的,点击右侧的图像,但是当我在imageview中设置图像的图像是stetched。 public void onPicTaken(byte[] data) { if (data != null) { int screenWidth = getResources().getDisplayMetrics().widthPixels; int screenHeight = getResources().getDisplayMetrics().heightPixels; Bitmap bm = BitmapFactory.decodeByteArray(data, 0, (data != null) ? data.length : 0); if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { // Notice that width and height are reversed Bitmap scaled = Bitmap.createScaledBitmap(bm, screenHeight, screenWidth, true); int w = […]

如何将通过MediaRecorder录制的video长度读取到通过context.getFilesDir()构build的私有应用程序存储目录中?

我有一个奇怪的问题,通过使用MediaRecorder读取设备相机logging的video文件的长度/持续时间。 该文件被logging到应用程序的专用存储目录中,其设置如下所示: mMediaRecorder.setOutputFile(context.getFilesDir() + "/recordings/webcam.3gpp"); 录制完成后,我尝试用这些方法读取video的长度: 方法1: MediaMetadataRetriever mediaMetadataRetriever = new MediaMetadataRetriever(); mediaMetadataRetriever.setDataSource(context.getFilesDir() + "/recordings/webcam.3gpp"); String time = mediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION); return Long.parseLong(time); 方法2: MediaPlayer mp = MediaPlayer.create(context, Uri.parse(context.getFilesDir() + "/recordings/webcam.3gpp")); long duration = mp.getDuration(); mp.release(); return duration; 没有任何方法的工作。 mediaMetadataRetriever.extractMetadata返回null, MediaPlayer.create将以IOExceptionexception失败。 我已经validation该文件存在。 重要说明:如果将录制内容保存到“/sdcard/recordings/webcam.3gpp”,则不会发生此问题。 出于某种原因,我只是不能读取文件在属于应用程序的私人文件目录中的持续时间。 此外,这个问题只发生在我的三星Droid充电,运行Android 2.3。 它不会发生在运行Android 4.2的三星Galaxy S4和运行Android 4.3的Asus Nexus 7。 编辑: 如果我把相同的文件复制到SD卡上,然后阅读它的长度,一切正常。 是什么赋予了? copy(new File(context.getFilesDir() […]

使用FFmpeg进行Android相机捕获

我试着采取Android摄像头生成的预览帧,并将data[]传递给ffmpeginputpipe道以生成flvvideo。 我使用的命令是: ffmpeg -f image2pipe -i pipe: -f flv -vcodec libx264 out.flv 我也试图强制input格式为yuv4mpegpipe和rawvideo但没有成功… android-camera生成的预览帧的默认格式是NV21 。 invokein'ffmpeg的方法是通过Process API并将预览帧data[]写入进程的stdin … onPreviewFrame()定义如下: public void onPreviewFrame(byte[] data, Camera camera) { try { processIn.write(data); } catch(Exception e) { Log.e(TAG, FUNCTION + " : " + e.getMessage()); } camera.addCallbackBuffer(new byte[bufferSize]); } processIn连接到ffmpeg进程stdin并且buffersize根据为addCallbackBuffer()提供的文档计算。 有没有什么是做错了…? 谢谢…

常用的相机图片尺寸列表

根据这篇文章 ,640×480的预览大小/分辨率可以合理的预期在大多数设备上得到支持。 怎么样的图片(而不是预览)分辨率/大小? 有没有办法find或现有的资源列表通常支持的图片分辨率/大小在设备外? 我的印象是,640×480的图片大小被广泛支持,但还有什么? 我意识到, getSupportedPictureSizes()返回一个列表图片的大小,目前的设备支持,但我想了解什么样的支持的图片尺寸的分布是在世界各地的设备范围。 从我所看到的, Dashboads和开发者控制台都没有提供这些信息。 注1:接近数据的一种可能的方法是从这个stream行的Android设备列表开始,并找出在这些电话上支持的照相机图像大小。 大多数规格的网站(如这个或这一个 )只有最大的分辨率列出。 注2:在某些电话上,似乎 setPictureSize()对于所有的意图和目的都是坏的,因此不应该使用; 但是,了解其他(非破坏的)Android设备的常见图片尺寸仍然有用。

如何获得720p的Android相机预览数据?

我想用相机预览进行图像识别。 出于我的目的,我需要预览分辨率尽可能高(同时向用户显示预览)。 我创build了一个Preview类,扩展了SurfaceView并将PreviewSize设置为1280×720。 我添加了一个PreviewCallBack来获取实时图像: camera = Camera.open(); parameters = camera.getParameters(); parameters.setPreviewSize(1280,720); camera.setParameters( parameters); byte[] b = new byte[camera.getParameters().getPreviewSize().width * camera.getParameters().getPreviewSize().height * ImageFormat.getBitsPerPixel(camera.getParameters().getPreviewFormat()) / 8]; camera.addCallbackBuffer(b); camera.setPreviewCallbackWithBuffer(new CameraPreviewCallback()); try { camera.setPreviewDisplay(this.getHolder()); camera.startPreview() } 我的字节数组b是1382400字节和我的CameraPreviewCallback.onPreviewFrame()函数接收这些1382400字节 – 但只有第一个497664字节包含数据(匹配768×432分辨率(HTC Desire))。 我在不同的设备上testing过,所有的显示分辨率都是800×480(HTC Desire,LG Optimus 3D,Samsung Galaxy S2,Samsung Galaxy Tab …)。 我的代码唯一的设备是HTC Desire HD。 有谁知道如何获得完整的720p分辨率作为一个字节数组? “某事”似乎降低了预览分辨率以适应智能手机显示屏。 问候 Joern

Samsung Galaxy S3版本4.1.1中的Camera Force Closing问题

我想捕捉图像并将其保存在“我的应用程序”之一的“图像”视图中。 我已经有了一个想法如何实现它,也适用于所有设备,除了三星Galaxy S3。 我想要什么:避免强制closures问题在三星Galaxy S3和可能为所有其他设备,我还没有testing。 我做了什么:我已经完成了下面的代码来实现我的目标。 BuildInukshk_4活动: package com.inukshk.CreateInukshk; import java.util.Calendar; import android.app.Activity; import android.app.AlertDialog; import android.content.ContentResolver; import android.content.ContentValues; import android.content.DialogInterface; import android.content.DialogInterface.OnDismissListener; import android.content.Intent; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.os.StatFs; import android.provider.MediaStore; import android.util.Log; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; […]

Android上画相机预览

我正在制作一个虚拟现实应用程序,在这个应用程序中,相机应该检测到脸部,find它们并在相机预览中显示它们的位置 我知道有3种方法可以做到这一点,我想使用GLSurfaceView尽可能快( 根据这篇文章 ),但目前我正在尝试使用相机用于预览的同一个 SurfaceView。 我的callback就是onFaceDetection就像这样: public class MyActivity extends Activity implements SurfaceHolder.Callback, Camera.FaceDetectionListener { Camera camera; SurfaceView svPreview; SurfaceHolder previewHolder; TextView tvInfo; Paint red; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); svPreview = (SurfaceView) findViewById(R.id.svPreview); tvInfo = (TextView) findViewById(R.id.tvInfo); red = new Paint(); red.setStyle(Paint.Style.STROKE); red.setStrokeWidth(3); previewHolder = svPreview.getHolder(); previewHolder.addCallback(this); previewHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); } public void […]