All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jpedal.parser.image.downsample.KernelUtils Maven / Gradle / Ivy

/*
 * ===========================================
 * Java Pdf Extraction Decoding Access Library
 * ===========================================
 *
 * Project Info:  http://www.idrsolutions.com
 * Help section for developers at http://www.idrsolutions.com/support/
 *
 * (C) Copyright 1997-2017 IDRsolutions and Contributors.
 *
 * This file is part of JPedal/JPDF2HTML5
 *
 @LICENSE@
 *
 * ---------------
 * KernelUtils.java
 * ---------------
 */
package org.jpedal.parser.image.downsample;

import org.jpedal.images.SamplingFactory;
import org.jpedal.parser.image.data.ImageData;

/**
 * @author Bethan
 */
class KernelUtils {

    protected static void applyKernel(final ImageData imageData, int compCount) {

        final double[][] kernel = SamplingFactory.getSharpenKernel();

        final byte[] input = imageData.getObjectData();
        final int w = imageData.getWidth();
        final int h = imageData.getHeight();

        if (compCount == 3) { //really it's rgba not rgb
            compCount = 4;
        }

        final byte[] output = new byte[w * h * compCount];

        int imageX, imageY, currentPixel;
        int value = 0;
        final int lineBytes = w * compCount;

        //get matrix size (usually 3)
        final int matrixSize = kernel.length;

        for (int x = 0; x < w; x++) {
            for (int y = 0; y < h; y++) {
                //for (int comp = 0; comp < compCount; comp++) {

                //multiply by nxn matrix to get new pixel value
                for (int i = 0; i < matrixSize; i++) {
                    for (int j = 0; j < matrixSize; j++) {

                        imageX = (x - matrixSize / 2 + i + w) % w;
                        imageY = (y - matrixSize / 2 + j + h) % h;

                        currentPixel = input[(imageY * lineBytes) + imageX] & 255;
                        // currentPixel = input[(imageY * lineBytes) + (imageX * compCount) + comp] & 255;
                        value += (currentPixel * kernel[i][j]);
                    }
                }

                if (value < 0) { //ensure in range
                    value = 0;
                } else if (value > 255) {
                    value = 255;
                }

                // output[(y * lineBytes) + (x * compCount) + comp] = (byte) value;
                output[(y * lineBytes) + x] = (byte) value;

                value = 0; //reset for next calculation
                //}
            }
        }

        imageData.setObjectData(output);

    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy