Example usage for org.apache.pdfbox.cos COSName BITS_PER_SAMPLE

List of usage examples for org.apache.pdfbox.cos COSName BITS_PER_SAMPLE

Introduction

In this page you can find the example usage for org.apache.pdfbox.cos COSName BITS_PER_SAMPLE.

Prototype

COSName BITS_PER_SAMPLE

To view the source code for org.apache.pdfbox.cos COSName BITS_PER_SAMPLE.

Click Source Link

Usage

From source file:org.apache.fop.render.pdf.pdfbox.PSPDFGraphics2D.java

License:Apache License

private static Function getFunction(PDFunction f) throws IOException {
    if (f instanceof PDFunctionType3) {
        PDFunctionType3 sourceFT3 = (PDFunctionType3) f;
        float[] bounds = sourceFT3.getBounds().toFloatArray();
        COSArray sourceFunctions = sourceFT3.getFunctions();
        List<Function> targetFunctions = new ArrayList<Function>();
        for (int j = 0; j < sourceFunctions.size(); j++) {
            targetFunctions.add(getFunction(PDFunction.create(sourceFunctions.get(j))));
        }/*from  w ww . j ava 2s  .  c om*/
        return new Function(null, null, targetFunctions, toList(bounds), null);
    } else if (f instanceof PDFunctionType2) {
        PDFunctionType2 sourceFT2 = (PDFunctionType2) f;
        double interpolation = (double) sourceFT2.getN();
        float[] c0 = sourceFT2.getC0().toFloatArray();
        float[] c1 = sourceFT2.getC1().toFloatArray();
        return new Function(null, null, c0, c1, interpolation);
    } else if (f instanceof PDFunctionType0) {
        COSDictionary s = f.getCOSObject();
        assert s instanceof COSStream;
        COSStream stream = (COSStream) s;
        COSArray encode = (COSArray) s.getDictionaryObject(COSName.ENCODE);
        COSArray domain = (COSArray) s.getDictionaryObject(COSName.DOMAIN);
        COSArray range = (COSArray) s.getDictionaryObject(COSName.RANGE);
        int bits = ((COSInteger) s.getDictionaryObject(COSName.BITS_PER_SAMPLE)).intValue();
        COSArray size = (COSArray) s.getDictionaryObject(COSName.SIZE);
        byte[] x = IOUtils.toByteArray(stream.getUnfilteredStream());
        for (byte y : x) {
            if (y != 0) {
                return new Function(floatArrayToDoubleList(domain.toFloatArray()),
                        floatArrayToDoubleList(range.toFloatArray()),
                        floatArrayToDoubleList(encode.toFloatArray()), x, bits, toList(size));
            }
        }
        return null;
    }
    throw new IOException("Unsupported " + f.toString());
}