首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为PdfRenderer启用黑暗模式

如何为PdfRenderer启用黑暗模式
EN

Stack Overflow用户
提问于 2019-10-07 16:58:15
回答 1查看 231关注 0票数 0

我正在使用PdfRenderer在安卓应用程序中打开一个文件。如果启用了黑色主题,文本是黑色的,背景也是黑色的,所以它看起来像空白的黑色屏幕。在PdfRendere.Page中呈现文本时,我可以更改文本的颜色吗

代码语言:javascript
复制
    private void showPage(int index) {
    if (pdfRenderer.getPageCount() <= index) {
        return;
    }
    if (null != currentPage) {
        currentPage.close();
    }
    currentPage = pdfRenderer.openPage(index);
    Bitmap bitmap = Bitmap.createBitmap(currentPage.getWidth(), currentPage.getHeight(),
            Bitmap.Config.ARGB_8888);

    currentPage.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);
    imageViewPdf.setImageBitmap(bitmap);

    }
EN

回答 1

Stack Overflow用户

发布于 2020-07-30 23:41:14

嗯,不确定是不是正确的答案,但我将位图转换为摄影中的底片,不确定是否足够有效,但它对我有效:

首先,您必须使用pageRenderer呈现位图:

代码语言:javascript
复制
var currentPage: PdfRenderer.Page = pdfRenderer.openPage(position)
currentPage?.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_PRINT)

val nightModeFlags = parent.context.resources?.configuration?.uiMode?.and(Configuration.UI_MODE_NIGHT_MASK)
    darkThemeEnabled = Configuration.UI_MODE_NIGHT_YES == nightModeFlags

if (darkThemeEnabled) {
    bitmap = invert(bitmap)
}

这是制作位图底片的代码

代码语言:javascript
复制
private fun invert(original: Bitmap): Bitmap? {
    val inversion = original.copy(Bitmap.Config.ARGB_8888, true)

    val width = inversion.width
    val height = inversion.height
    val pixels = width * height

    val pixel = IntArray(pixels)
    inversion.getPixels(pixel, 0, width, 0, 0, width, height)

    for (i in 0 until pixels) pixel[i] = pixel[i] xor RGB_MASK
    inversion.setPixels(pixel, 0, width, 0, 0, width, height)

    return inversion
}

希望能帮到你。我必须澄清,只有工作的文本,如果你有一个图像在pdf中,它将显示为负片。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58266326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档