如何存储应用程序的图像

时间:2014-07-03 16:14:01

标签: android

我在资源文件夹中有很多png图像。我需要在ImageView和Gallary的app中使用它们。 Android仅支持Bitmaps图像。那么存储文件的正确方法是什么。例如,在第一次运行应用程序时,它会将图像从png解码为bmp并将其保存在内部存储器的某个位置,是否可能?并且每个启动应用程序检查是否存在具有bmp图像的文件夹,如果存在,则使用先前解码的bmp图像。 或者还有另一种存储大量图像的方法? 任何帮助将不胜感激。谢谢 -4但答案是0。请帮忙 我不想在第一个应用启动时调用解码方法一次,而是使用保存在内部存储上的已解码的bmps。

2 个答案:

答案 0 :(得分:0)

我认为不需要解码! Universal Image Loader是一个功能强大的Android图像加载器库。它可以从drawables文件夹,资产,网址和......加载图像......这个库有现金系统。参考本教程。

https://github.com/nostra13/Android-Universal-Image-Loader

答案 1 :(得分:0)

开始于:

  1. 将最大的图像从png转换为jpeg。 Jpeg对于移动环境有一些缺点。但它确实产生了较小的图像。

  2. 尝试使用OptiPNGPNGCrush等png'reduction'工具来减少png图像大小。您通常不会在图像质量上看到明显的差异。


  3. 并且,如果这不能解决您的问题,请考虑将所有(或至少最大)的图像压缩为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,获取断言/文件的路径等。

    祝你好运。