ScriptIntrinsicColorMatrixpublic final class ScriptIntrinsicColorMatrix extends ScriptIntrinsic Intrinsic for applying a color matrix to allocations.
If the element type is {@link Element.DataType#UNSIGNED_8},
it is converted to {@link Element.DataType#FLOAT_32} and
normalized from (0-255) to (0-1). If the incoming vector size
is less than four, a {@link Element#F32_4} is created by
filling the missing vector channels with zero. This value is
then multiplied by the 4x4 color matrix as performed by
rsMatrixMultiply(), adding a {@link Element#F32_4}, and then
writing it to the output {@link Allocation}.
If the ouptut type is unsigned, the value is normalized from
(0-1) to (0-255) and converted. If the output vector size is
less than four, the unused channels are discarded.
Supported elements types are {@link Element#U8}, {@link
Element#U8_2}, {@link Element#U8_3}, {@link Element#U8_4},
{@link Element#F32}, {@link Element#F32_2}, {@link
Element#F32_3}, and {@link Element#F32_4}. |
Fields Summary |
---|
private final Matrix4f | mMatrix | private final Float4 | mAdd |
Constructors Summary |
---|
private ScriptIntrinsicColorMatrix(long id, RenderScript rs)
super(id, rs);
|
Methods Summary |
---|
public static android.renderscript.ScriptIntrinsicColorMatrix | create(RenderScript rs, Element e)Create an intrinsic for applying a color matrix to an
allocation.
return create(rs);
| public static android.renderscript.ScriptIntrinsicColorMatrix | create(RenderScript rs)Create an intrinsic for applying a color matrix to an
allocation.
long id = rs.nScriptIntrinsicCreate(2, 0);
return new ScriptIntrinsicColorMatrix(id, rs);
| public void | forEach(Allocation ain, Allocation aout)Invoke the kernel and apply the matrix to each cell of input
{@link Allocation} and copy to the output {@link Allocation}.
If the vector size of the input is less than four, the
remaining components are treated as zero for the matrix
multiply.
If the output vector size is less than four, the unused
vector components are discarded.
forEach(ain, aout, null);
| public void | forEach(Allocation ain, Allocation aout, Script.LaunchOptions opt)Invoke the kernel and apply the matrix to each cell of input
{@link Allocation} and copy to the output {@link Allocation}.
If the vector size of the input is less than four, the
remaining components are treated as zero for the matrix
multiply.
If the output vector size is less than four, the unused
vector components are discarded.
if (!ain.getElement().isCompatible(Element.U8(mRS)) &&
!ain.getElement().isCompatible(Element.U8_2(mRS)) &&
!ain.getElement().isCompatible(Element.U8_3(mRS)) &&
!ain.getElement().isCompatible(Element.U8_4(mRS)) &&
!ain.getElement().isCompatible(Element.F32(mRS)) &&
!ain.getElement().isCompatible(Element.F32_2(mRS)) &&
!ain.getElement().isCompatible(Element.F32_3(mRS)) &&
!ain.getElement().isCompatible(Element.F32_4(mRS))) {
throw new RSIllegalArgumentException("Unsuported element type.");
}
if (!aout.getElement().isCompatible(Element.U8(mRS)) &&
!aout.getElement().isCompatible(Element.U8_2(mRS)) &&
!aout.getElement().isCompatible(Element.U8_3(mRS)) &&
!aout.getElement().isCompatible(Element.U8_4(mRS)) &&
!aout.getElement().isCompatible(Element.F32(mRS)) &&
!aout.getElement().isCompatible(Element.F32_2(mRS)) &&
!aout.getElement().isCompatible(Element.F32_3(mRS)) &&
!aout.getElement().isCompatible(Element.F32_4(mRS))) {
throw new RSIllegalArgumentException("Unsuported element type.");
}
forEach(0, ain, aout, null, opt);
| public Script.KernelID | getKernelID()Get a KernelID for this intrinsic kernel.
return createKernelID(0, 3, null, null);
| public void | setAdd(Float4 f)Set the value to be added after the color matrix has been
applied. The default value is {0, 0, 0, 0}
mAdd.x = f.x;
mAdd.y = f.y;
mAdd.z = f.z;
mAdd.w = f.w;
FieldPacker fp = new FieldPacker(4*4);
fp.addF32(f.x);
fp.addF32(f.y);
fp.addF32(f.z);
fp.addF32(f.w);
setVar(1, fp);
| public void | setAdd(float r, float g, float b, float a)Set the value to be added after the color matrix has been
applied. The default value is {0, 0, 0, 0}
mAdd.x = r;
mAdd.y = g;
mAdd.z = b;
mAdd.w = a;
FieldPacker fp = new FieldPacker(4*4);
fp.addF32(mAdd.x);
fp.addF32(mAdd.y);
fp.addF32(mAdd.z);
fp.addF32(mAdd.w);
setVar(1, fp);
| public void | setColorMatrix(Matrix4f m)Set the color matrix which will be applied to each cell of
the image.
mMatrix.load(m);
setMatrix();
| public void | setColorMatrix(Matrix3f m)Set the color matrix which will be applied to each cell of the image.
This will set the alpha channel to be a copy.
mMatrix.load(m);
setMatrix();
| public void | setGreyscale()Set a color matrix to convert from RGB to luminance. The alpha channel
will be a copy.
mMatrix.loadIdentity();
mMatrix.set(0, 0, 0.299f);
mMatrix.set(1, 0, 0.587f);
mMatrix.set(2, 0, 0.114f);
mMatrix.set(0, 1, 0.299f);
mMatrix.set(1, 1, 0.587f);
mMatrix.set(2, 1, 0.114f);
mMatrix.set(0, 2, 0.299f);
mMatrix.set(1, 2, 0.587f);
mMatrix.set(2, 2, 0.114f);
setMatrix();
| private void | setMatrix()
FieldPacker fp = new FieldPacker(16*4);
fp.addMatrix(mMatrix);
setVar(0, fp);
| public void | setRGBtoYUV()Set the matrix to convert from RGB to YUV with a direct copy of the 4th
channel.
mMatrix.loadIdentity();
mMatrix.set(0, 0, 0.299f);
mMatrix.set(1, 0, 0.587f);
mMatrix.set(2, 0, 0.114f);
mMatrix.set(0, 1, -0.14713f);
mMatrix.set(1, 1, -0.28886f);
mMatrix.set(2, 1, 0.436f);
mMatrix.set(0, 2, 0.615f);
mMatrix.set(1, 2, -0.51499f);
mMatrix.set(2, 2, -0.10001f);
setMatrix();
| public void | setYUVtoRGB()Set the matrix to convert from YUV to RGB with a direct copy of the 4th
channel.
mMatrix.loadIdentity();
mMatrix.set(0, 0, 1.f);
mMatrix.set(1, 0, 0.f);
mMatrix.set(2, 0, 1.13983f);
mMatrix.set(0, 1, 1.f);
mMatrix.set(1, 1, -0.39465f);
mMatrix.set(2, 1, -0.5806f);
mMatrix.set(0, 2, 1.f);
mMatrix.set(1, 2, 2.03211f);
mMatrix.set(2, 2, 0.f);
setMatrix();
|
|