как конвертировать URI-изображение в метод Candraw Ondraw - PullRequest
0 голосов
/ 12 сентября 2011

Я ищу изображение из галереи и мне показывается. Теперь я хочу отобразить изображения в onDraw(Canvas canvas). Как я могу это сделать. Пожалуйста, помогите мне.Заранее спасибо

selectedImageUri = data.getData();
                        selectedImagePath = getPath(selectedImageUri);
                        Toast.makeText(getBaseContext(),"selected"+selectedImagePath,Toast.LENGTH_LONG).show();
                        System.out.println("Image Path : " + selectedImagePath);
                        img.setImageURI(selectedImageUri);

Здесь uri selectedImageUri;

Мой OnDraw(canvas Canvas) код:

Bitmap myBitmap1 = BitmapFactory.decodeResource(getResources(),selectedImageUri);

Мое сообщение об ошибке

TheМетод decodeResource (Resources, int) в типе BitmapFactory не применим для аргументов (Resources, Uri)

1 Ответ

1 голос
/ 12 сентября 2011

Путь, который вы получаете от средства выбора, - это Uri, и вы пытаетесь загрузить его как идентификатор ресурса, который является целым числом.Путь, возвращаемый функцией getData (), представляет собой либо путь к файлу непосредственно к файлу на вашей SD-карте, либо URI MediaStore.Если приложение сохраняет файл на диск и не использует методы API MediaStore для вставки его в базу данных MediaStore, вы получаете путь к файлу.В противном случае вы получите MediaStore Uri.По этой причине я использую метод-обертку, который определяет, какой он есть, и возвращает фактический путь:

public static String getRealPathFromURI(Activity activity, Uri contentUri) {    


    String realPath = null;

    // Check for valid file path
    File f = new File(contentUri.getPath());
    if(f.exists())
        realPath = contentUri.getPath();
    // Check for valid MediaStore path
    else
    {           
        String[] proj = { MediaStore.Images.Media.DATA };
        Cursor cursor = activity.managedQuery(contentUri, proj, null, null, null);
        if(cursor != null)
        {
            int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            cursor.moveToFirst();
            realPath = cursor.getString(column_index);
            cursor.close();
        }
    }
    return realPath;
}

Как только он у меня есть, я загружаю его как поток из BitmapFactory:

ПРИМЕЧАНИЕ здесь пропущено много кода, так что вы можете что-то упустить, но это должно дать вам общий подход

    FileInputStream in = null;
    BufferedInputStream buffer = null;
    Bitmap image = null;

    try
    {
        in = new FileInputStream(path);
        buffer = new BufferedInputStream(in);
        image = BitmapFactory.decodeStream(buffer);
    }
    catch (FileNotFoundException e)
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    finally
    {
        try
        {
            if(in != null)
                in.close();
        }
        catch (IOException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try
        {
            if(buffer != null)
                buffer.close();
        }
        catch (IOException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
...