gpt4 book ai didi

java - 将图像保存到内部存储的更快方法

转载 作者:太空宇宙 更新时间:2023-11-04 10:20:12 25 4
gpt4 key购买 nike

我的应用程序在加载时会在内部存储中保存一些图像。问题在于,应用程序使用的是针对这种情况的最常见代码,即在保存图像之前对其进行压缩,但此压缩过程需要很长时间才能处理。例如,如果要加载 5 张图片,则应用程序需要大约 30 秒来加载并打开主屏幕。 30 秒对于打开应用程序来说太长了。我保存图像的代码如下:

public static final boolean savePngLocalStorage(String fileName, Bitmap bitmap, Context context) throws IOException {
BufferedOutputStream bos = null;
Bitmap tmp = null;
try {
bos = new BufferedOutputStream(context.openFileOutput(fileName, Context.MODE_PRIVATE)); //他アプリアクセス不可
tmp = bitmap.copy(Config.ARGB_8888, true);
return tmp.compress(Bitmap.CompressFormat.PNG, 100, bos);
} finally {
if (tmp != null) {
tmp.recycle();
tmp = null;
}
//
try {
bos.close();
} catch (Exception e) {
//IOException, NullPointerException
}
}
}

使用调试,我意识到 tmp.compress 命令是需要一些时间来处理的命令。

我尝试使用以下代码而不压缩图像。速度有点快了。

HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.connect();
ContextWrapper c = new ContextWrapper(MainActivity.this);
File path = c.getFilesDir();
String fileName = imageIdArray[i] + ".png";
InputStream input = new BufferedInputStream(url.openStream());
OutputStream output = new FileOutputStream(path + "/" + fileName); // "data/data/[package_name]/files/sample.png"
byte data[] = new byte[1024];
long total = 0;
int count;
while ((count = input.read(data)) != -1) {
total += count;
output.write(data, 0, count);
}
output.flush();
output.close();
input.close();

还有其他方法可以更快地保存图像吗?

最佳答案

        FileOutputStream out = null;
String path = setOutputFilePath();
try {
out = new FileOutputStream(path);
croppedBitmap2.compress(Bitmap.CompressFormat.JPEG, 100, out); // bmp is your Bitmap instance
// PNG is a lossless format, the compression factor (100) is ignored

LOGGER.debug("Saving image on the absolute path folder!");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (out != null) {
out.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}

关于java - 将图像保存到内部存储的更快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51261996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com