Android: camera.setParameter вопрос - PullRequest
       5

Android: camera.setParameter вопрос

0 голосов
/ 22 января 2011

При реализации SurfaceHolder.Callback некоторые онлайновые учебные пособия предлагают (на самом деле я обнаружил, что именно это Google написал в демоверсии API)

    public void surfaceChanged(SurfaceHolder holder, int format, int width,
            int height) {
        Parameters params = camera.getParameters();
        params.setPreviewSize(width, height);
        camera.setParameters(params);
        camera.startPreview();
    }

Однако это не практично.Как и на реальном устройстве, подобный код, скорее всего, вызовет исключение на camera.setParameter(params), поскольку указанные высота и ширина вряд ли поддерживаются устройством.

Прочитав некоторые вопросы и ответы по stackoverflow, я понял, почему этобыл не прав.В этих сообщениях говорилось, что я должен найти тот, который лучше всего подходит для экрана.Затем я решил напечатать таблицу размеров, которые поддерживает мой телефон (HTC Magic, android 2.1), используя params.getSupportedPreviewSizes();.Получил их, независимо от ориентации телефона.

 h:720  , w:1280 
 h:480  , w:800  
 h:480  , w:720  
 h:480  , w:640  
 h:432  , w:576  
 h:320  , w:480  
 h:240  , w:400  
 h:288  , w:384  
 h:288  , w:352  
 h:240  , w:320  
 h:272  , w:272  
 h:240  , w:240  
 h:160  , w:240  
 h:144  , w:176  

В конце концов, я понятия не имею, как найти наиболее подходящий размер для экрана.И я теперь очень смущен тем, что является правильной программой.Я думаю, что эта программа должна быть довольно распространенной, и мне не нужно придумывать ее самому.

Кто-нибудь может мне помочь и выложить хорошо написанный public void surfaceChanged образец здесь?

Спасибовы!

1 Ответ

0 голосов
/ 22 января 2011

Все, что я знаю, это то, что ширина и высота, которые передаются в качестве аргумента для обратного вызова, это SurfaceHolder, вычисляемый во время выполнения. Так что вы вряд ли получите исключение.

...