Почему сохранение растрового изображения занимает так много времени?
Итак, у меня в Google Glass есть приложение, которое делает снимок, затем преобразует его в оттенки серого и перезаписывает исходное изображение в памяти:
private void rGBProcessing (final String picturePath, Mat image) {
//BitmapFactory Creates Bitmap objects from various sources,
//including files, streams, and byte-arrays
Bitmap myBitmapPic = BitmapFactory.decodeFile(picturePath);
image = new Mat(myBitmapPic.getWidth(), myBitmapPic.getHeight(), CvType.CV_8UC4);
Mat imageTwo = new Mat(myBitmapPic.getWidth(), myBitmapPic.getHeight(), CvType.CV_8UC1);
Utils.bitmapToMat(myBitmapPic, image);
Imgproc.cvtColor(image, imageTwo, Imgproc.COLOR_RGBA2GRAY);
Utils.matToBitmap(imageTwo, myBitmapPic);
FileOutputStream out = null;
try {
out = new FileOutputStream(picturePath);
myBitmapPic.compress(Bitmap.CompressFormat.PNG, 100, out);
// PNG is a lossless format, the compression factor (100) is ignored
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (out != null) {
out.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
Серое растровое изображение не полностью отображается в памяти с помощью средства просмотра фотографий Windows до тех пор, пока Google Glass не будет отключен от компьютера-отладчика и затем снова подключен. Иногда можно просмотреть половину изображения в градациях серого, но это все. Я изменил код, чтобы показать изображение, а не сохранять его во внутренней памяти, и это было быстро и успешно, что заставляет меня думать, что проблема заключается в чтении изображения в градациях серого во внутреннюю память:
FileOutputStream out = null;
try {
out = new FileOutputStream(picturePath);
myBitmapPic.compress(Bitmap.CompressFormat.PNG, 100, out);
// PNG is a lossless format, the compression factor (100) is ignored
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (out != null) {
out.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
Любые объяснения или предложения приветствуются. Благодарю.