使用渲染脚本android旋转位图

pat*_*ats 15 android bitmap renderscript

当我使用以下代码时,它最终会出现outofmemory异常.做了研究之后,Render脚本看起来像个好人.我在哪里可以找到类似操作的示例代码以及如何将其集成到我的项目中.

public Bitmap rotateBitmap(Bitmap image, int angle) {
    if (image != null) {

        Matrix matrix = new Matrix();
        matrix.postRotate(angle, (image.getWidth()) / 2,
                (image.getHeight()) / 2);

        return Bitmap.createBitmap(image, 0, 0, image.getWidth(),
                image.getHeight(), matrix, true);
    }
    return null;
}
Run Code Online (Sandbox Code Playgroud)

bir*_*rdy 1

基本上,旋转位图是旋转 2D 数组的任务,无需使用额外的内存。这是 RenderScript 的正确实现:Android: 旋转图像而不将其加载到内存

但如果您只想显示旋转的位图,则这不是必需的。您可以在其上绘图时简单地延伸ImageView和旋转:Canvas

canvas.save();
canvas.rotate(angle, X + (imageW / 2), Y + (imageH / 2));
canvas.drawBitmap(imageBmp, X, Y, null);
canvas.restore();
Run Code Online (Sandbox Code Playgroud)

ScriptIntrinsic 怎么样,因为它只是一个用于常见操作的内置 RenderScript 内核,因此您无法在已实现的功能之上执行任何操作:ScriptIntrinsic3DLUT, ScriptIntrinsicBLAS, ScriptIntrinsicBlend, ScriptIntrinsicBlur, ScriptIntrinsicColorMatrix, ScriptIntrinsicConvolve3x3, ScriptIntrinsicConvolve5x5, ScriptIntrinsicHistogram, ScriptIntrinsicLUT, ScriptIntrinsicResize, ScriptIntrinsicYuvToRGB。它们目前不包含旋转位图的功能,因此您应该创建自己的 ScriptC 脚本。