我在相机应用程序上拍摄基本照片.当我获得最佳的最佳预览尺寸时,我遇到了问题.
事实上,有了这个第一个代码:
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
if (isPreviewRunning) {
mCamera.stopPreview();
}
Camera.Parameters parameters = mCamera.getParameters();
mCamera.setParameters(parameters);
mCamera.startPreview();
isPreviewRunning = true;
}
Run Code Online (Sandbox Code Playgroud)
图片质量很好:
http://img689.imageshack.us/i/04042011172937.jpg/
但是,使用此代码:
private Size getOptimalPreviewSize(List<Size> sizes, int w, int h) {
final double ASPECT_TOLERANCE = 0.05;
double targetRatio = (double) w / h;
if (sizes == null) return null;
Size optimalSize = null;
double minDiff = Double.MAX_VALUE;
int targetHeight = h;
// Try to find an size match aspect ratio and …Run Code Online (Sandbox Code Playgroud) 我想对从相机获得的像素进行一些图像处理.
问题是来自相机的像素旋转了90度.
我得到方法内的像素 onPreviewFrame(byte[] data, Camera camera)
我试过camera.setDisplayOrientation(90);,它以正确的方向显示视频,但我仍然收到文档中所述的旋转像素:
这不会影响在Android.Hardware.Camera.IPreviewCallback.OnPreviewFrame(Byte [],Android.Hardware.Camera),JPEG图片或录制的视频中传递的字节数组的顺序.
我也尝试过:
parameters.setRotation(90);
camera.setParameters(parameters);
Run Code Online (Sandbox Code Playgroud)
但那没用.
我正在使用android 2.2

顶部图像显示使用时的SurfaceView camera.setDisplayOrientation(90);
第二个图像onPreviewFrame(byte[] data, Camera camera)从data数组中获取.如您所见,data阵列旋转.
我正在创建一个使用水龙头来聚焦功能的相机应用程序,就像许多标准相机应用程序一样.我首先得到触摸事件的(x,y)坐标,然后将此值传递给UI.然后,我尝试设置焦点区域,如下所示:
Rect newRect = new Rect(left,top,right, bottom);
Camera.Parameters params = mCamera.mCameraInstance.getParameters();
Camera.Area focusArea = new Camera.Area(newRect, 1000);
List<Camera.Area> focusAreas = new ArrayList<Camera.Area>();
focusAreas.add(focusArea);
params.setFocusAreas(focusAreas);
Run Code Online (Sandbox Code Playgroud)
但是,它似乎没有任何效果.所以,我将一些值硬编码到矩形中(这样,我可以排除触摸事件中的坏坐标). 根据文档,它正在寻找空间中的坐标(-1000,-1000)(左上)到(1000,1000)(右下).
所以我用这个替换了上面的矩形:
//should target a 100x100 square in the center of the screen
Rect newRect = new Rect(-50,-50,50, 50);
Run Code Online (Sandbox Code Playgroud)
而且,似乎没有效果.我知道我的相机支持设置对焦区域,因为首先,相机应用程序成功使用它,并且params.getMaxNumFocusAreas()返回1.
如果有人在过去成功使用过这个,请告诉我!
我发现这个类似的问题似乎也表明这个API根本无法在Android 4.0设备上运行(我正在测试4.1.1,Galaxy S3).然而,这些设备上的相机应用程序仍然具有点对点功能.我错过了什么?
对不起,我的英语不好.我有以下问题:

让我们说我的移动设备的相机正在显示这张照片.
在图片中,您可以看到4个不同的位置.我知道每个位置(经度,纬度).
现在我想知道,图中的具体位置在哪里.例如,我想在前面20米处和我左边5米处有一个矩形.我只知道这一点的纬度/经度,但我不知道,我必须把它放在图片的内部(x,y).例如,在我看来,POS3位于(0,400).POS4为(600,400),依此类推.
我必须在哪里放置新点,前面20米,左边5米?(所以我的输入是:(LatXY,LonXY),我的结果应该是(x,y)在屏幕上)
我还得到了摄像机的高度以及摄像机的x,y和z轴的角度.
我可以使用简单的数学运算来解决这个问题吗?
非常感谢你!
android coordinate-systems augmented-reality coordinate-transformation android-camera
我想实现一种功能,当有人试图解锁我的设备并输入错误密码3次时,通过前置摄像头捕获图像.我检查过它可以在Android中使用,某些应用程序也可以在Market中使用.
我已经做了一些工作来实现这一目标,但我得到了一个黑色的图像.这是代码:
注册设备管理员以获取广播的错误密码尝试:
public class DeviceAdminSample extends DeviceAdminReceiver {
static Context ctx;
static SharedPreferences getSamplePreferences(Context context) {
ctx = context;
return context.getSharedPreferences(
DeviceAdminReceiver.class.getName(), 0);
}
@Override
public void onPasswordFailed(Context context, Intent intent) {
super.onPasswordFailed(context, intent);
System.out.println("Password Attempt is Failed...");
Intent i = new Intent(context, CameraView.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}
Run Code Online (Sandbox Code Playgroud)
Camera Class捕获图像并将其保存到SD卡:
public class CameraView extends Activity implements SurfaceHolder.Callback,
OnClickListener {
private static final String TAG = "CameraTest";
Camera mCamera;
boolean mPreviewRunning = false;
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
Log.e(TAG, …Run Code Online (Sandbox Code Playgroud) android android-intent android-camera android-camera-intent android-canvas
我正在使用以下代码在onPause中释放相机.但是线路mCamera.release()平均需要30秒才能在Nexus 10设备中释放相机.我在mCamera.release()之前和之后添加了日志记录,发现打印这些日志的时间差是30秒.
private void releaseCamera() {
if (mCamera != null) {
previewing = false;
mCamera.setPreviewCallback(null);
if(mPreview != null)
mPreview.getHolder().removeCallback(mPreview);
Log.e("QR","Starting to call mCamera.release()");
mCamera.release();
Log.e("QR","Released Camera");
mCamera = null;
}
}
Run Code Online (Sandbox Code Playgroud)
我在调用releaseCamera()之前调用了mCamera.stopPreview()
我有什么方法可以异步地做到这一点吗?因为从Camerapreview活动到下一个活动只需不到一分钟.
编辑1:我们将预览尺寸从最高(1080x1920)缩小到中间范围(480x800),一切都开始正常.预览尺寸是否与HAL中的相机释放有关?
我主要对全景选项感兴趣.有没有办法打开原生相机应用程序(增强版),这样用户可以在普通照片和全景视图之间切换?有可能或者我应该停止尝试吗?
这是我现在使用的代码:
Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(i, CAMERA_REQUEST);
Run Code Online (Sandbox Code Playgroud)
这是目前发生的事情:

这就是我需要实现的目标:

谢谢!
我的应用程序中有一个摄像头,我希望它能够以与手机摄像头相同的方式连续自动对焦.我发现模式FOCUS_MODE_CONTINUOUS_VIDEO和FOCUS_MODE_CONTINUOUS_PICTURE,但他们不会被一些HTC手机姜饼我测试上的支持.
我正在做的是确定是否可以使用这些模式:
Camera.Parameters parameters = mCamera.getParameters();
List<String> supportedFocusModes = parameters.getSupportedFocusModes();
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH &&
supportedFocusModes.contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE)) {
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
}
else if (supportedFocusModes.contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO)) {
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);
}
else if (supportedFocusModes.contains(Camera.Parameters.FOCUS_MODE_AUTO)) {
// auto focus on request only
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
}
Run Code Online (Sandbox Code Playgroud)
在几种不同的姜饼HTC手机上运行我没有得到连续模式,但我得到"自动".这让我可以根据需要自动对焦(当我打电话时mCamera.autoFocus(null),如果用户移动相机,相机将不会重新聚焦.
我无法将对焦模式设置为相机不支持的任何内容,如果我这样做,则会显示空白.
我试过的一个解决方案是调用mCamera.autoFocus(null)计时器.这会使相机连续重新对焦,即使它已经对焦.
有没有办法在这些手机上实现持续的自动对焦体验?当我在这些手机上查看HTC相机应用时,它确实具有连续自动对焦 - 当您在相机周围移动时重新聚焦并且在图像聚焦后不会保持重新对焦.
在我的应用程序中,我有一个相机功能.用户可以捕获图像或从图库中选择.
活动B.
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case RESULT_LOAD_IMAGE:
if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK & null != data) {
selectedImage = data.getData();
imageView.setImageURI(selectedImage);
}
break;
case REQUEST_IMAGE_CAPTURE:
if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
try {
selectedImage = imageUri;
getContentResolver().notifyChange(selectedImage, null);
imageView.setImageURI(null);
imageView.setImageURI(imageUri);
} catch (Exception e) {
Toast.makeText(this, "Failed to load", Toast.LENGTH_SHORT)
.show();
}
}
}
}
submit.setOnClickListener(new View.OnClickListener() {
@Override
public void …Run Code Online (Sandbox Code Playgroud) 我有一个Google Pixel并尝试使用官方应用程序录制视频,我发现在录制中发生了一个非常出色的内置稳定机制,所以如果我稍微摇动我的手,这个动作只会稍微转移到录音(甚至视频预览都非常稳定).
然而,我尝试使用自己的视频录制应用程序,这种稳定性没有发生.
我当然尝试使用官方文档中的setVideoStabilization()方法,但结果不如内置的相机应用程序.
还有什么我想念的吗?
android ×10
android-camera ×10
camera ×3
java ×2
autofocus ×1
google-nexus ×1
image ×1
nexus-10 ×1
panoramas ×1
video ×1