Я пытаюсь получить RGB из растрового изображения и сохранить JPEG изображение в то же время, когда JPEG байтовый массив доступен из ByteBuffer
в андроида Camera2 апи здесь мой код:Выдавать нулевую ссылку на объект fileoutputstream.close?
private class ImageSaver implements Runnable {
private final Image mImage;
private ImageSaver(Image image) {
mImage = image;
}
@Override
public void run() {
// TODO Auto-generated method stub
ByteBuffer byteBuffer = mImage.getPlanes()[0].getBuffer();
byte[] bytes = new byte[byteBuffer.remaining()];
byteBuffer.get(bytes);
final byte[] myBytes = bytes;
Thread getRGB = new Thread() {
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
Bitmap bmp = BitmapFactory.decodeByteArray(myBytes, 0, myBytes.length);
for(int y=0; y<bmp.getHeight();y++) {
for(int x=0; x<bmp.getWidth();x++) {
int c = bmp.getPixel(x, y);
pixel++;
red += Color.red(c);
green += Color.green(c);
blue += Color.blue(c);
}
}
}
};
getRGB.start();
FileOutputStream fileOutputStream = null;
try {
fileOutputStream = new FileOutputStream(mImageFile);
fileOutputStream.write(bytes);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
mImage.close();
if(fileOutputStream!=null)
{
try {
fileOutputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
здесь исключения теперь я получение
03-13 19: 26: 26,199: E/AndroidRuntime (19715): FATAL ИСКЛЮЧЕНИЕ: Мой Camera2 Basic App 03-13 19: 26: 26,199: E/AndroidRuntime (19715): Процесс: ком .example.mycamera2basicapp, PID: 19715 03-13 19: 26: 26.199: E/AndroidRuntime (19715): java.lang.NullPointerException: file == null 03-13 19: 26: 26.199: E/AndroidRuntime (19715): at java.io.FileOutputStream. (FileOutputStream.java:84) 03-13 19: 26: 26.199: E/AndroidRuntime (19715): в java .io.FileOutputStream. (FileOutputStream.java:72) 03-13 19: 26: 26.199: E/AndroidRuntime (19715): at com.example.mycamera2basicapp.MainActivity $ ImageSaver.run (MainActivity.java:145) 03 -13 19: 26: 26.199: E/AndroidRuntime (19715): at android.os.Handler.handleCallback (Handler.java:739) 03-13 19: 26: 26.199: E/AndroidRuntime (19715): у android. os.Handler.dispatchMessage (Handler.java:95) 03-13 19: 26: 26.199: E/AndroidRuntime (19715): at android.os.Looper.loop (Looper.java:211) 03-13 19: 26: 26.199: E/AndroidRuntime (19715): at android.os.HandlerThread.run (HandlerThread.java:61)
здесь, где я инициализация mImageFile:
@Override
public void onCaptureStarted(CameraCaptureSession session, CaptureRequest request, long timestamp,
long frameNumber) {
// TODO Auto-generated method stub
super.onCaptureStarted(session, request, timestamp, frameNumber);
createImageGallery();
try {
mImageFile = createImageFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
и createImageFile() является простой функцией, которая создает файл JPEG:
private File createImageFile() throws IOException {
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = "Jpeg_Image_"+timeStamp+"_";
File image = File.createTempFile(imageFileName, ".jpg", mJpegGalleryFolder);
mImageFileLocation = image.getAbsolutePath();
return image;
}
, когда я комментирую линию
pixel++;
red += Color.red(c);
green += Color.green(c);
blue += Color.blue(c);
файл сохраняется без ошибок. Мое намерение - получить RGB и сохранить изображение в то же время, может кто-то помочь мне в решении этой проблемы или показать мне другое направление, где я могу сохранить изображение и использовать RGB тоже.
Ну, очевидно, первый блок улов был введен, так 'fileOutputStream' равно нулю. Это легко разрешимо с проверкой if null, прежде чем вы закроете свои ресурсы. –
теперь мне это java.lang.NullPointerException: попытка вызвать виртуальный метод 'android.hardware.camera2.CaptureRequest $ Builder android.hardware.camera2.CameraDevice. createCaptureRequest (int) 'на ссылке нулевого объекта –
как вы определили mImageFile? вызывает вызов fileOutputStream = new FileOutputStream (mImageFile); создает экземпляр fileOutputStream? – harshitpthk