我正在尝试使用VuDroid PDF查看器,我需要获取渲染的位图并将其存储为byte []。然后我需要将它转换回一个Bitmap,可以使用类似“canvas.drawBitmap(bitmap,0,0,paint);”的方式在视图上显示。
我花了很多时间尝试访问Bitmap,我可能已经完成了它,但即使我得到byte []返回它仍然不会在画布上呈现为Bitmap。
有人可以在这里帮助我,我必须遗漏一些东西。非常感谢你。
我相信它应该通过......进行访问。
PDFPage.java .... public Bitmap renderBitmap(int width,int height,RectF pageSliceBounds)
-OR -
通过Page.java - 或 - DocumentView.java - 或 - DecodeService.java
就像我说我已经尝试了所有这些并且得到了结果我只是看不到我出错的地方,因为我无法渲染它以查看Bitmap是否被正确调用。
再次感谢你:)
答案 0 :(得分:2)
该文档称该方法返回“如果图像无法解码,则返回null”。你可以尝试:
byte[] image = services.getImageBuffer(1024, 600);
InputStream is = new ByteArrayInputStream(image);
Bitmap bmp = BitmapFactory.decodeStream(is);
我认为这会对你有所帮助: -
Render a byte[] as Bitmap in Android
How does Bitmap.Save(Stream, ImageFormat) format the data?
Copy image with alpha channel to clipboard with custom background color?
答案 1 :(得分:1)
如果您想将每个pdf页面作为独立位图,您应该考虑这一点 VuDroid 渲染页面, PDFView 仅显示它们。 你应该使用VuDroid功能。
现在您可以使用此示例并创建自己的代码
示例代码:用于从特定PDF页面制作位图
view = (ImageView)findViewById(R.id.imageView1);
pdf_conext = new PdfContext();
PdfDocument d = pdf_conext.openDocument(Environment.getExternalStorageDirectory() + "your PDF path");
PdfPage vuPage = d.getPage(1); // choose your page number
RectF rf = new RectF();
rf.bottom = rf.right = (float)1.0;
Bitmap bitmap = vuPage.renderBitmap(60, 60, rf); //define width and height of bitmap
view.setImageBitmap(bitmap);
用于在SDCARD上编写此位图:
try {
File mediaImage = new File(Environment.getExternalStorageDirectory().toString() + "your path for save thumbnail images ");
FileOutputStream out = new FileOutputStream(mediaImage);
bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
用于检索已保存的图片:
File file = new File(Environment.getExternalStorageDirectory().toString()+ "your path for save thumbnail images ");
String path = file.getAbsolutePath();
if (path != null){
view = Bitmap.createScaledBitmap(BitmapFactory.decodeFile(path), YOUR_X, YOUR_Y, false);
}
答案 2 :(得分:0)
Try this code to check whether bitmap is properly generating or not
PdfContext pdf_conext = new PdfContext();
PdfDocument d = (PdfDocument) pdf_conext.openDocument(pdfPath);
PdfPage vuPage = (PdfPage) d.getPage(0);
RectF rf = new RectF();
Bitmap bitmap = vuPage.renderBitmap(1000,600, rf);
File dir1 = new File (root.getAbsolutePath() + "/IMAGES");
dir1.mkdirs();
String fname = "Image-"+ 2 +".jpg";
File file = new File (dir1, fname);
if (file.exists ())
file.delete ();
try {
FileOutputStream out = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}