2012-01-05 20 views
9

Zbudowałem niestandardową aplikację Camera i próbuję zmienić rozdzielczość obrazu, który został zrobiony. Czytałem, że może to zależeć od telefonu lub wersji Androida?Zestaw aparatu Android Rozdzielczość

Wiem, że są ustawione przy użyciu setParameters, ale nie wiem, jak ustawić rezolucję dla wszystkich telefonów. Chciałem, żeby to było trochę małe, ponieważ moje aplikacje zamykają się inaczej. Kiedy używam zdjęcia testowego o wymiarach 640x348, działa to tak, że rozmiar/rezolucja byłyby idealne.

Może być łatwiej używać setPictureSize?

public void surfaceCreated(SurfaceHolder holder) { 
    // TODO Auto-generated method stub 
    camera = Camera.open(); 
    try { 
      Camera.Parameters parameters = camera.getParameters(); 
      if (this.getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE) { 
       parameters.set("orientation", "portrait"); 
       camera.setDisplayOrientation(90); 
       // Uncomment for Android 2.0 and above 
       parameters.setRotation(90); 
      } else { 
       parameters.set("orientation", "landscape"); 
       camera.setDisplayOrientation(0); 
       // Uncomment for Android 2.0 and above 
       parameters.setRotation(0); 
      } 
      camera.setParameters(parameters); 
      camera.setPreviewDisplay(holder); 
     } catch (IOException exception) { 
     camera.release(); 
     } 
     camera.startPreview(); 
    } 

Odpowiedz

16

Nie ma setResolution() tylko setPictureSize(). Użyj opcji getSupportedPictureSizes() na Camera.Parameters, aby znaleźć żądany rozmiar, lub użyj tej informacji, aby wypełnić ListView lub Spinner lub coś dla użytkownika, aby wybrać żądany rozmiar. Here is a sample project niedawno zaktualizowano do korzystania z getSupportedPictureSizes(), aby znaleźć najmniejszą obsługiwaną rozdzielczość i użyć jej.

+0

OK, czy możesz mi pokazać, jak zaimplementować, że próbowałem uruchomić twój kod z github, ale właśnie dostaję błędy od eclipse? – Matt

+0

Również kod będzie sprawdzać obsługiwane rozmiary, a następnie zapisać go jako najmniejszy, czy potrzebuje więcej? – Matt

+0

@Matt: Nie mogę ci pomóc z "błędami z zaćmienia", jeśli nie chcesz powiedzieć, jakie są błędy. I nie mam pojęcia, czym jest "więcej", więc nie mogę powiedzieć, czy ten kod tego wymaga. – CommonsWare

10

To zbyt proste, aby przechwycić obraz z wysokiej jakości, tutaj można ustawić własną rozdzielczość:

mCamera = Camera.open(); 
Camera.Parameters params = mCamera.getParameters(); 

// Check what resolutions are supported by your camera 
List<Size> sizes = params.getSupportedPictureSizes(); 

// Iterate through all available resolutions and choose one. 
// The chosen resolution will be stored in mSize. 
Size mSize; 
for (Size size : sizes) { 
    Log.i(TAG, "Available resolution: "+size.width+" "+size.height); 
     mSize = size; 
    } 
} 

Log.i(TAG, "Chosen resolution: "+mSize.width+" "+mSize.height); 
params.setPictureSize(mSize.width, mSize.height); 
mCamera.setParameters(params); 

nadzieję, że to wszystko będzie wam pomóc.

+0

Istnieje lista rezolucji i można wybrać zakres. Najwyższa rozdzielczość zostanie wybrana, jeśli wstawisz przerwę; oświadczenie dotyczące pierwszego znalezienia w tej pętli, a także powinieneś unikać/sprawdzać wyjątek środowiska wykonawczego i wyjątek OutOfMemory: if (size.width> = 600 && size.width <= 800) { mSize = size; przerwa; } –

+0

@AbhinavSaxena, tak, nawet my możemy wybrać dowolną z nich zgodnie z wymaganiami. –

+0

To nie było zapytanie zamiast rozwiązania. Dodałem moje rozwiązanie w komentarzach. Możesz modyfikować w swojej odpowiedzi. Dzięki. –

Powiązane problemy