从nl.siegmann.epublib获取资源的位图资源加载资源
问题描述:
使用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();造成例外
答
这是有史以来最蹩脚的错误。
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()上查找它。
答
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);