Sto cercando di ottenere un'anteprima della fotocamera con un effetto di colore applicato ad esso, come ad esempio l'effetto NEGATIVO. Non ci sono errori e l'anteprima è visibile senza problemi, ma indipendentemente dall'impostazione ColorEffect I - l'anteprima della fotocamera rimane invariata. Ho provato se gli effetti che sto cercando di utilizzare sono disponibili sul mio telefono eseguendo params.getSupportedColorEffects() (anche questi effetti funzionano anche nell'app per foto incorporata).ColorEffect non visibile sull'anteprima della fotocamera
Non ho idea di cosa c'è di sbagliato nel codice - lo sto postando di seguito. Forse qualcuno qui ha un'idea di cosa potrebbe fare questo lavoro? Grazie in anticipo.
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();
}
};
}
Dopo alcune prove si è scoperto che il problema potrebbe essere legato al desiderio HTC stavo testando su (o forse la sua versione del sistema operativo). Il codice funziona correttamente su altri telefoni Samsung. Non ho capito quale potrebbe essere il problema su HTC.
UPDATE: sono riuscito a ottenere gli effetti di lavoro, ma veramente per caso, e io ancora non capisco perché. Ma darò la risposta qui - forse qualcuno lo troverà utile, o forse sarà in grado di spiegare perché succede in questo modo:
Ho aggiunto la seguente riga al metodo surfaceChanged
perché stavo cercando di ridurre le dimensioni di l'anteprima:
previewHolder.setFixedSize(width, height-1);
Questo ha avuto il risultato di rendere visibile l'effetto selezionato.
Quando ho cambiato questa linea:
previewHolder.setFixedSize(width, height);
l'effetto non era più visibile ancora una volta. Così strano .... funziona per l'altezza impostata essere qualcosa di meno che il parametro di altezza ricevuta.