Я разрабатываю приложение для камеры в основном как часть приложения для обмена сообщениями для прикрепления изображений и т.д. Приложение должно работать для >= SDK 2.2 и:
Я не могу использовать камеру Android по умолчанию, насколько мне бы хотелось, потому что:
-
Характер приложения диктует, что изображение не должно сохраняться на диске, и некоторые OEM-производители (Samsung) любят делать это, не давая вам выбора.
-
Я не могу назвать намерение, которое любое другое приложение для камеры может перехватить, потому что тогда это приложение может сохранить изображение.
Моя текущая проблема связана с тем, что камера Android, по-видимому, ненавидит себя в портретной ориентации. В частности, после некоторого копания я контролирую дисплей и, при вращении, вызываю setDisplayOrientation(90)
. Это работает, но размеры поверхности также необходимо изменить, и это должно быть сделано в поддерживаемых размерах или параметр отключает приложение.
Я делаю это с другим фрагментом SO, который нашел здесь (метод getBestPreviewSize()
), но у него есть одна вопиющая проблема, в которой я не могу поверить, что я Не нашел никого другого.
Часть жизненного цикла takePicture
включает вызов обратного вызова изображения PostView
. Это показывает неподвижное изображение текущего приостановленного изображения SurfaceView
, которое будет возвращено через byteArray для обратного вызова raw и/или jpeg. Моя проблема в том, что этот образ все еще искажен на нескольких, казалось бы, случайных тестовых устройствах! Таким образом, поведение - это то, что пользователь видит динамическое изображение камеры в идеальном соотношении сторон 4: 3 до тех пор, пока они не сделают снимок, и изображение, которое они представляют, зажато. Обратите внимание, что сам массив байтов является правильным, и когда я создаю Bitmap
в конечной точке обмена сообщениями, он отображается нормально, но это все еще проблема.
Я не вижу, как я могу изменить отображение неподвижного изображения в этот момент. Может ли кто-нибудь помочь мне с этим?