我正在尝试用相机的连拍模式构建一个小型照片应用程序.主要思想是每0.3秒拍摄一张图片,并将图片存储在一个数组中,直到拍完最后一张照片.应指定要拍摄的照片数量.
我每2秒只拍一张照片.最短的间隔.然后,当应该将图片写入存储时,应用程序会崩溃.
有人知道如何实现这个吗?这是我的代码:
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.os.Bundle;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.View.OnClickListener;
public class CamaeaView extends Activity implements SurfaceHolder.Callback, OnClickListener {
static final int FOTO_MODE = 1;
private static final String TAG = "Test";
Camera mCamera;
boolean mPreviewRunning = false;
private Context mContext …Run Code Online (Sandbox Code Playgroud) 我正在尝试为相机创建一个表面视图,以便在相机视图中呈现在表面上.目前我在相机视图中看到的只是一个黑屏视图.我试图在谷歌和这里看,但到目前为止,我还没有找到我想要的东西.任何人都可以建议我一些想法.
有人知道有可能在模拟器相机启动时打开一些个人照片吗?
例如,我有一个基于图像分析的应用程序,我想当我点击相机按钮时相机打开而不是默认的Android模拟器运动图像.我希望它打开一些我设置为默认图像的图像.因此,当我选择拍照时,它只显示该图像,当我拍摄照片时,该图像将保存到图库,而不是Android默认图像.
Tnx :)
我正在使用这个
camera.takePicture(null, rawCallback, jpegCallback);
但是有些设备会在相机拍摄图像时发出声音.
请任何人帮忙,我怎样才能将相机快门声静音?
第一件事:在2个不同的HTC Desires上发生以下错误,一个是2.3.3,另一个是4.0.4.
尝试调用时,我收到以下错误消息.takePicture:
E/MemoryHeapBase(104): error opening /dev/pmem_camera: No such file or directory
E/QualcommCameraHardware(104): failed to construct master heap for pmem pool /dev/pmem_camera
E/QualcommCameraHardware(104): initSnapshot X failed with pmem_camera, trying with pmem_adsp
Run Code Online (Sandbox Code Playgroud)
在此错误之后永远不会调用相应的PictureCallback.
我能找到的唯一解释是a)没有调用startPreview; b)尝试拍摄太快(在调用图片回调之前); c)未设置正确的使用/权限
我在这里,在我的FullscreenActivity的onResume()中执行a):
//open the camera resource
cam = Camera.open();
Camera.Parameters params = cam.getParameters();
//change Parameters
params.setJpegQuality(100);//best quality
params.setFlashMode(Parameters.FLASH_MODE_TORCH);
//params.setZoom(2);
List<Size> supportedPreviewSizes = cam.getParameters().getSupportedPreviewSizes();
params.setPreviewSize(supportedPreviewSizes.get(0).width, supportedPreviewSizes.get(0).height);
cam.setParameters(params);
SurfaceView sv = (SurfaceView)this.findViewById(R.id.surfaceView1);
SurfaceHolder mHolder = sv.getHolder();
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
mHolder.setSizeFromLayout();
mHolder.addCallback(this);
try {
cam.setPreviewDisplay(mHolder);
} catch (IOException e) …Run Code Online (Sandbox Code Playgroud) Android提供此代码,使相机预览面朝上显示所有相机和屏幕方向:
public static void setCameraDisplayOrientation(Activity activity,
int cameraId, android.hardware.Camera camera) {
android.hardware.Camera.CameraInfo info =
new android.hardware.Camera.CameraInfo();
android.hardware.Camera.getCameraInfo(cameraId, info);
int rotation = activity.getWindowManager().getDefaultDisplay()
.getRotation();
int degrees = 0;
switch (rotation) {
case Surface.ROTATION_0: degrees = 0; break;
case Surface.ROTATION_90: degrees = 90; break;
case Surface.ROTATION_180: degrees = 180; break;
case Surface.ROTATION_270: degrees = 270; break;
}
int result;
if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
result = (info.orientation + degrees) % 360;
result = (360 - result) % 360; // compensate …Run Code Online (Sandbox Code Playgroud) 我有一个应用程序,我使用设备相机.
现在我只在正常流量下释放相机.
@Override
public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
if(camera != null) {
camera.stopPreview();
camera.release();
}
}
Run Code Online (Sandbox Code Playgroud)
因此,应用程序以意外的方式退出相机模式 - 即强制关闭(由于OutOfMemoryError) - 相机被锁定.释放它的唯一方法是重启设备.
申请开始后,我得到:
RuntimeException: Fail to connect to camera service
我怎么能确定,相机在任何情况下都会被释放?
似乎有一些Android设备有光学变焦,例如
有没有办法以编程方式检测这个?
由于相机通常需要几秒钟来初始化,在我的应用程序中有一些流程我启动相机预期用户即将使用它(因此应用程序感觉更快,当他们实际按下我的应用内相机按钮) .如果相机具有光学变焦,那么我不想这样做,因为镜头滑出并使用户烦恼.
如果我必须将这些设备列入黑名单,是否有人知道所有带有光学变焦的Android设备的列表,最好是使用他们的Build.MANUFACTURER和Build.PRODUCT字符串?
如果它有帮助,这里是我最近购买的S4 Zoom的Camera.Parameters:
{preferred-preview-size-for-video=704x528, factory-af-led-lv-limit=-1,-1, zoom=0, factory-af-scan-limit=-1,-1, max-num-detected-faces-hw=0, continuous-mode=off, zoom-supported=true, metering=center, whitebalance=auto, scene-mode=auto, jpeg-quality=1, factory-testno=0, factory-af-diff-check=-1,-1, preview-format-values=yuv420sp,yuv420p, best-mode=off, red-eye-fix=fail, jpeg-thumbnail-quality=100, preview-format=yuv420sp, low-light-mode=off, zoom-action=zoom-stop, face-detection=off, video-size-values=1920x1080,1280x720,800x450,768x512,640x480,320x240,176x144, factory-zoom-slope-check-data=-1,-1, preview-size=960x540, focal-length=4.300000, flash-charging=0, factory-cap-range=-1,-1, factory-iris-range=-1,-1, flash-mode-values=off,auto,red-eye,on,fillin,slow,red-eye-fix, preview-frame-rate-values=30,15, factory-af-scan-range=-1,-1, max-num-metering-areas=0, preview-frame-rate=30, focus-mode-values=auto,infinity,macro,fixed,face-detection,continuous,continuous-picture,continuous-video,manual,multi,touch,object-tracking, jpeg-thumbnail-width=224, video-size=0x0, scene-mode-values=auto,portrait,landscape,night,beach,snow,sunset,fireworks,sports,party,candlelight,dusk-dawn,fall-color,back-light,text, preview-fps-range-values=(7000,30000), jpeg-thumbnail-size-values=224x126,160x120,192x128,0x0, zoom-ratios=100,120,140,160,180,220,310,420,560,790,1000, preview-size-values=960x540,768x512,704x576,704x528,640x524,640x480,320x240, smart-scene-detection=0, factory-zoom-range-check-data=-1,-1, factory-af-led-range=-1,-1,-1,-1, picture-size-values=4608x2592,3264x2448,4608x3456,4608x3072,4096x2304,3960x2640,3648x2736,2592x1944,2304x1728,1984x1488,1920x1080,1024x768,960x720,640x480, preview-fps-range=7000,30000, auto-whitebalance-lock=false, min-exposure-compensation=-6, antibanding=off, max-num-focus-areas=1, vertical-view-angle=46.3, factory-wb-value=-1,-1,-1,-1, zoom-ring=-1, horizontal-view-angle=67, video-stabilization-supported=false, jpeg-thumbnail-height=126, continuous-fps=, focus-mode=auto, factory-sc-speedtime=-1,-1, factory-gyro-range-data=-1,-1,-1,-1, auto-whitebalance-lock-supported=true, video-frame-format=yuv420sp, max-num-detected-faces-sw=0, …Run Code Online (Sandbox Code Playgroud) 我正在编写一个程序,我正在拍照,然后想要将图片存储到SD卡中,最后尝试调整现有图像的大小(然后用旧图像重写).
我的代码几乎可以在所有设备上正常工作,但仅在三星设备上遇到此问题.
当我捕捉图像时,我无法将图像存储到SD卡中
logcat的:
12-05 18:23:15.407: E/AndroidRuntime(2378): FATAL EXCEPTION: main
12-05 18:23:15.407: E/AndroidRuntime(2378): java.lang.NullPointerException
12-05 18:23:15.407: E/AndroidRuntime(2378): at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:461)
12-05 18:23:15.407: E/AndroidRuntime(2378): at com.example.kdh.TakePhotoActivity$1.onPictureTaken(TakePhotoActivity.java:325)
12-05 18:23:15.407: E/AndroidRuntime(2378): at android.hardware.Camera$EventHandler.handleMessage(Camera.java:789)
12-05 18:23:15.407: E/AndroidRuntime(2378): at android.os.Handler.dispatchMessage(Handler.java:99)
12-05 18:23:15.407: E/AndroidRuntime(2378): at android.os.Looper.loop(Looper.java:137)
12-05 18:23:15.407: E/AndroidRuntime(2378): at android.app.ActivityThread.main(ActivityThread.java:4921)
12-05 18:23:15.407: E/AndroidRuntime(2378): at java.lang.reflect.Method.invokeNative(Native Method)
12-05 18:23:15.407: E/AndroidRuntime(2378): at java.lang.reflect.Method.invoke(Method.java:511)
12-05 18:23:15.407: E/AndroidRuntime(2378): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1036)
12-05 18:23:15.407: E/AndroidRuntime(2378): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:803)
12-05 18:23:15.407: E/AndroidRuntime(2378): at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)
码:
private void createCamera() {
// Create an instance …Run Code Online (Sandbox Code Playgroud) 我想用相机拍照.我只是暂时需要它们,所以我做了以下事情:
private void takePicture() {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (intent.resolveActivity(this.getActivity().getPackageManager()) != null) {
try {
this.imageFile = File.createTempFile("CROP_SHOT", ".jpg", this.getActivity().getCacheDir());
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(this.imageFile));
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
this.startActivityForResult(intent, Globals.REQUEST_TAKE_PHOTO);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的RESULT_CANCELED是我的结果代码onActivityResult
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.v("PictureEdit", "onActivityResult");
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == Activity.RESULT_OK) {
if(requestCode == Globals.REQUEST_TAKE_PHOTO) {
Log.v("PictureEdit", "onActivityResult take photo");
this.startCropImage(Uri.fromFile(this.imageFile));
} else if (requestCode == Globals.REQUEST_PICK_PHOTO) {
Log.v("PictureEdit", "onActivityResult pick photo"); …Run Code Online (Sandbox Code Playgroud)