2015-12-14 6 views
2

Я написал несколько Android-кодексов, я в основном делал снимок со встроенной камерой, сохраняю его, а затем попытаюсь загрузить сохраненный файл, чтобы с ним что-то делать.Чтение изображения после написания

Camera camera = mPreview.getmCameraInstance(); 
Camera.PictureCallback pictureCallback = 
    GetPictureCallback(mPreview.getmCameraInstance()); 
camera.takePicture(null, null, pictureCallback); 
Mat image = Highgui.imread(String.valueOf(file)); //Load Image here 

Однако мое приложение выходит из строя, потому что оно не найдет файл в строке, где я загружаю свое изображение. Я не понимаю этого, потому что думал, что мой код будет выполняться последовательным образом, а затем takePicture(...), в котором я сохраню свой файл, уже будет выполнен.

Можете ли вы мне помочь?

EDIT

Когда я положил Thread.sleep(100) раньше, я могу открыть файл, так как он был успешно записан в то время.

+0

@MorrisonChang Можете ли вы сказать мне решение, как я могу ждать моего файла писать? – PKlumpp

+0

Его ничем не отличается от onClickListener для кнопки –

ответ

1

Вам нужно подождать, пока ваш обратный вызов не будет вызван, чтобы прочитать изображение.

Что такое GetPictureCallback? Если это ваш собственный код, а затем переместить изображение чтения в генерируемый обратного вызова ... если нет, то вы можете сделать что-то вроде этого:

Camera camera = mPreview.getmCameraInstance(); 
final Camera.PictureCallback otherPictureCallback = 
    GetPictureCallback(mPreview.getmCameraInstance()); 
camera.takePicture(null, null, new Camera.PictureCallback { 
    void onPictureTaken(byte[] data, Camera camera) { 
     otherPictureCallback.onPictureTaken(data, camera); 
     Mat image = Highgui.imread(String.valueOf(file)); //Load Image here  
    } 
}); 
+0

Это хорошая идея! Я предполагаю, что нет такого способа «ожидания» для выполнения обратного вызова, например, для ожидания потока с '.join()'? – PKlumpp

+0

Не автоматический путь. – Buddy