2

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

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

4

2 回答 2

1

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

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

于 2012-11-12T17:48:01.270 回答
0

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

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 分配时,您必须非常小心,因为它们会导致内存泄漏。

于 2020-09-18T06:18:41.287 回答