Android 使用Renderscript调整位图大小

Android 使用Renderscript调整位图大小,android,bitmap,resize,scale,renderscript,Android,Bitmap,Resize,Scale,Renderscript,我目前正在从事一个项目,我必须使用RenderScript,所以我开始学习它,这是一项伟大的技术,因为,就像openGL一样,它允许您使用本机级别的计算代码,而不必使用dalvik vm。这部分代码的处理速度比使用普通android代码要快得多。 我开始从事图像处理,我想知道的是: 是否可以使用RenderScript调整位图的大小?这应该比使用android代码调整位图的大小快得多。另外,renderscript可以处理大于48mB的信息(每个进程对某些手机的限制) 虽然可以使用Rendscr

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


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

虽然可以使用Rendscript调整位图大小,但我不确定这是否是最佳选择。快速查看Android代码库可以看出,JavaAPI确实进入了本机代码中以进行位图调整,尽管如果调整大小的算法不符合您的需要,您必须实现自己的算法


为了有效地缩放位图,有很多答案。我的建议是尝试这些方法,如果它们仍然没有达到你想要的效果,那么就尽快或以视觉方式呈现结果,然后再研究如何编写你自己的。如果您仍想编写自己的,请使用可用的性能工具查看您是否真的更快或只是重新设计轮子。

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

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\u IMAGE
是指定输出图像宽度的整数值


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

您是打算使用折旧后的RenderScript图形API还是只使用计算API。还可以定义什么是调整大小,就像在openGL中可以进行转换一样。我使用ComputeAPI。例如:如果我有一个1920×1080的位图,并希望将其调整为1280×720,那么可以在我的.rs文件中执行此操作吗?使用RenderScript?至少我想我是在使用ComputeAPI,因为我没有划掉行,这表明有些东西不推荐使用。