Hi All,
I did basic camera effects in HTC Legend and HTC wildfire. Preview is
working well. But setting the color effects does not affect the
preview. The same code works well in Samsung galaxy and sony ericsson
Xperia. please give me a solution to use this in HTC.
CameraPreview.java
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
Log.e(TAG, "onCreate");
getWindow().setFormat(PixelFormat.JPEG);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.main);
mSurfaceView = (SurfaceView) findViewById(R.id.surface_camera);
mSurfaceView.setOnClickListener(this);
mSurfaceHolder = mSurfaceView.getHolder();
mSurfaceHolder.addCallback(this);
mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
//uriTarget =
getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, new
ContentValues());
}
public void surfaceCreated(SurfaceHolder holder) {
Log.e(TAG, "surfaceCreated");
mCamera = Camera.open();
Camera.Parameters cameraParameters = mCamera.getParameters();
listSupportedPictureSizes =
cameraParameters.getSupportedPictureSizes();
colorEffects = cameraParameters.getSupportedColorEffects();
pixelinfo = new PixelFormat();
pixelformat = mCamera.getParameters().getPreviewFormat();
PixelFormat.getPixelFormatInfo(pixelformat, pixelinfo);
Size preview_size = mCamera.getParameters().getPreviewSize();
preview_width = preview_size.width;
preview_height = preview_size.height;
bufSize = preview_width * preview_height *
pixelinfo.bitsPerPixel / 8;
b=new byte[bufSize];
addCallbackBuffer(b);
mCamera.setPreviewCallbackWithBuffer(new PreviewCallback()
{
public void onPreviewFrame(byte[] data, Camera arg1) {
addCallbackBuffer(b);
}
});
mCamera.setPreviewCallback(new PreviewCallback()
{
public void onPreviewFrame(byte[] data, Camera arg1) {
try {
//setEffect(Parameters.EFFECT_AQUA);
} catch (Exception e) {
Log.e("Previewer", "invoking
addCallbackBuffer failed:
"+ e.toString());
}
}
});
}
private void addCallbackBuffer(byte[] b) {
try {
setEffect(colorEffect);
} catch (Exception e) {
Log.e("Previewer", "invoking addCallbackBuffer failed: "
+ e.toString());
}
}
public void surfaceChanged(SurfaceHolder holder, int format, int w,
int h) {
Log.e(TAG, "surfaceChanged");
// XXX stopPreview() will crash if preview is not running
if (mPreviewRunning) {
mCamera.stopPreview();
}
Camera.Parameters p = mCamera.getParameters();
Camera.Size sz = listSupportedPictureSizes.get(0);
p.setPictureSize(sz.width, sz.height);
//p.setColorEffect(Parameters.EFFECT_AQUA);
p.setPreviewSize(w, h);
try{
mCamera.setParameters(p);
}catch(Exception ex){}
try {
mCamera.setPreviewDisplay(holder);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mCamera.startPreview();
mPreviewRunning = true;
}
public void surfaceDestroyed(SurfaceHolder holder) {
Log.e(TAG, "surfaceDestroyed");
mCamera.stopPreview();
mPreviewRunning = false;
mCamera.release();
}
private SurfaceView mSurfaceView;
private SurfaceHolder mSurfaceHolder;
public void onClick(View arg0)
{
try
{
mCamera.setPreviewCallbackWithBuffer(null);
mCamera.setPreviewCallback(null);
}
catch(Exception ex){}
mCamera.takePicture(null, null, jpegCallback);
}
public void setEffect(String effect)
{
if (mPreviewRunning) {
mCamera.stopPreview();
}
Camera.Parameters p = mCamera.getParameters();
p.setColorEffect(effect);
try
{
mCamera.setParameters(p);
}
catch(Exception ex){
Toast.makeText(this, "Couldn't set Effects:
"+ex.getMessage(),
Toast.LENGTH_LONG).show();
}
mCamera.startPreview();
mPreviewRunning = true;
}
Thanks
Mnkumar
--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en