且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

最有效的方式展现在Android上的局部图像

更新时间:2023-11-25 17:00:10

这是什么smartImageView(由循环J - 你可以找到他在 http://loopj.com/ )使用从驱动器/ SD检索文件。

 私人位图getBitmapFromDisk(字符串imgID){
    位图位图= NULL;
    如果(diskCacheEnabled){
        字符串文件路径= getFilePath(imgID);
        档案文件=新的文件(文件路径);
        如果(file.exists()){
            位= BitmapFactory.de codeFILE(文件路径);
        }
    }
    返回位图;
}

I am currently work on a magazine like apps. Since there is an option to zoom in(150%, 200%, 250% of original source) , I would prefer not to scale down the image. However , the app will force restart when I try to decode the image because of the out of memory. Are there any suggestion to fix that?

The image are local (SD card) , can be retrieve in any approach, but eventually need to be a bitmap as I use something like cavans.drawbitmap to display it. I tried, input stream-> bytes , input stream->bitmap etc... but are there any most efficient way or at least I can sure the app does not force restart / close? Thanks

 try {
            InputStream is = (InputStream) new URL(url).getContent();
            try {
                return BitmapFactory.decodeStream(is);
            } finally {
                is.close();                    
            }
        } catch (Exception e) {
            return BitmapFactory.decodeResource(context.getResources(), defaultDrawable);


   }

This is what smartImageView(by loopj - you can find him on http://loopj.com/) uses to retrieve files from the drive/sd.

private Bitmap getBitmapFromDisk(String imgID) {
    Bitmap bitmap = null;
    if(diskCacheEnabled){
        String filePath = getFilePath(imgID);
        File file = new File(filePath);
        if(file.exists()) {
            bitmap = BitmapFactory.decodeFile(filePath);
        }
    }
    return bitmap;
}