Android: как я могу снимать брекетинг с помощью удаленного API SonyCamera - PullRequest
0 голосов
/ 08 июня 2018

Эта проблема беспокоит меня до 1 недели.Я хочу снимать как брекетинг, но в Sony Camera API его не поддерживают.поэтому я закодировал его, как непрерывно делать 5 снимков с разными значениями (0, + 2, -2, -4, + 4), используя цикл.(используя кнопку для этого, и когда нажимаете кнопку, она должна сделать снимок 5 раз) U может видеть код ниже:
Этот код для установки скорости затвора на камере

private void setShutterSpeed(final int valofShutterSpeed) {
    new Thread() {

        @Override
        public void run() {
            try {

                JSONObject replyJson = mRemoteApi.setShutterSpeed(valofShutterSpeed);
                JSONArray resultsObj = replyJson.getJSONArray("result");
                int resultCode = resultsObj.getInt(0);
                if (resultCode == 0) {
                    takePicture();
                    Log.e(TAG, "SetSHutterSpeed: Mode success.");
                } else {

                    Log.e(TAG, "SetSHutterSpeed mode: error: " + resultCode);
                    DisplayHelper.toast(getApplicationContext(), //
                            R.string.msg_error_api_calling);
                }
            } catch (IOException e) {
                Log.e(TAG, "SetSHutterSpeed: setShutterSpeed: IOException: " + e.getMessage());
                return;
            } catch (JSONException e) {
                Log.e(TAG, "SetSHutterSpeed: setShutterSpeed: JSON format error.");
            }
        }
    }.start();
}

Этот код для съемкиpicture:

private void takePicture() {
    if (mLiveviewSurface == null || !mLiveviewSurface.isStarted()) {
        DisplayHelper.toast(getApplicationContext(), R.string.msg_error_take_picture);
        return;
    }
    new Thread() {
        @Override
        public void run() {
            try {
                JSONObject replyJson = mRemoteApi.actTakePicture();
                JSONArray resultsObj = replyJson.getJSONArray("result");
                JSONArray imageUrlsObj = resultsObj.getJSONArray(0);
                String postImageUrl = null;
                if (1 <= imageUrlsObj.length()) {
                    postImageUrl = imageUrlsObj.getString(0);                        continousShottingWithDifferentShutterValue();

                }
                if (postImageUrl == null) {
                    Log.w(TAG, "takePicture: post image URL is null.");
                    DisplayHelper.toast(getApplicationContext(), //
                            R.string.msg_error_take_picture);
                    return;
                }
                // Show progress indicator
                DisplayHelper.setProgressIndicator(SonyCameraActivity.this, false);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }.start();
}

и это для цикла:

int val, posVal = 0;
int currentShutterSpeed = 0;

private void continousShottingWithDifferentShutterValue() {

    if (val == 0) {
        currentShutterSpeed = -5;
        setShutterSpeed(currentShutterSpeed);
        val++;
    } else if (val == 1) {
        currentShutterSpeed = 5;
        setShutterSpeed(currentShutterSpeed);
        val++;
    } else if (val == 2) {
        currentShutterSpeed = -10;
        setShutterSpeed(currentShutterSpeed);
        val++;
    } else if (val == 3) {
        currentShutterSpeed = 10;
        setShutterSpeed(currentShutterSpeed);
        val++;
    } else if (val == 4) {
        setShutterSpeedVal0(0);
        posVal++;
    }
    if (posVal == 3) {
        posVal = 0;
        val = 0;
    }
}

Но когда я делаю снимок, иногда shutterSpeed ​​или takePicture получают ошибку, и цикл останавливается.

Типы ошибок: setShutterSpeed ​​IOExeption error: 500;или setShutterSpeed ​​не установлен.Кто-то работает с удаленным API Sonycamera и знает, как это исправить или сделать снимок 5 раз с другим значением.буду благодарен за любую идею.Спасибо

1 Ответ

0 голосов
/ 11 июня 2018

Я решил проблему.это была ошибка значения скорости затвора.Как вы знаете, в Sony Camera Api значение выдержки отсутствует, и я написал его как в настройках камеры.и JSON-запрос и ответ не совпадают, поэтому он показывает ошибку 500. Если кто-то хочет использовать значение выдержки: вот оно:

String shutterValue[] = {"30\"", "25\"", "20\"", "15\"", "13\"", "10\"", "8\"", "6\"",
        "5\"", "4\"", "3.2\"", "2.5\"", "2\"", "1.6\"", "1.3\"", "1\"", "0.8\"", "0.6\"", "0.5\"",
        "0.4\"", "1/3", "1/4", "1/5", "1/6", "1/8", "1/10", "1/13", "1/15", "1/20", "1/25", "1/30",
        "1/40", "1/50", "1/60", "1/80", "1/100", "1/125", "1/160", "1/200", "1/250", "1/320", "1/400",
        "1/500", "1/640", "1/800", "1/1000", "1/1250", "1/1600", "1/2000", "1/2500", "1/3200", "1/4000"};
...