У меня есть несколько вопросов о работе с большими растровыми изображениями, я не смог найти ответ по темам, которые я нашел, где эта проблема обсуждалась до сих пор.
У меня есть Nexus S, который, когда я снимаю изображение с классом hardware.Camera, вот так:
Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() {
public void onPictureTaken(byte[] imageData, Camera c) {
if (imageData != null) {
BitmapFactory.decodeByteArray(imageData, 0, imageData.length, options);
}
}
};
Имея в виду, что изображение 5MPixels, приложение в точкеdecodeByteArray вылетает.Поэтому я подумал, что если это произойдет, то как это будет сделано в приложении «Камера» на Android.
Я скачал исходный код и там нашел метод makeBitmap: http://www.java2s.com/Open-Source/Android/android-platform-apps/Gallery/com/android/camera/Util.java.htm
Поэтому я изменил свой обратный вызов на использование makeBitmap:
Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() {
public void onPictureTaken(byte[] imageData, Camera c) {
if (imageData != null) {
Bitmap bitmap = Utils.makeBitmap(imageData, 50 * 1024);
}
}
};
Итак, я взял этометод и используется в моем приложении.Мало того, что изображение, которое я создаю этим методом, имеет низкое качество, но также, если я увеличу количество пикселей (50 * 1024), у меня возникнет еще одна проблема OutOfMemory.
Итак, мой вопрос: если я хочу использовать большие растровые изображения, а под большим я имею в виду PNG с альфа-слоями размером около 500x300, как я могу это сделать?Как на самом деле происходит создание большого изображения в приложении Android Camera?
Спасибо!