nl.siegmann.epublibから取得するリソースをビットマップにロードする

nl.siegmann.epublibの使用実際に画面に表示しようとしている本からリソースを取り出しました。

The api docs can be found 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()を使ってresが常にnullだったことです。 .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

2 答え

これはこれまでで最も残酷なバグでした。

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();
         }

このコードは機能します。しかし、最大の問題は、textviewが画像を重ねて表示してから画像を表示しなかった.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);
0
追加された