У меня есть устройство Galaxy Note, и я написал приложение, которое захватывает изображения с камеры.
Я установил макет в альбомную ориентацию и могу получать изображения с помощью своего устройства. Проблема в том, что я запускаю ту же программу на чужом устройстве.
Программа работает так же на другом устройстве, но при сохранении картинки содержание картинки неверное. Вы видите слегка диагональные полоски вместо содержимого изображения.
Я думаю, что это результат сохранения изображения с неправильным шагом или разрешением.
Миниатюра «прослушиваемой» картинки на другом устройстве по какой-то причине вызывает сожаление.
Я пытался найти разницу между моим устройством и другим устройством, но кроме одного с разрешением 1280x800 и другого с разрешением 800x480, я не нашел никакой разницы. В обоих случаях функции «Измерение» и «Макет» имеют ориентацию 90 градусов и правильное разрешение ландшафта. В обоих случаях формат изображения - JPEG (по запросу mCamera.getParameters (). GetPictureFormat ()).
Я в тупике, я не знаю, что делать, потому что все выглядит одинаково, за исключением того, что одно устройство выдает правильный байтовый массив JPEG, а другое выдает мне правильные данные, но с неправильной ориентацией. Или так кажется.
РЕДАКТИРОВАТЬ: я обнаружил, что есть проблема, даже когда я сохраняю необработанные данные прямо в файл JPEG, поэтому не требуется отображение или декодирование. Я вижу в браузере галереи, что в файле JPEG есть артефакты, что-то не так.
Мой код для сохранения данных камеры в (JPEG) файл выглядит следующим образом:
private File onJPGPreviewFrame(byte[] data, String Name) {
FileOutputStream outStream = null;
File f = null;
try {
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
File externalRoot = Environment.getExternalStorageDirectory();
File tempDir = new File(externalRoot, Name);
tempDir.createNewFile();
outStream = new FileOutputStream(tempDir);
outStream.write(data);
outStream.close();
f = tempDir;
}
Log.d(TAG, "onPreviewFrame - wrote bytes: " + data.length);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
}
return f;
}