gpt4 book ai didi

java - 加载较小版本的图像以提高 Android 性能

转载 作者:行者123 更新时间:2023-12-01 16:55:07 25 4
gpt4 key购买 nike

我有一个图像(1.84MB)要加载,我想加载它的较小版本以赢得时间,我也不想存储它的较小版本。仅供引用,这些文件位于可移动SD卡中,我需要加载很多,这就是为什么我想优化它,因为目前需要太多时间......

我红色了load large bitmaps文档。我之前使用 Glide 来加载完整图像。

经过一些测试,我得到了这个统计数据:滑动负载 (1.84MB): 244'361'667 ns位图加载(比例 1):370'811'511 ns位图加载(比例 4):324'403'386 ns位图加载(比例 8):269'223'073 ns缩略图加载:245'250'729 ns

这意味着我在加载小 8 倍的图像时使用位图的时间稍长,但我不明白为什么。

这是我的代码:

滑动加载:

private void loadGlide(Car c) {
DocumentFile makerDir = contentDirectory.findFile(getMakerById(c.getMakerId()).getName());
DocumentFile carPhoto = makerDir.findFile(c.getFilename());
if(carPhoto == null) {
Log.d("test", c.getFilename() + " problem");
} else {
Log.d("test", carPhoto.exists() + "");
}
ImageView img = new ImageView(this);
img.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
goToEdit(c.getId());
}
});
// standard loading
Glide.with(img.getContext()).load(carPhoto.getUri()).into(img);
resultList.addView(img);

}

加载位图:

private void scaledLoad(Car c, int scale) {
DocumentFile makerDir = contentDirectory.findFile(getMakerById(c.getMakerId()).getName());
DocumentFile carPhoto = makerDir.findFile(c.getFilename());
Bitmap b = null;
//Decode image size
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = scale;
// convert DocumentFile to File
File image = new File("image_path");
FileInputStream fis = null;
try {
fis = new FileInputStream(image);
b = BitmapFactory.decodeStream(fis, null, options);
fis.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
if(b != null) {
ImageView img = new ImageView(this);
img.setImageBitmap(b);
resultList.addView(img);
}

}

我还尝试加载thumbnails :

private void loadThumbnail() {
Bitmap ThumbImage = ThumbnailUtils.extractThumbnail(BitmapFactory.decodeFile("filepath"),
816, 612);
ImageView img = new ImageView(this);
img.setImageBitmap(ThumbImage);
resultList.addView(img);

}

如果您愿意,这里是测试代码:

long t0 = System.nanoTime();
scaledLoad(c, 1);
// or
loadGlide(c);
long t1 = System.nanoTime();
t1 = (t1-t0);
Log.d("test", "t1:" + t1);

如果您可以回答我或给我任何其他替代方法来快速从 SD 卡加载缩小的图像,欢迎您。提前致谢。

最佳答案

如果您使用 Glide,则可以使用函数“override(width,height)”将调整大小的图像加载到 imageView 中。

此博客解释了如何操作:https://futurestud.io/tutorials/glide-image-resizing-scaling#imageresizingwithoverridexy

关于java - 加载较小版本的图像以提高 Android 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61602646/

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