- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想制作一个相机应用程序,它会在按下按钮时开始将图像从相机显示到屏幕,并在释放按钮时拍照。我都做了,就是相机启动速度太慢了。我希望它在我按下按钮时立即启动。我试图实例化我的相机,设置所有参数并将其流式传输到一个不可见的 SurfaceView,但当我按下按钮时,它似乎重新启动了相机。可能是什么问题?
这是我的代码:
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.MotionEvent;
import android.view.Surface;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View.OnTouchListener;
import android.view.ViewGroup.LayoutParams;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.SeekBar;
import android.view.View;
import android.graphics.AvoidXfermode.Mode;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.hardware.Camera.Parameters;
import android.hardware.Camera.PictureCallback;
import android.hardware.Camera.ShutterCallback;
import android.hardware.Camera.Size;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.HttpContext;
import org.json.JSONException;
import org.json.JSONObject;
import com.shtern.selfy.MainActivity.JSONParse;
@TargetApi(Build.VERSION_CODES.GINGERBREAD)
public class CameraActivity extends Activity implements SurfaceHolder.Callback,
View.OnTouchListener, Camera.PictureCallback, Camera.PreviewCallback {
private Camera camera;
private SurfaceHolder surfaceHolder;
private SurfaceView preview;
private Button shotBtn;
JSONObject json = new JSONObject();
JSONParse jsparse = new JSONParse();
String url = "http://myserverurl";
String userid;
String token;
String parentactivity;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
userid = getIntent().getStringExtra("userid").toString();
token = getIntent().getStringExtra("token").toString();
parentactivity = getIntent().getStringExtra("parent").toString();
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.camera);
preview = (SurfaceView) findViewById(R.id.SurfaceView01);
surfaceHolder = preview.getHolder();
surfaceHolder.addCallback(this);
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
shotBtn = (Button) findViewById(R.id.Button01);
shotBtn.setOnTouchListener(this);
camera = Camera.open(Camera.CameraInfo.CAMERA_FACING_FRONT);
// camera = Camera.open();
Camera.Parameters params = camera.getParameters();
params.setPictureSize(800, 480);
params.setRotation(270);
camera.setParameters(params);
try {
camera.setPreviewDisplay(surfaceHolder);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
camera.setPreviewDisplay(surfaceHolder);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
preview.setVisibility(View.VISIBLE);
camera.startPreview();
preview.setVisibility(View.VISIBLE);
}
@Override
protected void onResume() {
super.onResume();
preview.setVisibility(View.INVISIBLE);
}
@Override
protected void onPause() {
super.onPause();
if (camera != null) {
camera.stopPreview();
camera.setPreviewCallback(null);
camera.release();
camera = null;
}
preview.setVisibility(View.GONE);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
Log.d("SURFACE", "CREATED");
Size previewSize = camera.getParameters().getPreviewSize();
float aspect = (float) previewSize.width / previewSize.height;
int previewSurfaceWidth = preview.getWidth();
int previewSurfaceHeight = preview.getHeight();
LayoutParams lp = preview.getLayoutParams();
if (this.getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE) {
camera.setDisplayOrientation(90);
lp.height = previewSurfaceHeight;
lp.width = (int) (previewSurfaceHeight / aspect);
} else {
camera.setDisplayOrientation(0);
lp.width = previewSurfaceWidth;
lp.height = (int) (previewSurfaceWidth / aspect);
}
preview.setLayoutParams(lp);
try {
camera.setPreviewDisplay(holder);
camera.setPreviewCallback(this);
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
camera.stopPreview();
camera.setPreviewCallback(null);
camera.release();
camera = null;
preview.setVisibility(View.GONE);
}
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
Log.d("TOUCH", "PUSHED");
shotBtn.setVisibility(View.GONE);
preview.setVisibility(View.VISIBLE);
// start_camera();
}
if (event.getAction() == MotionEvent.ACTION_UP) {
Log.d("TOUCH", "Release detected");
camera.takePicture(null, null, null, this);
//
}
return true;
}
@Override
public void onPictureTaken(byte[] paramArrayOfByte, Camera paramCamera) {
camera.stopPreview();
camera.setPreviewCallback(null);
preview.setVisibility(View.INVISIBLE);
CameraActivity.this.finish();
FrameLayout fl = (FrameLayout) findViewById(R.id.FrameLayout01);
fl.removeAllViews();
try {
String path = CameraActivity.this.getFilesDir().getPath();
Log.d("PATH", path);
File saveDir = new File(path);
if (!saveDir.exists()) {
saveDir.mkdirs();
}
FileOutputStream os = new FileOutputStream(String.format(path
+ "/ava.jpg"));
os.write(paramArrayOfByte);
os.close();
} catch (Exception e) {
}
jsparse.execute();
}
class JSONParse extends AsyncTask<Void, Void, JSONObject> {
@Override
protected JSONObject doInBackground(Void... params) {
List<NameValuePair> parameters = new ArrayList<NameValuePair>();
String path = CameraActivity.this.getFilesDir().getPath();
path = path + "/ava.jpg";
Log.d("PATHINCAMERA", path);
parameters.add(new BasicNameValuePair("user_id", userid));
parameters.add(new BasicNameValuePair("token", token));
parameters.add(new BasicNameValuePair("file", path));
url = url + "/change_avatar_request/";
postWithImage(url, parameters);
if (parentactivity.equals("RegisterActivity")) {
final Intent intent = new Intent(getApplicationContext(),
MenuActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("userid", String.valueOf(userid));
intent.putExtra("token", String.valueOf(token));
startActivity(intent);
}
// CameraActivity.this.finish();
return null;
}
@Override
protected void onPostExecute(JSONObject json) {
}
}
public void postWithImage(String url, List<NameValuePair> nameValuePairs) {
HttpClient httpClient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
HttpPost httpPost = new HttpPost(url);
try {
MultipartEntity entity = new MultipartEntity(
HttpMultipartMode.BROWSER_COMPATIBLE);
for (int index = 0; index < nameValuePairs.size(); index++) {
if (nameValuePairs.get(index).getName()
.equalsIgnoreCase("file")) {
// If the key equals to "image", we use FileBody to transfer
// the data
entity.addPart(nameValuePairs.get(index).getName(),
new FileBody(new File(nameValuePairs.get(index)
.getValue())));
} else {
// Normal string data
entity.addPart(
nameValuePairs.get(index).getName(),
new StringBody(nameValuePairs.get(index).getValue()));
}
}
httpPost.setEntity(entity);
HttpResponse response = httpClient.execute(httpPost, localContext);
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onPreviewFrame(byte[] paramArrayOfByte, Camera paramCamera) {
}
}
最佳答案
要保持预览工作,你不应该设置
preview.setVisibility(View.INVISIBLE)
相反,您可以暂时(直到按下按钮)用非透明 View 覆盖预览,例如图片 View 。
关于android - camera.startPreview() 太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23983527/
我收到错误 startPreview failed 但不是所有设备。在摩托罗拉 RAZR 和三星 Galaxy S3 中,它运行良好。有人告诉我他们在其他设备(Galaxy SII Lite、Gala
我正在关注 this tutorial学习 Android 的 Camera API。我将其作为第一部分的结尾(就在“提供覆盖”开始之前),但出现以下错误: 06-20 23:33:50.903: E
我的相机应用程序在 Android 2.x 设备上运行时总是出现异常。在较新的 Android 设备上,该应用程序运行良好。 堆栈跟踪: 10-31 19:51:52.187: W/System.er
我想制作一个相机应用程序,它会在按下按钮时开始将图像从相机显示到屏幕,并在释放按钮时拍照。我都做了,就是相机启动速度太慢了。我希望它在我按下按钮时立即启动。我试图实例化我的相机,设置所有参数并将其流式
我是 Android 的新手,但必须在项目上做一些相当复杂的编程。我们想为 Unity 项目编写一个 Android 插件,因为我们需要测量用户的心率。代码本身已经编写完成,并且可以在应用程序的上下文
问题: 我在 android 上制作一个应用程序,它需要相机在拍摄图像时快速响应,我注意到应用程序的行为很慢,在测量时间后我注意到函数 startPreview() 是问题的原因。 代码预览: 这是代
调用 Camera.takePicture() 后,我的预览将停止更新,如文档中所述。检测图像捕获过程完成并调用 startPreview() 以使其再次开始更新的最佳方法是什么? 根据文档,调用不能
我正在编写一个应用程序来通过 Android 相机拍照。显示代码 in this question .目前我不需要处理预览帧,所以 setPreviewCallback() 不用于相机。 在具有 76
几天来我一直在尝试让我的项目运行但没有成功,这个网站上有类似的问题和答案,但没有帮助我解决我的问题,这就是为什么我用下面的完整代码问这个问题。 我正在使用 Android 相机 API 创建一个相机项
我们不断收到 StartPreview 失败的崩溃报告,并显示以下堆栈跟踪。在其他设备上运行时,这似乎工作得很好。我尝试使用 S3 重现它,但做不到。它似乎工作得很好。 java.lang.Runti
尝试通过 Android ICS 中的 native 代码让相机工作:大多数手册都提到了 startPreview() 方法。但是浏览 AOSP 代码,我在 中也发现了“startRecording
我有一个 Activity 打开 Camera 并在 SurfaceTexture 上开始预览。一切正常,但我注意到,如果我反复离开 Activity 并返回,几次后,手机会卡住然后重新启动。 我已将
我刚得到一个 Nexus 7,我正在尝试将一些代码移植到其中。以下行在运行 Ice Cream 的 Xoom 上没有问题: mCamera.startPreview(); 它在 Nexus 7 上也能
我是一名优秀的程序员,十分优秀!