在几天之内,我一直在这里和互联网上寻找解决方案来解决一个问题,即加载或移动大型jpg图像(现在作为可绘制的资源),我认为是时候了要问自己,有很多问题和解决方案非常相关。
我正在使用OpenGL开发3D地形模拟,问题是我使用的是地形纹理相当大的jpg图像(2048x2048 = 1,94 MB)。
让我们看看我做过的一些工作:
第一
Bitmap terrainBitmap = BitmapFactory.decodeResource(getResources(),
R.drawable.terrain, options);
这一次崩溃,可能是因为图像太大了
第二
Uri path = Uri.parse("android.resource://com.jgc.my_app/" + R.drawable.terrain);
URL ulrn;ulrn = new URL(path.getPath());
HttpURLConnection con = (HttpURLConnection)ulrn.openConnection();
InputStream is = con.getInputStream();
Bitmap bmp = BitmapFactory.decodeStream(is);
这可能是一次非常愚蠢的尝试
第三
Bitmap terrainBitmap = BitmapFactory.decodeFile("android.resource://com.jgc.my_app/terrain.jpg", options);
但是我得到一个非常令人沮丧的空位图...
其他的工作环节是,因为可绘制资源在应用程序的“内部”,为什么不将它们移动到那里的sd卡和decodefile形式,但是,给位图或者drawable移动到sdcard的解决方案我总是找到用户BitmapFactory.decodeResource(getResources(),R.drawable.terrain,options);
我感谢任何建议,从那时起我将在我的项目中处理其他任务。
提前致谢
答案 0 :(得分:0)
好吧,也许我很幸运,这里有适用于我的单词indy indy:
private static BitmapFactory.Options terrainBitmapOptions = new BitmapFactory.Options();
...
// Set our bitmaps to 16-bit, 565 format.
terrainBitmapOptions.inPreferredConfig = Bitmap.Config.RGB_565;
...
InputStream is = getResources().openRawResource(R.drawable.terrain);
Bitmap terrainBitmap;
try {
terrainBitmap = BitmapFactory.decodeStream(is, null, terrainBitmapOptions);
} finally {
try {
is.close();
} catch (IOException e) {
// Ignore.
}
}
我希望它可以帮助其他人...