Estoy tratando de obtener una vista previa de la cámara con un efecto de color aplicado, como por ejemplo el efecto NEGATIVO. No hay errores, y la vista previa es visible sin problemas, pero independientemente de ColorEffect I set, la vista previa de la cámara permanece sin cambios. Probé si los efectos que estoy tratando de usar están disponibles para mi teléfono ejecutando params.getSupportedColorEffects() (también estos efectos también funcionan en la aplicación de fotos integrada).ColorEfecto no visible en la vista previa de la cámara
No tengo idea de lo que está mal con el código - Lo estoy posteando a continuación. Tal vez alguien aquí tiene una idea de lo que podría hacer que esto funcione? Gracias por adelantado.
public class CustomCameraView extends SurfaceView{
Camera mCamera;
SurfaceHolder mHolder;
public CustomCameraView(Context context){
super(context);
mHolder = this.getHolder();
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
mHolder.addCallback(mSurfaceHolderListener);
}
SurfaceHolder.Callback mSurfaceHolderListener = new SurfaceHolder.Callback() {
public void surfaceCreated(SurfaceHolder holder) {
mCamera=Camera.open();
try {
mCamera.setPreviewDisplay(mHolder);
}
catch (Exception e){ }
}
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height)
{
Camera.Parameters params = mCamera.getParameters();
params.setColorEffect(Camera.Parameters.EFFECT_NEGATIVE);
mCamera.setParameters(params);
mCamera.startPreview();
}
public void surfaceDestroyed(SurfaceHolder arg0)
{
mCamera.stopPreview();
mCamera.release();
}
};
}
Después de algunas pruebas resultó que el problema podría estar relacionado con el deseo de HTC que estaba probando en (o tal vez su versión del sistema operativo). El código funciona correctamente en algunos otros teléfonos Samsung. No he descubierto cuál podría ser el problema en el HTC.
ACTUALIZACIÓN: He conseguido que los efectos de trabajo, pero realmente por accidente, y sigo sin entender por qué. Pero voy a dar la respuesta aquí - quizás alguien lo encuentre útil, o tal vez pueda explicar por qué sucede de esta manera:
Agregué la siguiente línea al método surfaceChanged
porque estaba tratando de disminuir el tamaño de la vista previa:
previewHolder.setFixedSize(width, height-1);
Esto tiene el resultado de hacer visible el efecto seleccionado.
Cuando cambié a esta línea:
previewHolder.setFixedSize(width, height);
el efecto no era visible más una vez más. Es extraño ... funciona para que la altura establecida sea algo menor que el parámetro de altura recibido.