Articles of android camera

从video文件创build缩略图返回空位图

我发送一个意图启动摄像机 PackageManager pm = getPackageManager(); if(pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)){ Intent video = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); File tempDir= new File(Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_PICTURES), "BCA"); if(!tempDir.exists()) { if(!tempDir.mkdir()){ Toast.makeText(this, "Please check SD card! Image shot is impossible!", Toast.LENGTH_SHORT).show(); } } String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss",Locale.US).format(new Date()); File mediaFile = new File(tempDir.getPath() + File.separator + "VIDEO_"+ timeStamp + ".mp4"); Uri videoUri = Uri.fromFile(mediaFile); video.putExtra(MediaStore.EXTRA_OUTPUT, […]

camera2 api将yuv420转换成rgb绿色

我试图从YUV_420_888转换图像到RGB,我有一些输出图像的麻烦。 在ImageReader中,我以YUV_420_888格式(使用相机2 api获取此图像预览)获取图像。 imageReader = ImageReader.newInstance(1920,1080,ImageFormat.YUV_420_888,10); 在android sdk中为YuvImage类写的,那YuvImage只用了NV21,YUY2。 因为我们可以看到N21和yuv420之间的差别不大,我尝试将数据转换为N21 YUV420: 和N21: 在onImageAvailable我分别得到每个飞机,把他们在正确的地方(如图像) ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); ByteBuffer bufferY = image.getPlanes()[0].getBuffer(); byte[] data0 = new byte[bufferY.remaining()]; bufferY.get(data0); ByteBuffer bufferU = image.getPlanes()[1].getBuffer(); byte[] data1 = new byte[bufferU.remaining()]; bufferU.get(data1); ByteBuffer bufferV = image.getPlanes()[2].getBuffer(); byte[] data2 = new byte[bufferV.remaining()]; bufferV.get(data2); … outputStream.write(data0); for (int i=0;i<bufferV.remaining();i++) { outputStream.write(data1[i]); outputStream.write(data2[i]); […]

ClassNotFoundException:android.hardware.camera2.CameraAccessException与OpenCV 3.1.0

我正在使用Android Studio 2.2使用OpenCV 3.1.0库的Android项目。 我根据这个答案导入了库。 情况如下: 当我编译API> = 21(完全API 23)的设备的项目时,一切顺利。 当我为API <21(正好是API 19,我想支持的最小API)的设备编译项目时,出现以下编译错误: Gradle日志 FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':app:transformClassesWithInstantRunForDebug'. > java.lang.ClassNotFoundException: android.hardware.camera2.CameraAccessException * Try: Run with –info or –debug option to get more log output. * Exception is: org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:transformClassesWithInstantRunForDebug'. at […]

通过SurfaceTexture在GLSurfaceView上显示相机stream

我试图通过传递给OpenGL ES 2.0着色器的SurfaceTexture在GLSurfaceView中显示相机stream。 我从这篇文章中获得灵感。 图像是完整的,但没有正确显示在我的平板电脑上。 屏幕似乎分成2个部分。 图像显示在左上部分,而其他三个部分是黑色的。 我怀疑这个问题来自于我使用这里logging的顺序返回的变换matrix updateTexImage(); getTransformMatrix(…); 我在顶点着色器中传输这个matrix来生成片段着色器的纹理坐标。 顶点着色器: attribute vec3 aPosition; uniform mat4 uMvpTransform; // Matrix retrieved by getTransformMatrix(…); uniform mat4 uTexMatTransform; varying vec2 vTexCoord; void main(void) { gl_Position = uMvpTransform *vec4(aPosition.xyz, 1); vec4 l_tex = uTexMatTransform*vec4(aPosition.xyz, 1); vTexCoord=l_tex.xy; } 片段着色器: #extension GL_OES_EGL_image_external : require varying mediump vec2 vTexCoord; uniform samplerExternalOES […]

Android – 拍照不预览

我试图在没有预览的情况下拍摄一张照片,当我的应用程序开始运行时,立即拍摄一张照片,然后将照片保存到根文件夹中的新文件夹 – “pictures123”中。 有人能告诉我在我的代码中有什么问题吗? @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); File directory = new File(Environment.getExternalStorageDirectory() + "/pictures123/"); if (!directory.exists()) { directory.mkdir(); } Camera camera = Camera.open(0); Camera.Parameters parameters = camera.getParameters(); parameters.setPictureFormat(ImageFormat.JPEG); camera.setParameters(parameters); SurfaceView mview = new SurfaceView(getBaseContext()); camera.setPreviewDisplay(mview.getHolder()); camera.setPreviewDisplay(null); camera.startPreview(); camera.takePicture(null,null,photoCallback); camera.stopPreview(); } Camera.PictureCallback photoCallback=new Camera.PictureCallback() { public void onPictureTaken(byte[] data, Camera camera) […]

从活动调用摄像头,捕获图像并上传到服务器

在我的应用程序中,我有一个调用相机的button1,捕获图像后,它必须保存到设备库中。 当我点击button2时,它必须打开画廊,并要求select一个图片。 选中后,必须显示在这些button下方的imageView上。 这是我的代码: package com.android.imageuploading; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util.List; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.provider.MediaStore; import android.view.View; import android.widget.Button; import android.widget.ImageView; public class ImageUploadingActivity extends Activity { private static final int REQUEST_CODE = 1; private Bitmap bitmap; private […]

getSupportedPictureSize()返回一个Nexus4实际不支持的值

我已经扩展了一个SurfaceView来显示一个非常简单的摄像头应用程序的摄像头。 为了find每个设备的最佳预览尺寸,我使用了几乎所有我见过的开源相机应用程序中使用的示例代码: List<Camera.Size> sizes = parameters.getSupportedPreviewSizes(); double minDiff = Double.MAX_VALUE; for (Camera.Size size : sizes) { if (Math.abs(size.width – width) < minDiff) { screenWidth = size.width; screenHeight = size.height; minDiff = Math.abs(size.width – width); } } 一切都完美到这一点。 现在,由于应用程序的性质,我必须在会话过程中保留两个位图,并且为了简单起见(避免了testing期间的内存问题),我使用了PICTURE SIZE的相同代码getSupportedPreviewSizes()与getSupportedPictureSizes())。 在大多数设备上,一切都很好用,但是我必须select其他方式来为每个设备select最佳的图片尺寸。 最近,在Nexus 4设备上进行testing时,上面的这个循环无法select最佳的图片尺寸。 经过调查,我发现getSupportedPictureSizes()函数返回一个值,即1280 * 960,Nexus 4相机实际上不支持该值。 那么,如何解决这个问题呢? 我的意思是,这个function是不是应该只返回设备CAMERA支持的那些值? 我相信会有其他设备有相同的问题,我将无法testing。 任何线索应该如何解决这个问题? 更新:发生了什么是它接受错误的参数没有任何错误,它返回的图像是扭曲的,我也会尝试在这里得到一个图片。 另外,没有运行时exception。

SurfaceView与纹理视图相机?

我想在我的应用程序中join相机function,这将允许视图本身的布局转换,更改其大小,预览大小以及高效地处理方向更改。 我应该使用TextureView还是SurfaceView ? 决定决定..

Android:BroadcastReceiver意图检测相机拍摄的照片?

我正在开发一个Android应用程序,每次使用手机拍摄新图像时都需要执行一个操作。 我不想在应用程序中拍摄图像,而是在相机应用程序拍摄图像并将其保存到SD卡时执行一些操作。 现在,我得到了一个BroadcastReceiver,目前正在侦听“android.intent.action.CAMERA_BUTTON”。 但是,这似乎并没有被调用,当我想要它。 我尝试在自己的电话上用BroadcastReceiver的OnReceive方法的第一行中的换行符来debugging应用程序,但它永远不会到达该代码。 有谁知道我应该听的正确意图是什么? 还是使用BroadcastReceiver甚至不是最好的方式来做到这一点? (例如,有没有更好的方法来完成这一点,比如听一个新的图像保存到卡上)? 谢谢! 更新:我的手机上有一个轨迹球(HTC Eris),那么以这种方式拍摄照片可能不会作为“相机button”发送? 如果是这样,有没有一个“相机button”,而是像一个轨迹球的手机的解决方法?

如何查找相机是否在使用?

有什么方法可以findAndroid 相机是否在代码中使用?