Closed TienHai closed 7 years ago
After in java side:
ManifestItem coverItm = package.getCoverManifestItem();
if (coverItm == null)
return;
PackageResource pckgRsc = package.getResourceAtRelativePath(coverItm.getHref());
byte[] data = pckgRsc.readDataFull();
Bitmap epubCover = BitmapFactory.decodeByteArray(data , 0, data.length);
For reference: https://github.com/readium/readium-sdk/blob/develop/ePub3/ePub/package.cpp#L1597
shared_ptr<ManifestItem> Package::CoverManifestItem() const
{
string EPUB2CoverID = EPUB2PropertyMatching(string("cover"));
for (auto& item : _manifestByID)
{
if (item.second->HasProperty(ePub3::ItemProperties::CoverImage) || item.second->Identifier() == EPUB2CoverID) {
return item.second;
}
}
return nullptr;
}
Note that iOS RDServices
does not implement this utility function either (the ReadiumSDK API is currently not consistently 1-to-1 mapped across platform-specific layers):
https://github.com/readium/readium-sdk/blob/develop/Platform/Apple/RDServices/Main/RDPackage.mm
I do not have any objections to merge this PR.
Ric and I reviewed this code change. Let's merge. Note: for consistency sake, RDServices should probably align too at some point, but as I said above, there is no 1-to-1 mapping between C++ and the platform-specific code layers, yet.
A method exist in sdk/ePub3/package.cpp for get cover item from manifest, but this method not implemented in jni for java side.