我正在使用相机的previewCallback尝试抓取图像.这是我正在使用的代码
private Camera.PreviewCallback mPrevCallback = new Camera.PreviewCallback()
{
public void onPreviewFrame( byte[] data, Camera Cam ) {
Log.d("CombineTestActivity", "Preview started");
Log.d("CombineTestActivity", "Data length = "
+ data.length );
currentprev = BitmapFactory.decodeByteArray( data, 0,
data.length );
if( currentprev == null )
Log.d("CombineTestActivity", "currentprev is null" );
Log.d("CombineTestActivity", "Preview Finished" );
}
};
Run Code Online (Sandbox Code Playgroud)
数据的长度总是与576000相同.
此外,我尝试更改相机的参数,以便图像以不同的格式返回.这就是我这样做时的样子.
mCamera = Camera.open();
camParam = mCamera.getParameters();
camParam.setPreviewFormat( ImageFormat.RGB_565 );
mCamera.setParameters( camParam );
mCamera.setPreviewCallback( mPrevCallback );
Run Code Online (Sandbox Code Playgroud)
但是,当我更改预览格式并将其保留为默认值NV21时,BitmapFactory.decodeByteArray将返回null.我也尝试将预览格式更改为JPEG类型.我甚至在ddms中得到了一个调试语句,这就是我得到的
"D/skia(14391):--- SkImageDecoder :: Factory返回null"
所以我知道相机在三星设备上的问题.您需要在调用相机意图之前创建一个Uri,如下所示:
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE, m_username);
mImageUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, mImageUri);
startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);
Run Code Online (Sandbox Code Playgroud)
此示例为相机创建一个Uri来存储数据.我的应用程序在两个位置具有相机功能.两者都是相同的(直接复制粘贴),但在一个活动中,mImageUri对象在相机处理期间变为空,而在另一个活动中它不会.后者工作正常,但前者给出一个空值,这反过来阻止我保存图像,预览它等.我将提供下面的onResult代码:
case CAMERA_PIC_REQUEST :
if(resultCode == RESULT_OK) {
if(intent != null) {
//For non-Samsung devices
Log.e("Intent value:", intent.toString());
mImageUri = intent.getData();
}
mAvatar = BitmapStatic.createImage(mImageUri, this);
Drawable draw = new BitmapDrawable(getResources(), mAvatar);
m_photoButtonE.setImageDrawable(draw);
m_imageChanged = true;
}
break;
Run Code Online (Sandbox Code Playgroud)
以上示例来自工作活动.以下是不起作用的活动:
//On pressing the "Take Photo" button:
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE, mUsername); …Run Code Online (Sandbox Code Playgroud) 我正在使用takePicture()该Camera课程中的方法.拍照,但它没有声音!我的客户想要Android制作的默认点击声.
我见过其他线程,似乎问题在于禁用声音,而不是相反!为什么我的应用程序没有发出咔嗒声?
我有使用OpenCV精确检测标记的问题.
我录制了这个问题的视频:http://youtu.be/IeSSW4MdyfU
如你所见,我正在检测的标记在某些摄像机角度稍微移动.我在网上看到这可能是相机校准问题,所以我会告诉你们我是如何校准相机的,也许你能告诉我我做错了什么?
在开始时我正在从各种图像中收集数据,并将校准角存储在这样的_imagePoints矢量中
std::vector<cv::Point2f> corners;
_imageSize = cvSize(image->size().width, image->size().height);
bool found = cv::findChessboardCorners(*image, _patternSize, corners);
if (found) {
cv::Mat *gray_image = new cv::Mat(image->size().height, image->size().width, CV_8UC1);
cv::cvtColor(*image, *gray_image, CV_RGB2GRAY);
cv::cornerSubPix(*gray_image, corners, cvSize(11, 11), cvSize(-1, -1), cvTermCriteria(CV_TERMCRIT_EPS+ CV_TERMCRIT_ITER, 30, 0.1));
cv::drawChessboardCorners(*image, _patternSize, corners, found);
}
_imagePoints->push_back(_corners);
Run Code Online (Sandbox Code Playgroud)
收集到足够的数据后,我用这段代码计算相机矩阵和系数:
std::vector< std::vector<cv::Point3f> > *objectPoints = new std::vector< std::vector< cv::Point3f> >();
for (unsigned long i = 0; i < _imagePoints->size(); i++) {
std::vector<cv::Point2f> currentImagePoints = _imagePoints->at(i);
std::vector<cv::Point3f> currentObjectPoints;
for (int j = …Run Code Online (Sandbox Code Playgroud) 与Android不同,我对GL/libgdx相对较新.我需要解决的任务,即将Android相机的YUV-NV21预览图像实时渲染到libgdx内部的屏幕背景是多方面的.以下是主要关注点:
Android相机的预览图像仅保证在YUV-NV21空间中(在类似的YV12空间中,U和V通道不交错但分组).假设大多数现代设备提供隐式RGB转换是非常错误的,例如最新的Samsung Note 10.1 2014版本仅提供YUV格式.由于除非是RGB格式,否则无法在OpenGL中向屏幕绘制任何内容,因此必须以某种方式转换颜色空间.
libgdx文档(集成libgdx和设备摄像头)中的示例使用Android表面视图,该视图低于使用GLES 1.1绘制图像的所有内容.自2014年3月初以来,由于过时而几乎所有设备都支持GLES 2.0,因此从libgdx中删除了OpenGLES 1.x支持.如果您使用GLES 2.0尝试相同的样本,则在图像上绘制的3D对象将是半透明的.由于背后的表面与GL无关,因此无法真正控制.禁用BLENDING/TRANSLUCENCY不起作用.因此,渲染此图像必须完全在GL中完成.
这必须是实时完成的,因此色彩空间转换必须非常快.使用Android位图的软件转换可能会太慢.
作为侧面功能,必须可以从Android代码访问摄像机图像,以执行除在屏幕上绘制之外的其他任务,例如通过JNI将其发送到本机图像处理器.
问题是,这项任务如何正确,尽可能快地完成?
我正在尝试使用HTTP请求创建一个与Ricoh Theta S相机对话的应用程序......它们符合Open Spherical Camera API Version 1.0 ... 这是他们的api参考
所以我试图实现他们说相机支持的实时预览 ......我在javascript中这样做,所以我尝试了每个可能的组合来获取他们说api调用返回的二进制数据...尝试了vanilla js,jquery,angular ......没有......这是请求的打印屏幕......虽然状态代码是200,但调试器显示为红色
响应是空的...所以我的问题是......有没有办法可以通过HTTP在javascript中使用发送对象的POST请求实现Motion JPEG(10 fps)?
谢谢,雷尔斯
我需要一个功能来检查前置摄像头是否存在,如果存在,则显示预览.我找到了一些链接,但每个链接都谈到了一个特定的设备:
任何人都可以为此提供通用代码吗?或者也许是可以与所有设备一起使用的组合代码?
我从我的活动中调用默认摄像头,然后处理onActivityResult.我的代码似乎在LG Ally上工作正常,在拍摄照片时没有确认.但是,当我在Nexus S上运行相同的应用程序时,它会在返回我的活动之前提示我"Ok","Retake"或"Cancel".虽然"取消"有效,但在没有保存图片的情况下返回我的活动,"确定"似乎没有任何效果,甚至没有返回我的活动.
我的代码如下:
private void captureImage() {
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
File path = new File(Environment.getExternalStorageDirectory().getPath() + "/Images/" + (new UserContextAdapter(this)).getUser() + "/");
path.mkdirs();
File file = new File(path, "Image_Story_" + mRowId.toString() + ".jpg");
newImageUri = Uri.fromFile(file);
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, newImageUri);
startActivityForResult(intent, CAPTURE_IMAGE);
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
switch (requestCode) {
case CAPTURE_IMAGE:
switch (resultCode ) {
case 0:
Log.i("CAPTURE", "Cancelled by User");
break;
case -1: …Run Code Online (Sandbox Code Playgroud) 我想camera preview在一个活动中使用.我想添加图像(表面视图上的透明框架).我尝试了以下代码,以便我可以轻松地自定义xml布局:
package com.demo;
import java.io.IOException;
import android.app.Activity;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.widget.Toast;
public class CameraDemoActivity extends Activity implements SurfaceHolder.Callback{
/** Called when the activity is first created. */
Camera camera;
SurfaceView surfaceView;
SurfaceHolder surfaceHolder;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
getWindow().setFormat(PixelFormat.UNKNOWN);
surfaceView = (SurfaceView)findViewById(R.id.surfaceview);
surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(this);
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
camera = Camera.open();
if(camera!=null){
try {
camera.setPreviewDisplay(surfaceHolder);
camera.startPreview();
} catch (IOException e) {
Toast.makeText(this, (CharSequence) e, Toast.LENGTH_LONG).show();
}
} …Run Code Online (Sandbox Code Playgroud) 我正在开发一个iPhone照片应用程序,所以我需要在相机胶卷中创建一个名为"My Album"的单独相册,我需要在新创建的目录中保存带有自定义名称的UIImageView图像,例如"My Image.png" .
我怎样才能做到这一点?