【问题标题】:Android: Get integer value of images in SD storage?Android:获取 SD 存储中图像的整数值?
【发布时间】:2018-11-30 15:05:26
【问题描述】:

我希望将 SD 卡存储中的图像添加到一个整数数组列表中。

目前我可以显示我的可绘制文件夹中的图像,因为它们(不知何故)采用 int 格式,例如: Log.d("MyTag", R.drawable.ic_launcher_background));目前返回我 2131230825。

我可以通过以下方式访问我的 SD 卡图像:/storage/emulated/0/Android/data/com.hangr.hangr/files/Pictures/Hangr_20181119__153130.jpg(字符串格式)。我也可以用“Bitmap myBitmap = BitmapFactory.decodeFile(f.get(i));”来制作位图(位图格式)。

知道如何将这些字符串/位图形式传递给 int 对象吗?

package com.myapp.myapp;
imports ...
public class test extends Activity {

    public ArrayList<Integer> mThumbIds = new ArrayList<>();

    File[] listFile;
    ArrayList<String> f = new ArrayList<String>();// list of file paths
    ArrayList<Bitmap> myBitmapArrayList = new ArrayList<Bitmap>();// list of bitmaps

    @Override
      public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.test);

        getFromSdcard();

        GridView gridview = (GridView) findViewById(R.id.gridview);
        gridview.setAdapter(new ImageAdapter(this));

        // Test: adding drawable items to my interger list
        mThumbIds.add(R.drawable.logo);   
    }

    //************** important function that calls from my SD card
    public void getFromSdcard(){
        File file = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
        if (file.isDirectory()) {
            listFile = file.listFiles();
            for (int i = 0; i < listFile.length; i++)
            {
                f.add(listFile[i].getAbsolutePath());
                Bitmap myBitmap = BitmapFactory.decodeFile(f.get(i));
                fml.add(myBitmap);
            }
        }
        //************** TESTING THE VALUE OF MY VARIABLES
        Log.d("MyTag", "File file " + file); ///storage/emulated/0/Android/data/com.myapp.myapp/files/Pictures
        Log.d("MyTag", "File length " + file.isDirectory()); //true
        Log.d("MyTag", "First element in f: " + f.get(0)); ///storage/emulated/0/Android/data/com.myapp.myapp/files/Pictures/20181119__153130.jpg

        Log.d("MyTag", "All the Bitmaps? " + myBitmapArrayList); //returns huge list of bitmaps, i.e. android.graphics.Bitmap@39bd71a
        Log.d("MyTag", "Drawables? " +  (R.drawable.ic_launcher_background)); //returns me 2131230825

    }



    public class ImageAdapter extends BaseAdapter {

    //************** code to zoom in on images, from https://www.androidbegin.com/tutorial/android-gridview-zoom-images-animation-tutorial/


    public View getView(final int position, View convertView, ViewGroup                 parent) {

            final ImageView imageView;
            if (convertView == null) {
                imageView = new ImageView(mContext);
                imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            } else {
                imageView = (ImageView) convertView;
            }

            imageView.setImageResource(mThumbIds.get(position));
           // imageView.setImageListener(bottoms_Listener);
            imageView.setTag(mThumbIds.get(position));
            imageView.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View arg0) {
                    int id = (Integer) arg0.getTag();
                    zoomImageFromThumb(arg0, id);
                }
            });

            return imageView;
        }

        private void zoomImageFromThumb...


}

在你因为没有“尝试”而生我的气之前,我有。最困难的部分是从设备存储中提取并访问其中的照片。我只是不明白为什么可绘制图像是整数以及为什么没有看似简单的方法可以将图像转换为整数以供类似用途。

【问题讨论】:

  • R.whatever 是持有对应用程序资源的整数引用的类。然后,Android 使用这些引用来加载实际图像。 SD 卡内部存储上的图像不是资源,也没有整数引用。
  • @TheWanderer Ahhh 好的,猜猜这是有道理的。谢谢!

标签: java android arraylist android-bitmap


【解决方案1】:

你不能得到他们的整数引用,因为他们没有。

R.whateverR.drawableR.stringR.xml 等)是由 Android Studio 生成的类,其中包含名称与您的资源对应的整数字段。当您使用getDrawable() 之类的内容时,Android 会使用您传递的整数来查找相应的资源并将其作为图像加载。这一切都是因为资源被编译并存储在 APK 本身中,并且无法通过路径访问。

但是,内部存储或 SD 卡上的图像不是资源。它们具有可直接访问的路径,并且不在任何 APK 中。 Android 不会给他们整数 ID,因为他们不需要它们,而且它不是这样工作的。

要从存储中获取图像,您需要使用路径。

【讨论】:

    猜你喜欢
    • 2012-03-13
    • 2011-07-29
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 2011-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多