2012-02-06 296 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);