Android:如何将从库中选择的照片设置为位图

时间:2015-04-22 16:43:32

标签: android gallery photo

我要求用户通过代码作为监听器访问图库:

#include "pugi/pugixml.hpp"

#include <iostream>
#include <string>
#include <map>

int main()
{
    pugi::xml_document doca, docb;
    std::map<std::string, pugi::xml_node> mapa, mapb;
    std::map<std::string, std::string> tagMap {{"1", "data"}, {"2", "entry"}, {"3", "id"}, {"4", "content"}};

    if (!doca.load_file("a.xml") || !docb.load_file("b.xml")) {
        std::cout << "Can't find input files";
        return 1;
    }

    for (auto& node: doca.child(tagMap[1]).children(tagMap[2])) {
        const char* id = node.child_value(tagMap[3]);
        mapa[id] = node;
    }

    for (auto& node: docb.child(tagMap[1]).children(tagMap[2])) {
        const char* idcs = node.child_value(tagMap[3]);
        if (!mapa.erase(idcs)) {
            mapb[idcs] = node;
        }
    }
}

但是,我对如何将变量设置为所选照片感到困惑。

在选择照片时,我会将代码放在哪里设置变量?

谢谢:)

4 个答案:

答案 0 :(得分:13)

首先,您必须覆盖 // Redefine basic properties of the build info object clientConfig.setIncludeEnvVars(true) clientConfig.info.addEnvironmentProperty('MERCURIAL_URL', "WHATEVER") clientConfig.info.setBuildName('new-strange-name') clientConfig.info.setBuildNumber('' + new java.util.Random(System.currentTimeMillis()).nextInt(20000)) } 以获取文件所选图像的uri

onActivityResult

然后定义@Override protected void onActivityResult(int requestCode, int resultCode, Intent intent) { if (requestCode == SELECT_PHOTO) { if (resultCode == RESULT_OK) { if (intent != null) { // Get the URI of the selected file final Uri uri = intent.getData(); useImage(uri); } } super.onActivityResult(requestCode, resultCode, intent); } } 以使用图像

useImage(Uri)

答案 1 :(得分:10)

你可以这样做。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    // Here we need to check if the activity that was triggers was the Image Gallery.
    // If it is the requestCode will match the LOAD_IMAGE_RESULTS value.
    // If the resultCode is RESULT_OK and there is some data we know that an image was picked.
    if (requestCode == LOAD_IMAGE_RESULTS && resultCode == RESULT_OK && data != null) {
        // Let's read picked image data - its URI
        Uri pickedImage = data.getData();
        // Let's read picked image path using content resolver
        String[] filePath = { MediaStore.Images.Media.DATA };
        Cursor cursor = getContentResolver().query(pickedImage, filePath, null, null, null);
        cursor.moveToFirst();
        String imagePath = cursor.getString(cursor.getColumnIndex(filePath[0]));

        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inPreferredConfig = Bitmap.Config.ARGB_8888;
        Bitmap bitmap = BitmapFactory.decodeFile(imagePath, options);

         // Do something with the bitmap


        // At the end remember to close the cursor or you will end with the RuntimeException!
        cursor.close();
    }
}

答案 2 :(得分:2)

Akash Kurian Jose回答

的替代方案
Bitmap

我总是使用

ImageView

它适用于图库中的照片和相机中的照片。

关于它的更大问题:Picasso unable to display image from Gallery

使用此方法打开图库:

Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), uri);

然后,您可以使用提及的fun getBitmap(file: Uri, cr: ContentResolver): Bitmap?{ var bitmap: Bitmap ?= null try { val inputStream = cr.openInputStream(file) bitmap = BitmapFactory.decodeStream(inputStream) // close stream try { inputStream.close() } catch (e: IOException) { e.printStackTrace() } }catch (e: FileNotFoundException){} return bitmap } 或设置将 Uri 转换为 位图 图片private void openGallery(){ if (Build.VERSION.SDK_INT <19){ Intent intent = new Intent(); intent.setType("image/*"); intent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(Intent.createChooser(intent, getResources().getString(R.string.select_picture)),GALLERY_INTENT_CALLED); } else { Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); intent.addCategory(Intent.CATEGORY_OPENABLE); intent.setType("image/*"); startActivityForResult(intent, GALLERY_KITKAT_INTENT_CALLED); } }

答案 3 :(得分:1)

如果要将所选图像显示到任何特定的ImageView。 假设我们有RC_PHOTO_PICKER = 1,那么这些代码行应该做魔术

private void openPhotoPicker() {
    Intent photoPickerIntent = new Intent(Intent.ACTION_GET_CONTENT);
    photoPickerIntent.setType("image/*");
    photoPickerIntent.putExtra(Intent.EXTRA_LOCAL_ONLY, false);
    startActivityForResult(Intent.createChooser(photoPickerIntent,"Complete Action Using"), RC_PHOTO_PICKER);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == RC_PHOTO_PICKER && resultCode == RESULT_OK && data != null) {
        Uri pickedImage = data.getData();
        //set the selected image to ImageView
        mImageView.setImageURI(pickedImage);
    }
}

然后简单地调用openPhotoPicker()方法