【发布时间】:2016-04-28 18:30:05
【问题描述】:
我的应用程序做什么:
1- 用户可以通过设备相机拍照。 (作品)
2- 应用程序创建一个包含以下文件夹的新文件(使用以下文件夹进行测试以确保正确保存文件):
a. File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "images");
- File mediaFile = new File(mediaStorageDir.getPath()+File.separator+fileName + ".jpg");
b. File mediaStorageDir = new File(Gdx.files.getExternalStoragePath().toString());
- File mediaFile = new File(mediaStorageDir.getPath()+File.separator+fileName+".jpg");
c. File mediaStorageDir = new File(Gdx.files.getLocalStoragePath().toString());
- File mediaFile = new File(mediaStorageDir.getPath()+File.separator+fileName+".jpg");
3- 应用程序使用 bmp.compress(quality=25)重新缩放+压缩图片到 1024x512,然后保存。 (作品)
public boolean compressToFile(byte[] data, int quality, File fileHandle) {
File mediaFile = fileHandle;
Pixmap pixmap = new Pixmap(data, 0, data.length);
if(quality<0)
quality = 0;
if(quality>100)
quality = 100;
FileOutputStream fos;
int x=0,y=0;
int xl=0,yl=0;
try {
Bitmap bmp = Bitmap.createBitmap(pixmap.getWidth(), pixmap.getHeight(), Bitmap.Config.ARGB_8888);
// we need to switch between LibGDX RGBA format to Android ARGB format
for (x=0,xl=pixmap.getWidth(); x<xl;x++) {
for (y=0,yl=pixmap.getHeight(); y<yl;y++) {
int color = pixmap.getPixel(x, y);
// RGBA => ARGB
int RGB = color >> 8;
int A = (color & 0x000000ff) << 24;
int ARGB = A | RGB;
bmp.setPixel(x, y, ARGB);
}
}
fos = new FileOutputStream(mediaFile, false);
boolean compressed = bmp.compress(CompressFormat.JPEG, quality, fos);
if(compressed)
System.out.println("zgzg2020:: compressed SUCCESS!");
else
System.out.println("zgzg2020:: compressed FAILED!");
fos.close();
int WIDTH = 1024, HEIGHT = 512;
File f = mediaFile;
Bitmap shrunkBmp = downsizeImage(f, WIDTH, HEIGHT);
fos = new FileOutputStream(mediaFile, false);
shrunkBmp.compress(CompressFormat.JPEG, 100, fos);
fos.close();
return true;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
return false;
}
缩小。
public Bitmap downsizeImage(File file, int width, int height) {
BitmapFactory.Options opts = new BitmapFactory.Options ();
opts.inSampleSize = 2; // for 1/2 the image to be loaded
Bitmap thumb = Bitmap.createScaledBitmap(BitmapFactory.decodeFile(file.getPath(), opts), width, height, false);
return thumb;
}
4- 确认 jpg 已正确保存。以上三种路径我都测试过了。
System.out.println("b4 pictureFile= " + file.getPath().toString() + "=> " + file.exists());//Returns false.
compressToFile(data, quality, file);//Here is where the compression, scale down, write to disk.
System.out.println("af pictureFile= " + file.getPath().toString() + "=> " + file.exists());//Returns true
5- 读取保存的图片并将其呈现在屏幕上。 应用程序在这里崩溃!!!
mode = Mode.render;
System.out.println("AssessPath:"+file.toString());//to confirm the path
texture = new Texture(file.toString());//(FAILS!!)
错误
com.badlogic.gdx.utils.GdxRuntimeException: Couldn't load file
注意事项:
我已经在 Marshmallow、Lollipop 两台机器上测试了我的应用程序。两者都失败并出现相同的错误。
-
权限似乎正确:
在机器上保存文件后,我手动将文件复制到 assets 文件夹中。应用程序能够打开文件;所以我确定该文件符合 LibGDX 分辨率...等要求。
我搜索了很多文章和问题/答案,找不到问题的原因:
https://github.com/libgdx/libgdx/wiki/File-handling#writing-to-a-file
https://github.com/libgdx/libgdx/wiki/Integrating-libgdx-and-the-device-camera
com.badlogic.gdx.utils.GdxRuntimeException: Couldn't load file: - Error
【问题讨论】:
标签: java android camera libgdx load