繁体   English   中英

使用 Renderscript 调整位图大小

[英]Resize bitmap using Renderscript

我目前正在做一个必须使用 RenderScript 的项目,所以我开始学习它,这是一项很棒的技术,因为就像 openGL 一样,它允许您使用达到本机级别的计算代码,并且不会不必使用dalvik vm。 这部分代码的处理速度比使用普通 android 代码要快得多。 我开始使用图像处理,我想知道的是:

是否可以使用 RenderScript 调整位图的大小? 这应该比使用 android 代码调整位图大小要快得多。 另外,renderscript 可以处理大于 48mB 的信息(每个进程限制在某些手机上)。

虽然您可以使用 Rendscript 来调整位图大小,但我不确定这是否是最佳选择。 快速浏览 Android 代码库会发现 Java API 确实会进入本机代码来调整位图大小,但如果调整大小算法不符合您的需要,则您必须实现自己的。

有许多关于 SO 的答案可以有效地缩放位图。 我的建议是尝试这些,如果他们仍然没有按照您的意愿行事,要么尽快,要么结果在视觉上如何显示,然后调查编写您自己的。 如果您仍然想自己编写,请使用可用的性能工具来查看您是否真的更快或只是重新发明轮子。

您可以使用以下功能调整图像大小。

private Bitmap resize(Bitmap inBmp) {
    RenderScript mRs = RenderScript.create(getApplication());
    Bitmap outBmp = Bitmap.createBitmap(OUTPUT_IMAGE_WIDTH, inBmp.getHeight() * OUTPUT_IMAGE_WIDTH /inBmp.getWidth(), inBmp.getConfig());
    ScriptIntrinsicResize siResize = ScriptIntrinsicResize.create(mRs);
    Allocation inAlloc = Allocation.createFromBitmap(mRs, inBmp);
    Allocation outAlloc = Allocation.createFromBitmap(mRs, outBmp);
    siResize.setInput(inAlloc);
    siResize.forEach_bicubic(outAlloc);
    outAlloc.copyTo(outBmp);
    inAlloc.destroy();
    outAlloc.destroy();
    siResize.destroy();
    return outBmp;
}

OUTPUT_IMAGE是指定输出图像宽度的整数值。

注意:在使用 RenderScript 分配时,您必须非常小心,因为它们会导致内存泄漏。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM