/** Hunts for the start or end of a sequence of split pixels. Begins searching at (startX, startY) then follows along the x or * y axis (depending on value of xAxis) for the first non-transparent pixel if startPoint is true, or the first transparent * pixel if startPoint is false. Returns 0 if none found, as 0 is considered an invalid split point being in the outer border * which will be stripped. */ static private int getSplitPoint (WritableRaster raster, String name, int startX, int startY, boolean startPoint, boolean xAxis) { int[] rgba = new int[4]; int next = xAxis ? startX : startY; int end = xAxis ? raster.getWidth() : raster.getHeight(); int breakA = startPoint ? 255 : 0; int x = startX; int y = startY; while (next != end) { if (xAxis) x = next; else y = next; raster.getPixel(x, y, rgba); if (rgba[3] == breakA) return next; if (!startPoint && (rgba[0] != 0 || rgba[1] != 0 || rgba[2] != 0 || rgba[3] != 255)) splitError(x, y, rgba, name); next++; } return 0; }
private WritableRaster clipToRect(final WritableRaster raster, final Rectangle rect, final int[] bands) { if (rect.contains(raster.getMinX(), raster.getMinY(), raster.getWidth(), raster.getHeight()) && bands == null /* TODO: Compare bands with that of raster */) { return raster; } return raster.createWritableChild(rect.x, rect.y, rect.width, rect.height, 0, 0, bands); }
private WritableRaster clipToRect(final WritableRaster raster, final Rectangle rect, final int[] bands) { if (rect.contains(raster.getMinX(), raster.getMinY(), raster.getWidth(), raster.getHeight()) && bands == null /* TODO: Compare bands with that of raster */) { return raster; } return raster.createWritableChild(rect.x, rect.y, rect.width, rect.height, 0, 0, bands); }
/** Hunts for the start or end of a sequence of split pixels. Begins searching at (startX, startY) then follows along the x or * y axis (depending on value of xAxis) for the first non-transparent pixel if startPoint is true, or the first transparent * pixel if startPoint is false. Returns 0 if none found, as 0 is considered an invalid split point being in the outer border * which will be stripped. */ static private int getSplitPoint (WritableRaster raster, String name, int startX, int startY, boolean startPoint, boolean xAxis) { int[] rgba = new int[4]; int next = xAxis ? startX : startY; int end = xAxis ? raster.getWidth() : raster.getHeight(); int breakA = startPoint ? 255 : 0; int x = startX; int y = startY; while (next != end) { if (xAxis) x = next; else y = next; raster.getPixel(x, y, rgba); if (rgba[3] == breakA) return next; if (!startPoint && (rgba[0] != 0 || rgba[1] != 0 || rgba[2] != 0 || rgba[3] != 255)) splitError(x, y, rgba, name); next++; } return 0; }
private WritableRaster clipToRect(final WritableRaster raster, final Rectangle rect, final int[] bands) { if (rect.contains(raster.getMinX(), raster.getMinY(), raster.getWidth(), raster.getHeight()) && bands == null /* TODO: Compare bands with that of raster */) { return raster; } return raster.createWritableChild(rect.x, rect.y, rect.width, rect.height, 0, 0, bands); }
private WritableRaster clipToRect(final WritableRaster raster, final Rectangle rect, final int[] bands) { if (rect.contains(raster.getMinX(), raster.getMinY(), raster.getWidth(), raster.getHeight()) && bands == null /* TODO: Compare bands with that of raster */) { return raster; } return raster.createWritableChild(rect.x, rect.y, rect.width, rect.height, 0, 0, bands); }
WritableRaster raster = image.getRaster(); int bottom = raster.getHeight() - 1; int right = raster.getWidth() - 1; if (startX > 0) { startX--; endX = raster.getWidth() - 2 - (endX - 1); } else { endX = raster.getWidth() - 2; if (startY > 0) { startY--; endY = raster.getHeight() - 2 - (endY - 1); } else { endY = raster.getHeight() - 2;
private WritableRaster clipToRect(final WritableRaster raster, final Rectangle rect, final int[] bands) { if (rect.contains(raster.getMinX(), raster.getMinY(), raster.getWidth(), raster.getHeight()) && bands == null /* TODO: Compare bands with that of raster */) { return raster; } return raster.createWritableChild(rect.x, rect.y, rect.width, rect.height, 0, 0, bands); }
private WritableRaster clipToRect(final WritableRaster raster, final Rectangle rect, final int[] bands) { if (rect.contains(raster.getMinX(), raster.getMinY(), raster.getWidth(), raster.getHeight()) && bands == null /* TODO: Compare bands with that of raster */) { return raster; } return raster.createWritableChild(rect.x, rect.y, rect.width, rect.height, 0, 0, bands); }
WritableRaster raster = image.getRaster(); int bottom = raster.getHeight() - 1; int right = raster.getWidth() - 1; if (startX > 0) { startX--; endX = raster.getWidth() - 2 - (endX - 1); } else { endX = raster.getWidth() - 2; if (startY > 0) { startY--; endY = raster.getHeight() - 2 - (endY - 1); } else { endY = raster.getHeight() - 2;
private void convertToDestinationCS(final ColorModel sourceCM, ColorModel destinationCM, final WritableRaster raster) { long start = DEBUG ? System.currentTimeMillis() : 0; // Color conversion from embedded color space, to destination color space WritableRaster alphaMaskedRaster = destinationCM.hasAlpha() ? raster.createWritableChild(0, 0, raster.getWidth(), raster.getHeight(), raster.getMinX(), raster.getMinY(), createBandList(sourceCM.getColorSpace().getNumComponents())) : raster; new ColorConvertOp(sourceCM.getColorSpace(), destinationCM.getColorSpace(), null) .filter(alphaMaskedRaster, alphaMaskedRaster); if (DEBUG) { System.out.println("Color conversion " + (System.currentTimeMillis() - start) + "ms"); } }
@Override public BufferedImage toRGBImage(WritableRaster raster) throws IOException { init(); // // WARNING: this method is performance sensitive, modify with care! // // Please read PDFBOX-3854 and PDFBOX-2092 and look at the related commits first. // The current code returns TYPE_INT_RGB images which prevents slowness due to threads // blocking each other when TYPE_CUSTOM images are used. BufferedImage image = new BufferedImage(raster.getWidth(), raster.getHeight(), BufferedImage.TYPE_INT_RGB); image.setData(raster); return image; } }
BufferedImage dest = new BufferedImage(raster.getWidth(), raster.getHeight(), BufferedImage.TYPE_INT_RGB); ColorSpace destCS = dest.getColorModel().getColorSpace(); float[] lastValues = new float[] { -1.0f, -1.0f, -1.0f, -1.0f }; float[] destValues = new float[3]; int width = raster.getWidth(); int startX = raster.getMinX(); int height = raster.getHeight(); int startY = raster.getMinY(); for (int x = startX; x < width + startX; x++)
int[] px = new int[3*(raster.getHeight()-2)]; int colorPos; for (int x = 1; x < raster.getWidth() - 1; x++) { raster.getPixels(x, 1, 1, raster.getHeight()-2, px); for (int y = 0; y < raster.getHeight() - 2; y++) { o1 = (double) (px[y*3] - px[y*3+1]) / sq2; o2 = (double) (px[y*3] + px[y*3+1] - 2 * px[y*3+2]) / sq6;
? raster.createWritableChild(raster.getMinX(), raster.getMinY(), raster.getWidth(), raster.getHeight(), 0, 0, new int[] {band}) : raster; Raster srcChannel = banded ? raster.createWritableChild(raster.getMinX(), raster.getMinY(), raster.getWidth(), raster.getHeight(), 0, 0, new int[] {band}) : raster; Raster srcChannel = banded ? raster.createWritableChild(raster.getMinX(), raster.getMinY(), raster.getWidth(), raster.getHeight(), 0, 0, new int[] {band}) : raster; Raster srcChannel = banded ? raster.createWritableChild(raster.getMinX(), raster.getMinY(), raster.getWidth(), raster.getHeight(), 0, 0, new int[] {band}) : raster; Raster srcChannel = banded
int[] px = new int[3*(raster.getHeight()-2)]; int colorPos; for (int x = 1; x < raster.getWidth() - 1; x++) { raster.getPixels(x, 1, 1, raster.getHeight()-2, px); for (int y = 0; y < raster.getHeight() - 2; y++) { o1 = (double) (px[y*3] - px[y*3+1]) / sq2; o2 = (double) (px[y*3] + px[y*3+1] - 2 * px[y*3+2]) / sq6;