我在资源文件夹中有很多png图像。我需要在ImageView和Gallary的app中使用它们。 Android仅支持Bitmaps图像。那么存储文件的正确方法是什么。例如,在第一次运行应用程序时,它会将图像从png解码为bmp并将其保存在内部存储器的某个位置,是否可能?并且每个启动应用程序检查是否存在具有bmp图像的文件夹,如果存在,则使用先前解码的bmp图像。 或者还有另一种存储大量图像的方法? 任何帮助将不胜感激。谢谢 -4但答案是0。请帮忙 我不想在第一个应用启动时调用解码方法一次,而是使用保存在内部存储上的已解码的bmps。
答案 0 :(得分:0)
我认为不需要解码! Universal Image Loader是一个功能强大的Android图像加载器库。它可以从drawables文件夹,资产,网址和......加载图像......这个库有现金系统。参考本教程。
答案 1 :(得分:0)
开始于:
将最大的图像从png转换为jpeg。 Jpeg对于移动环境有一些缺点。但它确实产生了较小的图像。
尝试使用OptiPNG或PNGCrush等png'reduction'工具来减少png图像大小。您通常不会在图像质量上看到明显的差异。
并且,如果这不能解决您的问题,请考虑将所有(或至少最大)的图像压缩为zip文件以存储在assets /目录中,并在首次运行时将其打开到sdcard文件夹。 / p>
完成此操作后,您需要按如下方式填充ImageView:
Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
ImageView myImage = (ImageView) findViewById(R.id.imageviewTest);
myImage.setImageBitmap(myBitmap);
这是一种痛苦,但如果你别无选择..
资产/ zip文件的提取如下:
public void unzipFromAssets(String zipFileInAssets, String destFolder) {
FileInputStream fin = new FileInputStream(zipFileInAssets);
ZipInputStream zin = new ZipInputStream(fin);
ZipEntry ze = null;
while ((ze = zin.getNextEntry()) != null) {
if(ze.isDirectory()) {
File f = new File(_location + ze.getName());
if(!f.isDirectory()) {
f.mkdirs();
}
} else {
FileOutputStream fout = new FileOutputStream(destFolder + ze.getName());
for (int c = zin.read(); c != -1; c = zin.read()) {
fout.write(c);
}
zin.closeEntry();
fout.close();
}
}
zin.close();
}
你需要对这个方法有所帮助 - try..catch,获取断言/文件的路径等。
祝你好运。