2012-02-06 239 views
0

使用nl.siegmann.epublib我从一本书中获取资源,尝试实际在屏幕上显示该资源。从nl.siegmann.epublib获取资源的位图资源加载资源

API文档可以发现here

我使用的代码是: Book.getCoverImage()和Book.getCoverPage()。

实际的代码看起来更像是这样的:

Book book = null; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     ImageView iv = (ImageView)findViewById(R.id.image_test); 

     try{ 
      Resource res = bookLoaded().getCoverImage(); 
      Bitmap bm = BitmapFactory.decodeStream(res.getInputStream()); 
      iv.setImageBitmap(bm); 
     }catch (Exception e) { 
      // TODO: handle exception 
      e.printStackTrace(); 
     } 
       } 
public Book bookLoaded(){ 
     AssetManager am = getAssets(); 
     try{ 
      InputStream is = am.open("Ada Madison - [Sophie Knowles Mystery 01] - The Square Root of Murder (epub).epub"); 
      book = (new EpubReader()).readEpub(is); 
     }catch (Exception e) { 
      // TODO: handle exception 
      e.printStackTrace(); 
     } 
     return book; 
    } 

现在我出现的问题是资源总是空使用.getCoverImage()。当我尝试.getCoverPage()时出现异常错误;

我的问题是“是否正确使用BitmapFactory来做到这一点?我做错了什么?或者我错过了什么?”。

继续我到目前为止研究的内容: 您可以获取.epub路径。使用book.GetHref()。但是,问题更多的是如何.epub文件(类似于zip文件)获取数据。那么现在我不得不寻找一个提取器,然后我可以找到图像文件。

try{ 
      byte[] newData = bookLoaded().getCoverImage().getData(); 
      Bitmap bmp =BitmapFactory.decodeByteArray(newData, 0, newData.length); 
      image_view.setImageBitmap(bmp); 
     }catch (Exception e) { 
      // TODO: handle exception 
      e.printStackTrace(); 
     } 

不知何故,bookLoaded()。getCoverImage()。getData();造成例外

回答

0

这是有史以来最蹩脚的错误。

try{ 
      byte[] newData = bookLoaded().getCoverImage().getData(); 
      Bitmap bmp =BitmapFactory.decodeByteArray(newData, 0, newData.length); 
      image_view.setImageBitmap(bmp); 
     }catch (Exception e) { 
      // TODO: handle exception 
      e.printStackTrace(); 
     } 

此代码有效。然而,最大的问题是在.xml文本视图重叠图像,然后没有显示图像。此代码可能会或可能不会,因为图书馆会创建它的位置或不。如果没有,您可能需要在.getResources()上查找它。

0
Bitmap bitmap = null; 
try{ 
    Book book = (new EpubReader()).readEpub(new FileInputStream("/sdcard/example.epub")); 
    Resource resource = book.getResources().getById("cover"); 
    if (resource != null){ 
     byte[] coverImage = resource.getData(); 
     bitmap = BitmapFactory.decodeByteArray(coverImage, 0, coverImage.length);      
    } 
}catch(Exception ex){ 
    Toast.makeText(this, ex.getMessage(), Toast.LENGTH_SHORT); 
} 

ImageView imageView = (ImageView) findViewById(R.id.bookCover); 
if (bitmap != null) 
    imageView.setImageBitmap(bitmap); 
else 
    imageView.setVisibility(View.GONE);