Here you can find the source of blur(int[] srcPixels, int[] dstPixels, int width, int height, float[] kernel, int radius)
Blurs the source pixels into the destination pixels.
Parameter | Description |
---|---|
srcPixels | the source pixels |
dstPixels | the destination pixels |
width | the width of the source picture |
height | the height of the source picture |
kernel | the kernel of the blur effect |
radius | the radius of the blur effect |
private static void blur(int[] srcPixels, int[] dstPixels, int width, int height, float[] kernel, int radius)
//package com.java2s; /*//w w w. j av a 2 s . c o m * %W% %E% * * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */ public class Main { /** * <p>Blurs the source pixels into the destination pixels. The force of the blur is specified by the radius which * must be greater than 0.</p> <p>The source and destination pixels arrays are expected to be in the INT_ARGB * format.</p> <p>After this method is executed, dstPixels contains a transposed and filtered copy of * srcPixels.</p> * * @param srcPixels the source pixels * @param dstPixels the destination pixels * @param width the width of the source picture * @param height the height of the source picture * @param kernel the kernel of the blur effect * @param radius the radius of the blur effect */ private static void blur(int[] srcPixels, int[] dstPixels, int width, int height, float[] kernel, int radius) { float a; float r; float g; float b; int ca; int cr; int cg; int cb; for (int y = 0; y < height; y++) { int index = y; int offset = y * width; for (int x = 0; x < width; x++) { a = r = g = b = 0.0f; for (int i = -radius; i <= radius; i++) { int subOffset = x + i; if (subOffset < 0 || subOffset >= width) { subOffset = (x + width) % width; } int pixel = srcPixels[offset + subOffset]; float blurFactor = kernel[radius + i]; a += blurFactor * ((pixel >> 24) & 0xFF); r += blurFactor * ((pixel >> 16) & 0xFF); g += blurFactor * ((pixel >> 8) & 0xFF); b += blurFactor * ((pixel) & 0xFF); } ca = (int) (a + 0.5f); cr = (int) (r + 0.5f); cg = (int) (g + 0.5f); cb = (int) (b + 0.5f); dstPixels[index] = ((ca > 255 ? 255 : ca) << 24) | ((cr > 255 ? 255 : cr) << 16) | ((cg > 255 ? 255 : cg) << 8) | (cb > 255 ? 255 : cb); index += height; } } } /** * <p>Blurs the source pixels into the destination pixels. The force of the blur is specified by the radius which * must be greater than 0.</p> <p>The source and destination pixels arrays are expected to be in the BYTE_GREY * format.</p> <p>After this method is executed, dstPixels contains a transposed and filtered copy of * srcPixels.</p> * * @param srcPixels the source pixels * @param dstPixels the destination pixels * @param width the width of the source picture * @param height the height of the source picture * @param kernel the kernel of the blur effect * @param radius the radius of the blur effect */ static void blur(byte[] srcPixels, byte[] dstPixels, int width, int height, float[] kernel, int radius) { float p; int cp; for (int y = 0; y < height; y++) { int index = y; int offset = y * width; for (int x = 0; x < width; x++) { p = 0.0f; for (int i = -radius; i <= radius; i++) { int subOffset = x + i; // if (subOffset < 0) subOffset = 0; // if (subOffset >= width) subOffset = width-1; if (subOffset < 0 || subOffset >= width) { subOffset = (x + width) % width; } int pixel = srcPixels[offset + subOffset] & 0xFF; float blurFactor = kernel[radius + i]; p += blurFactor * pixel; } cp = (int) (p + 0.5f); dstPixels[index] = (byte) (cp > 255 ? 255 : cp); index += height; } } } }