ScriptIntrinsicHistogrampublic final class ScriptIntrinsicHistogram extends ScriptIntrinsic Intrinsic Histogram filter. |
Fields Summary |
---|
private Allocation | mOut |
Constructors Summary |
---|
private ScriptIntrinsicHistogram(long id, RenderScript rs)
super(id, rs);
|
Methods Summary |
---|
public static android.renderscript.ScriptIntrinsicHistogram | create(RenderScript rs, Element e)Create an intrinsic for calculating the histogram of an uchar
or uchar4 image.
Supported elements types are
{@link Element#U8_4}, {@link Element#U8_3},
{@link Element#U8_2}, {@link Element#U8}
if ((!e.isCompatible(Element.U8_4(rs))) &&
(!e.isCompatible(Element.U8_3(rs))) &&
(!e.isCompatible(Element.U8_2(rs))) &&
(!e.isCompatible(Element.U8(rs)))) {
throw new RSIllegalArgumentException("Unsuported element type.");
}
long id = rs.nScriptIntrinsicCreate(9, e.getID(rs));
ScriptIntrinsicHistogram sib = new ScriptIntrinsicHistogram(id, rs);
return sib;
| public void | forEach(Allocation ain)Process an input buffer and place the histogram into the
output allocation. The output allocation may be a narrower
vector size than the input. In this case the vector size of
the output is used to determine how many of the input
channels are used in the computation. This is useful if you
have an RGBA input buffer but only want the histogram for
RGB.
1D and 2D input allocations are supported.
forEach(ain, null);
| public void | forEach(Allocation ain, Script.LaunchOptions opt)Process an input buffer and place the histogram into the
output allocation. The output allocation may be a narrower
vector size than the input. In this case the vector size of
the output is used to determine how many of the input
channels are used in the computation. This is useful if you
have an RGBA input buffer but only want the histogram for
RGB.
1D and 2D input allocations are supported.
if (ain.getType().getElement().getVectorSize() <
mOut.getType().getElement().getVectorSize()) {
throw new RSIllegalArgumentException(
"Input vector size must be >= output vector size.");
}
if (!ain.getType().getElement().isCompatible(Element.U8(mRS)) &&
!ain.getType().getElement().isCompatible(Element.U8_2(mRS)) &&
!ain.getType().getElement().isCompatible(Element.U8_3(mRS)) &&
!ain.getType().getElement().isCompatible(Element.U8_4(mRS))) {
throw new RSIllegalArgumentException("Input type must be U8, U8_1, U8_2 or U8_4.");
}
forEach(0, ain, null, null, opt);
| public void | forEach_Dot(Allocation ain)Process an input buffer and place the histogram into the
output allocation. The dot product of the input channel and
the coefficients from 'setDotCoefficients' are used to
calculate the output values.
1D and 2D input allocations are supported.
forEach_Dot(ain, null);
| public void | forEach_Dot(Allocation ain, Script.LaunchOptions opt)Process an input buffer and place the histogram into the
output allocation. The dot product of the input channel and
the coefficients from 'setDotCoefficients' are used to
calculate the output values.
1D and 2D input allocations are supported.
if (mOut.getType().getElement().getVectorSize() != 1) {
throw new RSIllegalArgumentException("Output vector size must be one.");
}
if (!ain.getType().getElement().isCompatible(Element.U8(mRS)) &&
!ain.getType().getElement().isCompatible(Element.U8_2(mRS)) &&
!ain.getType().getElement().isCompatible(Element.U8_3(mRS)) &&
!ain.getType().getElement().isCompatible(Element.U8_4(mRS))) {
throw new RSIllegalArgumentException("Input type must be U8, U8_1, U8_2 or U8_4.");
}
forEach(1, ain, null, null, opt);
| public Script.FieldID | getFieldID_Input()Get a FieldID for the input field of this intrinsic.
return createFieldID(1, null);
| public Script.KernelID | getKernelID_Separate()Get a KernelID for this intrinsic kernel.
return createKernelID(0, 3, null, null);
| public void | setDotCoefficients(float r, float g, float b, float a)Set the coefficients used for the RGBA to Luminocity
calculation. The default is {0.299f, 0.587f, 0.114f, 0.f}.
Coefficients must be >= 0 and sum to 1.0 or less.
if ((r < 0.f) || (g < 0.f) || (b < 0.f) || (a < 0.f)) {
throw new RSIllegalArgumentException("Coefficient may not be negative.");
}
if ((r + g + b + a) > 1.f) {
throw new RSIllegalArgumentException("Sum of coefficients must be 1.0 or less.");
}
FieldPacker fp = new FieldPacker(16);
fp.addF32(r);
fp.addF32(g);
fp.addF32(b);
fp.addF32(a);
setVar(0, fp);
| public void | setOutput(Allocation aout)Set the output of the histogram. 32 bit integer types are
supported.
mOut = aout;
if (mOut.getType().getElement() != Element.U32(mRS) &&
mOut.getType().getElement() != Element.U32_2(mRS) &&
mOut.getType().getElement() != Element.U32_3(mRS) &&
mOut.getType().getElement() != Element.U32_4(mRS) &&
mOut.getType().getElement() != Element.I32(mRS) &&
mOut.getType().getElement() != Element.I32_2(mRS) &&
mOut.getType().getElement() != Element.I32_3(mRS) &&
mOut.getType().getElement() != Element.I32_4(mRS)) {
throw new RSIllegalArgumentException("Output type must be U32 or I32.");
}
if ((mOut.getType().getX() != 256) ||
(mOut.getType().getY() != 0) ||
mOut.getType().hasMipmaps() ||
(mOut.getType().getYuv() != 0)) {
throw new RSIllegalArgumentException("Output must be 1D, 256 elements.");
}
setVar(1, aout);
|
|