старый пост, но это говорит о подобной проблеме, которая у меня есть, так что я мог бы также ответить на часть я знаю :)
Вы, вероятно, делают это неправильно. Я предлагаю вам использовать обратный вызов JPEG для хранения изображений:
mCamera.takePicture(null, null, callbackJPEG);
Таким образом, вы получите данные JPEG в рутину, которые можно хранить в файле неизмененном:
final Camera.PictureCallback mCall = new Camera.PictureCallback()
{
@Override
public void onPictureTaken(byte[] data, Camera camera)
{
//Needs <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
File sdCard = Environment.getExternalStorageDirectory();
File file = new File(sdCard, "pic.jpg");
fil = new FileOutputStream(file);
fil.write(data);
fil.close();
}
}
Насколько черный картинка идет, я обнаружил, что размещение простого Thread.sleep(250)
между camera.startPreview()
и camera.takePicture()
позаботится об этой конкретной проблеме на моем Galaxy Nexus. Я понятия не имею, зачем нужна эта задержка. Даже если я добавлю camera.setOneShotPreviewCallback()
и позвоню camera.takePicture()
из обратного вызова, изображение выходит черным, если я не задерживаю ... О, и задержка - это не просто «некоторая» задержка. Это должно быть довольно долгое значение. Например, 250ms
иногда работает, иногда не на моем телефоне.
Теперь я борюсь с той же проблемой. И мое устройство - Galaxy Nexus.Удалось ли вам найти рабочее решение? –
Получали ли вы абсолютно черные фотографии на других устройствах? –
Рабочее решение описано в ответе. Да, проблема была подтверждена пользователями других устройств. – velis