2010-02-24 2 views
-1

Dans mon application, l'aperçu de la caméra fonctionne correctement à la fois en mode potrait et en mode paysage. Aucun incident ne se produit, mais les utilisateurs se plaignent que les plantages se produisent lorsqu'ils utilisent le même. quel est le problème avec ça? veuillez m'aider à résoudre ce problèmeProblème d'aperçu de l'appareil photo?

+0

Sur un (des) appareil (s) particulier (s)? Avez-vous réussi à obtenir un journal de tous les utilisateurs? –

+0

ok je vais essayer. les utilisateurs remarquent que les images sont écrasées en mode potrait.they obtiennent une exception d'exécution – harish

Répondre

1

Assurez-vous de demander une résolution de prévisualisation de caméra prise en charge.

Voir Camera.Parameters.getSupportedPreviewSizes pour plus de détails sur la façon d'interroger les résolutions prises en charge et de demander une résolution prise en charge avec Camera.Parameters.setPreviewSize.

0

Peut-être que vous devez désactiver la caméra de redémarrer la rotation en fixant la mise en page dans votre activité, comme ceci:

public void onCreate(Bundle savedInstanceState) { 
    ... 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
} 
0

Le problème est l'appareil est incapable de régler les paramètres de prévisualisation. Vous pouvez utiliser le code suivant pour définir les paramètres d'aperçu qui fonctionneront sur n'importe quel périphérique.

public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { 



if (isPreviewRunning) { 
    camera.stopPreview(); 
} 
try{ 
Camera.Parameters p = camera.getParameters(); 
if(p!=null){ 
List<Size> sizes = p.getSupportedPreviewSizes(); 
Size optimalSize = getOptimalPreviewSize(sizes, w, h); 
p.setPreviewSize(optimalSize.width, optimalSize.height); 
camera.setParameters(p); 

camera.setPreviewDisplay(holder);; 
camera.startPreview(); 

} 
} catch (IOException e) { 
    // TODO Auto-generated catch block 


    e.printStackTrace(); 
} 

isPreviewRunning = true; 
} 
private Size getOptimalPreviewSize(List<Size> sizes, int w, int h) { 
// TODO Auto-generated method stub 
final double ASPECT_TOLERANCE = 0.05; 
double targetRatio = (double) w/h; 
if (sizes == null) return null; 

Size optimalSize = null; 
double minDiff = Double.MAX_VALUE; 

int targetHeight = h; 

// Try to find an size match aspect ratio and size 
for (Size size : sizes) { 
double ratio = (double) size.width/size.height; 
if (Math.abs(ratio - targetRatio) > ASPECT_TOLERANCE) continue; 
if (Math.abs(size.height - targetHeight) < minDiff) { 
optimalSize = size; 
minDiff = Math.abs(size.height - targetHeight); 
} 
} 

// Cannot find the one match the aspect ratio, ignore the requirement 
if (optimalSize == null) { 
minDiff = Double.MAX_VALUE; 
for (Size size : sizes) { 
if (Math.abs(size.height - targetHeight) < minDiff) { 
optimalSize = size; 
minDiff = Math.abs(size.height - targetHeight); 
} 
} 
} 
return optimalSize; 

}

essayer.