Как указать свертку Renderscript 3x3 - PullRequest
0 голосов
/ 19 марта 2020

Я пытаюсь применить ядро ​​3x3 к растровому изображению, используя инстинкты Renderscript. Но как я могу указать, какой канал (R, G, B, A) будет затронут операцией? Я пробовал это:

private Bitmap process(Bitmap src){
        RenderScript rs = RenderScript.create(this);
        Bitmap result = Bitmap.createBitmap(currentBitmap.getWidth(), currentBitmap.getHeight(), currentBitmap.getConfig());

        Allocation input = Allocation.createFromBitmap(rs, currentBitmap);
        Allocation output = Allocation.createTyped(rs, input.getType());

        float[] kernel = {
                0.25f, 0.5f, 0.25f,
                0f, 0f, 0f,
                -0.25f, -0.5f, -0,25f
        };

        Element element = Element.createPixel(rs, Element.DataType.UNSIGNED_5_6_5, Element.DataKind.PIXEL_RGB);
        ScriptIntrinsicConvolve3x3 script = ScriptIntrinsicConvolve3x3.create(rs, element);
        script.setInput(input);
        script.setCoefficients(kernel);

        script.forEach(output);
        output.copyTo(result);

        rs.destroy();
        input.destroy();
        output.destroy();
        script.destroy();

        return result;
    }

Но это не похоже на работу. Я надеюсь, что у кого-то есть идея.

...