调用takePicture(null, null, mPictureCallback);这个方法调用后会生成一张刚才拍照的效果图,不想生成这个图片,想在mPictureCallback方法中对图片做个处理再显示出来,请问该怎样做? 就这点分了,帮个忙吧!
解决方案 »
- 类似微信朋友圈评论功能
- expandablelistview图片显示问题
- android 蓝牙 调试
- 乐phone如何监控到去电号码
- 怎么让android中的GridView的item有不同的宽度
- 激活设备管理器
- 请问关于使用fragment做底部菜单,不能切换的问题
- 内容观察者读取短信数据库报错 Could not execute method for android:onClick
- java.lang.NoSuchFieldError: No field INSTANCE of type Lorg/apache/http/conn/ssl/
- Android中sqlite使用哪个可视化工具可以存放图片啊?sqlite expert可以吗?
- 急急急!这样的Adapter该如何定义?
- RadioButton监听运行时,模拟器就提示has stop unexpectedly
/** Called when the activity is first created. */
private SurfaceView mSurfaceView;
private SurfaceHolder mSurfaceHolder;
private Camera mCamera;
private boolean mPreviewRunning;
private ImageView mImageView; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFormat(PixelFormat.TRANSLUCENT);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
setContentView(R.layout.main);
mSurfaceView = (SurfaceView) findViewById(R.id.camera);
// mSurfaceView.set
mImageView = (ImageView) findViewById(R.id.image);
mImageView.setVisibility(View.GONE);
mSurfaceView.setOnClickListener(this);
mSurfaceHolder = mSurfaceView.getHolder();
mSurfaceHolder.lockCanvas();
mSurfaceHolder.addCallback(this);
mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
// mSurfaceHolder.set
} @Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
if (mPreviewRunning) {
mCamera.stopPreview();
// mCamera.set
}
Parameters params = mCamera.getParameters();
params.setPictureFormat(PixelFormat.JPEG);// 设置图片格式
// params.setp
params.setPreviewSize(0, 0);
params.setPictureSize(10, 10);
params.set("rotation", 90);
// params.set Log.i("set0000000000000000", "set--------------------");
mCamera.setParameters(params); try {
mCamera.setPreviewDisplay(holder);
} catch (IOException e) {
e.printStackTrace();
}
mCamera.startPreview();
mPreviewRunning = true;
// mCamera.set
} private AutoFocusCallback mAutoFocusCallBack = new AutoFocusCallback() { @Override
public void onAutoFocus(boolean success, Camera camera) { Log.v("AutoFocusCallback", "AutoFocusCallback" + success);
Camera.Parameters Parameters = mCamera.getParameters();
Parameters.setPictureFormat(PixelFormat.JPEG);// 设置图片格式
// Parameters.set
mCamera.setParameters(Parameters);
mCamera.setPreviewCallback(null);
mCamera.takePicture(mShutterCallback, null, mPictureCallback);
// mCamera.setParameters(params)
// mCamera.set
}
}; @Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
mCamera = Camera.open();
} @Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
mCamera.stopPreview();
mPreviewRunning = false;
mCamera.release();
mCamera = null;
} /**
* 拍照的回调接口
*/
PictureCallback mPictureCallback = new PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
Log.v("PictureCallback", "…onPictureTaken…");
if (data != null) {
new ProgressDialog(MainActivity.this).show();
}
}
};
/**
* 在相机快门关闭时候的回调接口,通过这个接口来通知用户快门关闭的事件,
* 普通相机在快门关闭的时候都会发出响声,根据需要可以在该回调接口中定义各种动作, 例如:使设备震动
*/
ShutterCallback mShutterCallback = new ShutterCallback() { public void onShutter() {
// just log ,do nothing
// Log.v("ShutterCallback", "…onShutter…");
// mSurfaceView.setVisibility(View.INVISIBLE);
// mImageView.setVisibility(View.VISIBLE);
} }; public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
if (mCamera != null) {
// mCamera.takePicture(null, null,mPictureCallback);
mCamera.autoFocus(mAutoFocusCallBack);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
}
}
return super.onKeyDown(keyCode, event);
} @Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Log.v("onClick", "…onClick…");
mCamera.autoFocus(mAutoFocusCallBack);
} @Override
public boolean onCreateOptionsMenu(Menu menu) { menu.add(0, 1, 0, "调用系统照相机");
return true;
} @Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case 1:
Intent intent = new Intent();
intent.setClass(MainActivity.this, MainActivity.class);
startActivity(intent);
break;
}
return true;
}
}
要改底层的东西我估计
{
LOGV("takePicture (pid %d)", getCallingPid()); Mutex::Autolock lock(mLock);
status_t result = checkPid();
if (result != NO_ERROR) return result; if (mHardware == 0) {
LOGE("mHardware is NULL, returning.");
return INVALID_OPERATION;
} mHardware->enableMsgType(CAMERA_MSG_SHUTTER |
CAMERA_MSG_POSTVIEW_FRAME |
CAMERA_MSG_RAW_IMAGE |
CAMERA_MSG_COMPRESSED_IMAGE); return mHardware->takePicture();
}
其中CAMERA_MSG_POSTVIEW_FRAME就是用于显示拍摄后的图像
12楼的兄台的方法我试过了,没有用的。即使将takePicture(null, null, null)这样设置也不会影响成像。成像和mPictureCallback参数无关。