Загрузка ресурса в растровое изображение, какой ресурс взят из nl.siegmann.epublib - PullRequest
0 голосов
/ 06 февраля 2012

Используя nl.siegmann.epublib, я взял ресурс из книги, которую я пытаюсь отобразить на экране.

Здесь можно найти документы

Код, который я использовал: 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;
    }

Теперь проблема, с которой я столкнулся, была resвсегда null с использованием .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 ();вызвал исключение

Ответы [ 2 ]

0 голосов
/ 10 апреля 2012
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 голосов
/ 07 февраля 2012

Это была самая слабая ошибка в истории.

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, где textview накладывается на изображение, а затем не показывает изображение.Этот код может работать, а может и не работать, поскольку библиотека будет создавать его местоположение или нет.Если это не так, возможно, вам придется искать его в .getResources ().

...