Ни один из этих ответов не работал для меня во всех случаях. Мне пришлось перейти непосредственно к Документации Google https://developer.android.com/guide/topics/providers/document-provider.html по этой теме и найти этот полезный метод:
private Bitmap getBitmapFromUri(Uri uri) throws IOException {
ParcelFileDescriptor parcelFileDescriptor =
getContentResolver().openFileDescriptor(uri, "r");
FileDescriptor fileDescriptor = parcelFileDescriptor.getFileDescriptor();
Bitmap image = BitmapFactory.decodeFileDescriptor(fileDescriptor);
parcelFileDescriptor.close();
return image;
}
Вы можете использовать это растровое изображение для отображения его в режиме просмотра изображений.
Фортран передает по ссылке. Фиктивный атрибут соответствует тем переменным, которые передаются в функцию ( X
и Y
в вашем случае). Оператор параметра ожидает чего-то статического, но поскольку X
- это все, что передается в функцию, это действительно не имеет никакого смысла. Оператор параметра - это способ установки констант - он не имеет ничего общего с параметрами подпрограммы.
Когда вы получаете сообщение об ошибке, говорящее, что C
не является DUMMY
переменная, значит, она не находит C
в списке переменных, которые будут переданы в / из функции - ваше объявление только F (X, Y)
: нет C
в поле зрения. Хотя вы явно не используете атрибут DUMMY
, у вас есть атрибут INTENT (INOUT)
, что означает, что эти переменные соответствуют вводу / выводу подпрограммы.
Чтобы узнать, что вы хотите, у вас будет подпрограмма, которая выглядит примерно так:
subroutine F(X, Y)
implicit none
! These are the dummy variables
real, intent(inout) :: X, Y
! These are the variables in the scope of this subroutine
real :: a, b
real, parameter, save :: c = 3.14E0
X = Y + 2*sin(Y)
end subroutine F
Я не совсем уверен, что вы пытаетесь сделать - вы объявляете подпрограмму pure
, что означает подпрограмму без побочных эффектов, но вы используют intent (inout)
для ваших переменных, что означает, что X
и Y
могут быть изменены в ходе выполнения.
Я бы добавил также, что внутри подпрограммы инициализация переменной в ее операторе объявления, таком как REAL :: C = 3.14E0
, дает переменную с неявным атрибутом save
. Однако, если вы хотите, чтобы он сохранялся от вызова к вызову, вы поступили правильно, явно добавив атрибут save
, чтобы было ясно, что вы делаете именно это.
I ' я не парень парсеров / компиляторов,