Поэтому у меня есть приложение на 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 Photo Viewer, пока 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();
}
}
Любых объяснения или предложения приветствуются , Благодарю.
«Почему сохранение растрового изображения занимает так много времени?» - используйте Traceview и узнайте. «Серый растровый рисунок не полностью отображается в памяти с помощью Windows Photo Viewer до тех пор, пока Google Glass не будет отключен от отладочного компьютера, а затем снова подключен» - используйте «MediaScannerConnection» и «scanFile()», чтобы получить файл, индексированный с помощью ' MediaStore'. «Иногда можно просмотреть половину изображения в оттенках серого, но это все» --call 'getFD(). Sync()' в 'FileOutputStream' после вызова' flush() ', но прежде чем вы вызовете' close() '. – CommonsWare