如何使用处理草图在 Android Studio 中加载图像
How to load an image in Android Studio using a Processing sketch
我无法使用处理草图加载图像。
我在 Windows 10 上使用 Android Studio 和 android 模拟器。我在以下目录中放置了一个名为“car.png”的图像文件:
E:\Android\AndroidStudioProjects\car\app\src\main\res\drawable
我还使用Android Studio 的设备文件资源管理器将其放置在以下目录中:
/data/user/0/com.示例.ijusttrytoloadanimage/files/
当我从项目树或设备文件资源管理器中双击它时,它会显示汽车图像。
但是当我在 Android 模拟器中 运行 我的项目时,我收到以下错误消息:
W/System.err: java.io.FileNotFoundException: /data/user/0/com.example.ijusttrytoloadanimage/files/car.png(权限被拒绝)
这是我的 Sketch.java 文件:
package com.example.ijusttrytoloadanimage;
import processing.core.PApplet;
import processing.core.PImage;
public class Sketch extends PApplet {
public PImage car;
public void settings() {
fullScreen();
}
public void setup() {
imageMode(CENTER);
car = loadImage("car.png");
}
public void draw() {
background(0);
translate((float) width/2, (float) height/2);
if (car != null) {
image(car, 0, 0);
} else {
print("nothing shows up!");
}
}
我在 运行 连接 Sketch.java 时收到的消息是“没有任何显示!”这意味着 PImage 变量 car 仍然是空的。
尽管我使用的是默认已授予访问权限的内部存储,但为什么我会收到此权限被拒绝的消息?我应该怎么做才能在模拟器的屏幕上显示我的图像文件?
这是我的 MainActivity.java 文件:
package com.example.ijusttrytoloadanimage;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import processing.android.PFragment;
import processing.android.CompatUtils;
import processing.core.PApplet;
public class MainActivity extends AppCompatActivity {
private PApplet sketch;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FrameLayout frame = new FrameLayout(this);
frame.setId(CompatUtils.getUniqueViewId());
setContentView(frame, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT));
sketch = new Sketch();
PFragment fragment = new PFragment(sketch);
fragment.setView(frame, this);
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (sketch != null) {
sketch.onRequestPermissionsResult(
requestCode, permissions, grantResults);
}
}
@Override
public void onNewIntent(Intent intent) {
super.onNewIntent(intent);
if (sketch != null) {
sketch.onNewIntent(intent);
}
}
}
这是我的 AndroidManifest.xml 文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.ijusttrytoloadanimage">
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.ijusttrytoloadanimage"
>
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
我终于找到了答案。如果其他人遇到同样的问题,只需执行以下操作:
- 在项目视图中 right-click 在应用程序和 select 新建 -> 目录中。在下面的新 window 和 select src/main/assets 中键入名称“assets”。
- 将您的图像文件复制到新目录 app/src/main/assets.
- 使用命令 loadImage(your_image.png);
在 Sketch.java 文件中加载图像
有效!
我无法使用处理草图加载图像。
我在 Windows 10 上使用 Android Studio 和 android 模拟器。我在以下目录中放置了一个名为“car.png”的图像文件: E:\Android\AndroidStudioProjects\car\app\src\main\res\drawable
我还使用Android Studio 的设备文件资源管理器将其放置在以下目录中: /data/user/0/com.示例.ijusttrytoloadanimage/files/
当我从项目树或设备文件资源管理器中双击它时,它会显示汽车图像。
但是当我在 Android 模拟器中 运行 我的项目时,我收到以下错误消息: W/System.err: java.io.FileNotFoundException: /data/user/0/com.example.ijusttrytoloadanimage/files/car.png(权限被拒绝)
这是我的 Sketch.java 文件:
package com.example.ijusttrytoloadanimage;
import processing.core.PApplet;
import processing.core.PImage;
public class Sketch extends PApplet {
public PImage car;
public void settings() {
fullScreen();
}
public void setup() {
imageMode(CENTER);
car = loadImage("car.png");
}
public void draw() {
background(0);
translate((float) width/2, (float) height/2);
if (car != null) {
image(car, 0, 0);
} else {
print("nothing shows up!");
}
}
我在 运行 连接 Sketch.java 时收到的消息是“没有任何显示!”这意味着 PImage 变量 car 仍然是空的。
尽管我使用的是默认已授予访问权限的内部存储,但为什么我会收到此权限被拒绝的消息?我应该怎么做才能在模拟器的屏幕上显示我的图像文件?
这是我的 MainActivity.java 文件:
package com.example.ijusttrytoloadanimage;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import processing.android.PFragment;
import processing.android.CompatUtils;
import processing.core.PApplet;
public class MainActivity extends AppCompatActivity {
private PApplet sketch;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FrameLayout frame = new FrameLayout(this);
frame.setId(CompatUtils.getUniqueViewId());
setContentView(frame, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT));
sketch = new Sketch();
PFragment fragment = new PFragment(sketch);
fragment.setView(frame, this);
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (sketch != null) {
sketch.onRequestPermissionsResult(
requestCode, permissions, grantResults);
}
}
@Override
public void onNewIntent(Intent intent) {
super.onNewIntent(intent);
if (sketch != null) {
sketch.onNewIntent(intent);
}
}
}
这是我的 AndroidManifest.xml 文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.ijusttrytoloadanimage">
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.ijusttrytoloadanimage"
>
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
我终于找到了答案。如果其他人遇到同样的问题,只需执行以下操作:
- 在项目视图中 right-click 在应用程序和 select 新建 -> 目录中。在下面的新 window 和 select src/main/assets 中键入名称“assets”。
- 将您的图像文件复制到新目录 app/src/main/assets.
- 使用命令 loadImage(your_image.png); 在 Sketch.java 文件中加载图像
有效!