Как оптимизировать этот кусок кода? Метод saveImage
занимает около минуты.
class ObrolSimpleHost extends SimpleCameraHost {
private final String[] SCAN_TYPES = {"image/webp"};
private Context context = null;
public ObrolSimpleHost(Context _ctxt) {
super(_ctxt);
this.context = getActivity();
}
@Override public void saveImage(PictureTransaction xact, Bitmap bitmap) {
File photo = getPhotoPath();
if (photo.exists()) {
photo.delete();
}
try {
FileOutputStream fos = new FileOutputStream(photo.getPath());
bitmap.compress(Bitmap.CompressFormat.WEBP, 70, fos);
fos.flush();
fos.getFD().sync();
if (scanSavedImage()) {
MediaScannerConnection.scanFile(context, new String[]{photo.getPath()}, SCAN_TYPES, null);
}
} catch (java.io.IOException e) {
handleException(e);
}
}
@Override public void saveImage(PictureTransaction xact, byte[] image) {
// do nothing
}
}
Я звоню ObrolSimpleHost
из CameraFragment:
PictureTransaction xact = new PictureTransaction(getHost());
xact.needBitmap(true);
takePicture(xact);
ByteArrayOutputStream
, затем конвертировать вbyte[]
, а затем записыватьbyte[]
вFileOutputStream
. Просто передайтеFileOutputStream
вcompress()
. Если ничего другого, это поможет с управлением памятью. - person CommonsWare   schedule 05.08.2014flush()
FileOutputStream
непосредственно передsync()
. - person CommonsWare   schedule 05.08.2014bitmap.compress(Bitmap.CompressFormat.WEBP, 70, fos);
Один из вариантов, который я могу рассмотреть, - это уменьшить размер изображения. Знайте, размер изображения на моем устройстве превышает 2–3 МБ. Вопрос в том, как уменьшить сам этотbitmap
, чтобы конечное изображение было меньше и чтобы процесс сжатия был быстрее? - person Kamol Mavlonov   schedule 07.08.2014createScaledBitmap()
наBitmap
, я думаю. Я лично с этим не играл. - person CommonsWare   schedule 07.08.2014createScaledBitmap()
. - person CommonsWare   schedule 08.08.2014