2013-11-21 32 views
1

我尝试从res/raw文件夹(这是一个png资源)解码位图(1920x1920)。我需要全尺寸位图。我想使用BimtapFactory.decodeFileDescriptor而不是BitmapFactory.decodeFile || decodeResource,因为比其他人处理OOM的可靠性更高: 虽然我尝试使用此代码,但位图为NULL!但该文件不为空。我一直在努力玩。 帮助请!为什么res/raw文件夹中的位图是空的?

 Context mCtx=MainActivity.this; 
     Bitmap bm = null;    
     //id is the resId in res/raw 
     AssetFileDescriptor file =mCtx.getResources().openRawResourceFd(R.raw.skin_default_0); 
     bm = BitmapFactory.decodeFileDescriptor(file.getFileDescriptor(), null, 
       options); 

回答

1
InputStream bm = getResources().openRawResource(R.raw.splash); 
    BufferedInputStream bufferedInputStream = new BufferedInputStream(bm); 
    Bitmap bmp = BitmapFactory.decodeStream(bufferedInputStream); 
    int nh = (int) (bmp.getHeight() * (512.0/bmp.getWidth())); 
    bmp = Bitmap.createScaledBitmap(bmp, 512, nh, true); 
    view.setImageBitmap(bmp); 

试试这个代码。

原始文件夹 - 将文件保持为未压缩状态。 我不这么认为,与BitmapFactory.decodeStream相比,BitmapFactory.decodeFileDescriptor会给出高效的结果,获取文件的inputStream并对其进行解码。如果你认为图像太大,并且使用许多图像,像这样的应用程序会非常繁重,因为原始文件夹文件不会被压缩。如果您想缩放位图,请使用我用代码添加的代码片段代码。我会给你一个更好的理解。

谢谢...

+0

据说(http://stackoverflow.com/questions/477572/strange-out-of-memory-issue-while-loading-an-image-to-a-位图对象),decodeFileDescriptor调用与decodeStream/decodeFile不同的本地方法。我只是想将方块(1920 * 1920)的图像剪成1920 * 1080而没有OOM。任何想法? – WZY

相关问题