SinglePixelPackedSampleModel sppsm = (SinglePixelPackedSampleModel) sampleModel; numBanks = 1; size = sppsm.getScanlineStride() * (sppsm.getHeight() - 1) + sppsm.getWidth();
SinglePixelPackedSampleModel sppsm = (SinglePixelPackedSampleModel) sampleModel; numBanks = 1; size = sppsm.getScanlineStride() * (sppsm.getHeight() - 1) + sppsm.getWidth();
private void writeSinglePixelPackedSampleModel( DataOutput out, SinglePixelPackedSampleModel model ) throws IOException { int[] masks = model.getBitMasks(); out.writeInt( masks.length ); for(int i=0; i<masks.length; i++) out.writeInt( masks[i] ); out.writeInt( model.getDataType() ); out.writeInt( model.getWidth() ); out.writeInt( model.getHeight() ); out.writeInt( model.getScanlineStride() ); }
private static void writeTo(SampleModel sm, int[] data, OutputStream out) throws IOException { int h = sm.getHeight(); int w = sm.getWidth(); int stride = ((SinglePixelPackedSampleModel) sm).getScanlineStride(); byte[] b = new byte[w * 3]; for (int y = 0; y < h; ++y) { for (int i = 0, j = y * stride; i < b.length;) { int s = data[j++]; b[i++] = (byte) (s >> 16); b[i++] = (byte) (s >> 8); b[i++] = (byte) s; } out.write(b); } }
private static void initImg(BufferedImage img, int pf, int flags) throws Exception { WritableRaster wr = img.getRaster(); int imgType = img.getType(); if(imgType == BufferedImage.TYPE_INT_RGB || imgType == BufferedImage.TYPE_INT_BGR || imgType == BufferedImage.TYPE_INT_ARGB || imgType == BufferedImage.TYPE_INT_ARGB_PRE) { SinglePixelPackedSampleModel sm = (SinglePixelPackedSampleModel)img.getSampleModel(); int pitch = sm.getScanlineStride(); DataBufferInt db = (DataBufferInt)wr.getDataBuffer(); int[] buf = db.getData(); initIntBuf(buf, img.getWidth(), pitch, img.getHeight(), pf, flags); } else { ComponentSampleModel sm = (ComponentSampleModel)img.getSampleModel(); int pitch = sm.getScanlineStride(); DataBufferByte db = (DataBufferByte)wr.getDataBuffer(); byte[] buf = db.getData(); initBuf(buf, img.getWidth(), pitch, img.getHeight(), pf, flags); } }
private static int checkImg(BufferedImage img, int pf, int subsamp, TJScalingFactor sf, int flags) throws Exception { WritableRaster wr = img.getRaster(); int imgType = img.getType(); if(imgType == BufferedImage.TYPE_INT_RGB || imgType == BufferedImage.TYPE_INT_BGR || imgType == BufferedImage.TYPE_INT_ARGB || imgType == BufferedImage.TYPE_INT_ARGB_PRE) { SinglePixelPackedSampleModel sm = (SinglePixelPackedSampleModel)img.getSampleModel(); int pitch = sm.getScanlineStride(); DataBufferInt db = (DataBufferInt)wr.getDataBuffer(); int[] buf = db.getData(); return checkIntBuf(buf, img.getWidth(), pitch, img.getHeight(), pf, subsamp, sf, flags); } else { ComponentSampleModel sm = (ComponentSampleModel)img.getSampleModel(); int pitch = sm.getScanlineStride(); DataBufferByte db = (DataBufferByte)wr.getDataBuffer(); byte[] buf = db.getData(); return checkBuf(buf, img.getWidth(), pitch, img.getHeight(), pf, subsamp, sf, flags); } }
private void write(SampleModel sm, int[] data) throws IOException { int h = sm.getHeight(); int w = sm.getWidth(); int stride = ((SinglePixelPackedSampleModel) sm).getScanlineStride(); byte[] b = new byte[w * 3]; for (int y = 0; y < h; ++y) { for (int i = 0, j = y * stride; i < b.length;) { int s = data[j++]; b[i++] = (byte) (s >> 16); b[i++] = (byte) (s >> 8); b[i++] = (byte) s; } dos.write(b); } }
/** * Returns the <cite>scan line stride</cite> of the given sample model. The scanline stride is * the number of data array elements between a given sample and the corresponding sample in the * same column of the next scanline. * * @param model The sample model from which to get the scan line stride. * @return The scan line stride. * @throws IllegalArgumentException If the given model is not of a known type. */ public static int getScanlineStride(final SampleModel model) throws IllegalArgumentException { if (model instanceof ComponentSampleModel) { return ((ComponentSampleModel) model).getScanlineStride(); } if (model instanceof SinglePixelPackedSampleModel) { return ((SinglePixelPackedSampleModel) model).getScanlineStride(); } if (model instanceof MultiPixelPackedSampleModel) { return ((MultiPixelPackedSampleModel) model).getScanlineStride(); } throw new IllegalArgumentException(Errors.format( Errors.Keys.UnknownType_1, Classes.getShortClassName(model))); }
public TileOffsets getYOffsets(int yTile) { TileOffsets ret = yOffsets[yTile-getMinTileY()]; if (ret != null) return ret; SinglePixelPackedSampleModel sppsm; sppsm = (SinglePixelPackedSampleModel)getSampleModel(); int stride = sppsm.getScanlineStride(); int th = sppsm.getHeight(); // The span we need to cover in the input image. int height = th+2*maxOffY; // The start and end Y in image's tile coordinate system... int y0 = getTileGridYOffset() + yTile * th - maxOffY - image.getTileGridYOffset(); int y1 = y0 + height - 1; int tile = (int)Math.floor(y0/(double)th); int endTile = (int)Math.floor(y1/(double)th); int loc = y0-(tile*th); int endLoc = th; // Amount not used from bottom edge tile int slop = ((endTile+1)*th-1) - y1; ret = new TileOffsets(height, 0, stride, loc, endLoc, slop, tile, endTile); yOffsets[yTile-getMinTileY()] = ret; return ret; }
public TileOffsets getYOffsets(int yTile) { TileOffsets ret = yOffsets[yTile-getMinTileY()]; if (ret != null) return ret; SinglePixelPackedSampleModel sppsm; sppsm = (SinglePixelPackedSampleModel)getSampleModel(); int stride = sppsm.getScanlineStride(); int th = sppsm.getHeight(); // The span we need to cover in the input image. int height = th+2*maxOffY; // The start and end Y in image's tile coordinate system... int y0 = getTileGridYOffset() + yTile * th - maxOffY - image.getTileGridYOffset(); int y1 = y0 + height - 1; int tile = (int)Math.floor(y0/(double)th); int endTile = (int)Math.floor(y1/(double)th); int loc = y0-(tile*th); int endLoc = th; // Amount not used from bottom edge tile int slop = ((endTile+1)*th-1) - y1; ret = new TileOffsets(height, 0, stride, loc, endLoc, slop, tile, endTile); yOffsets[yTile-getMinTileY()] = ret; return ret; }
public TileOffsets getYOffsets(int yTile) { TileOffsets ret = yOffsets[yTile-getMinTileY()]; if (ret != null) return ret; SinglePixelPackedSampleModel sppsm; sppsm = (SinglePixelPackedSampleModel)getSampleModel(); int stride = sppsm.getScanlineStride(); int th = sppsm.getHeight(); // The span we need to cover in the input image. int height = th+2*maxOffY; // The start and end Y in image's tile coordinate system... int y0 = getTileGridYOffset() + yTile * th - maxOffY - image.getTileGridYOffset(); int y1 = y0 + height - 1; int tile = (int)Math.floor(y0/(double)th); int endTile = (int)Math.floor(y1/(double)th); int loc = y0-(tile*th); int endLoc = th; // Amount not used from bottom edge tile int slop = ((endTile+1)*th-1) - y1; ret = new TileOffsets(height, 0, stride, loc, endLoc, slop, tile, endTile); yOffsets[yTile-getMinTileY()] = ret; return ret; }
public ZeroRecter_INT_PACK(WritableRaster wr) { super(wr); SinglePixelPackedSampleModel sppsm; sppsm = (SinglePixelPackedSampleModel)wr.getSampleModel(); scanStride = sppsm.getScanlineStride(); DataBufferInt db = (DataBufferInt)wr.getDataBuffer(); x0 = wr.getMinY(); y0 = wr.getMinX(); base = (db.getOffset() + sppsm.getOffset(x0-wr.getSampleModelTranslateX(), y0-wr.getSampleModelTranslateY())); pixels = db.getBankData()[0]; if (wr.getWidth() > 10) zeros = new int[wr.getWidth()]; else zeros = null; }
public ZeroRecter_INT_PACK(WritableRaster wr) { super(wr); SinglePixelPackedSampleModel sppsm; sppsm = (SinglePixelPackedSampleModel)wr.getSampleModel(); scanStride = sppsm.getScanlineStride(); DataBufferInt db = (DataBufferInt)wr.getDataBuffer(); x0 = wr.getMinY(); y0 = wr.getMinX(); base = (db.getOffset() + sppsm.getOffset(x0-wr.getSampleModelTranslateX(), y0-wr.getSampleModelTranslateY())); pixels = db.getBankData()[0]; if (wr.getWidth() > 10) zeros = new int[wr.getWidth()]; else zeros = null; }
public ZeroRecter_INT_PACK(WritableRaster wr) { super(wr); SinglePixelPackedSampleModel sppsm; sppsm = (SinglePixelPackedSampleModel)wr.getSampleModel(); scanStride = sppsm.getScanlineStride(); DataBufferInt db = (DataBufferInt)wr.getDataBuffer(); x0 = wr.getMinY(); y0 = wr.getMinX(); base = (db.getOffset() + sppsm.getOffset(x0-wr.getSampleModelTranslateX(), y0-wr.getSampleModelTranslateY())); pixels = db.getBankData()[0]; if (wr.getWidth() > 10) zeros = new int[wr.getWidth()]; else zeros = null; }
protected static void mult_INT_PACK_Data(WritableRaster wr) { // System.out.println("Multiply Int: " + wr); SinglePixelPackedSampleModel sppsm; sppsm = (SinglePixelPackedSampleModel) wr.getSampleModel(); final int width = wr.getWidth(); final int scanStride = sppsm.getScanlineStride(); DataBufferInt db = (DataBufferInt) wr.getDataBuffer(); final int base = (db.getOffset() + sppsm.getOffset(wr.getMinX() - wr.getSampleModelTranslateX(), wr.getMinY() - wr.getSampleModelTranslateY())); // Access the pixel data array final int[] pixels = db.getBankData()[0]; for (int y = 0; y < wr.getHeight(); y++) { int sp = base + y * scanStride; final int end = sp + width; while (sp < end) { int pixel = pixels[sp]; int a = pixel >>> 24; if ((a >= 0) && (a < 255)) { // this does NOT include a == 255 // (0xff) ! pixels[sp] = ((a << 24) | ((((pixel & 0xFF0000) * a) >> 8) & 0xFF0000) | ((((pixel & 0x00FF00) * a) >> 8) & 0x00FF00) | ((((pixel & 0x0000FF) * a) >> 8) & 0x0000FF)); } sp++; } } }
protected static void divide_INT_PACK_Data(WritableRaster wr) { // System.out.println("Divide Int"); SinglePixelPackedSampleModel sppsm; sppsm = (SinglePixelPackedSampleModel) wr.getSampleModel(); final int width = wr.getWidth(); final int scanStride = sppsm.getScanlineStride(); DataBufferInt db = (DataBufferInt) wr.getDataBuffer(); final int base = (db.getOffset() + sppsm.getOffset(wr.getMinX() - wr.getSampleModelTranslateX(), wr.getMinY() - wr.getSampleModelTranslateY())); // Access the pixel data array final int[] pixels = db.getBankData()[0]; for (int y = 0; y < wr.getHeight(); y++) { int sp = base + y * scanStride; final int end = sp + width; while (sp < end) { int pixel = pixels[sp]; int a = pixel >>> 24; if (a <= 0) { pixels[sp] = 0x00FFFFFF; } else if (a < 255) { int aFP = (0x00FF0000 / a); pixels[sp] = ((a << 24) | (((((pixel & 0xFF0000) >> 16) * aFP) & 0xFF0000)) | (((((pixel & 0x00FF00) >> 8) * aFP) & 0xFF0000) >> 8) | (((((pixel & 0x0000FF)) * aFP) & 0xFF0000) >> 16)); } sp++; } } }
protected static void mult_INT_PACK_Data(WritableRaster wr) { // System.out.println("Multiply Int: " + wr); SinglePixelPackedSampleModel sppsm; sppsm = (SinglePixelPackedSampleModel)wr.getSampleModel(); final int width = wr.getWidth(); final int scanStride = sppsm.getScanlineStride(); DataBufferInt db = (DataBufferInt)wr.getDataBuffer(); final int base = (db.getOffset() + sppsm.getOffset(wr.getMinX()-wr.getSampleModelTranslateX(), wr.getMinY()-wr.getSampleModelTranslateY())); // Access the pixel data array final int[] pixels = db.getBankData()[0]; for (int y=0; y<wr.getHeight(); y++) { int sp = base + y*scanStride; final int end = sp + width; while (sp < end) { int pixel = pixels[sp]; int a = pixel>>>24; if ((a>=0) && (a<255)) { // this does NOT include a == 255 (0xff) ! pixels[sp] = ((a << 24) | ((((pixel&0xFF0000)*a)>>8)&0xFF0000) | ((((pixel&0x00FF00)*a)>>8)&0x00FF00) | ((((pixel&0x0000FF)*a)>>8)&0x0000FF)); } sp++; } } }
protected static void mult_INT_PACK_Data(WritableRaster wr) { // System.out.println("Multiply Int: " + wr); SinglePixelPackedSampleModel sppsm; sppsm = (SinglePixelPackedSampleModel) wr.getSampleModel(); final int width = wr.getWidth(); final int scanStride = sppsm.getScanlineStride(); DataBufferInt db = (DataBufferInt) wr.getDataBuffer(); final int base = (db.getOffset() + sppsm.getOffset(wr.getMinX() - wr.getSampleModelTranslateX(), wr.getMinY() - wr.getSampleModelTranslateY())); // Access the pixel data array final int[] pixels = db.getBankData()[0]; for (int y = 0; y < wr.getHeight(); y++) { int sp = base + y * scanStride; final int end = sp + width; while (sp < end) { int pixel = pixels[sp]; int a = pixel >>> 24; if ((a >= 0) && (a < 255)) { // this does NOT include a == 255 (0xff) ! pixels[sp] = ((a << 24) | ((((pixel & 0xFF0000) * a) >> 8) & 0xFF0000) | ((((pixel & 0x00FF00) * a) >> 8) & 0x00FF00) | ((((pixel & 0x0000FF) * a) >> 8) & 0x0000FF)); } sp++; } } }
protected static void mult_INT_PACK_Data(WritableRaster wr) { // System.out.println("Multiply Int: " + wr); SinglePixelPackedSampleModel sppsm; sppsm = (SinglePixelPackedSampleModel)wr.getSampleModel(); final int width = wr.getWidth(); final int scanStride = sppsm.getScanlineStride(); DataBufferInt db = (DataBufferInt)wr.getDataBuffer(); final int base = (db.getOffset() + sppsm.getOffset(wr.getMinX() - wr.getSampleModelTranslateX(), wr.getMinY() - wr.getSampleModelTranslateY())); // Access the pixel data array final int[] pixels = db.getBankData()[0]; for (int y = 0; y < wr.getHeight(); y++) { int sp = base + y * scanStride; final int end = sp + width; while (sp < end) { int pixel = pixels[sp]; int a = pixel >>> 24; if ((a >= 0) && (a < 255)) { // this does NOT include a == 255 (0xff) ! pixels[sp] = ((a << 24) | ((((pixel & 0xFF0000) * a) >> 8) & 0xFF0000) | ((((pixel & 0x00FF00) * a) >> 8) & 0x00FF00) | ((((pixel & 0x0000FF) * a) >> 8) & 0x0000FF)); } sp++; } } }
public void fixAlpha_INT_PACK(WritableRaster wr) { SinglePixelPackedSampleModel sppsm; sppsm = (SinglePixelPackedSampleModel)wr.getSampleModel(); final int width = wr.getWidth(); final int scanStride = sppsm.getScanlineStride(); DataBufferInt db = (DataBufferInt)wr.getDataBuffer(); final int base = (db.getOffset() + sppsm.getOffset(wr.getMinX()-wr.getSampleModelTranslateX(), wr.getMinY()-wr.getSampleModelTranslateY())); // Access the pixel data array final int[] pixels = db.getBankData()[0]; for (int y=0; y<wr.getHeight(); y++) { int sp = base + y*scanStride; final int end = sp + width; while (sp < end) { int pixel = pixels[sp]; int a = pixel>>>24; int v = (pixel>>16)&0xFF; if (a < v) a = v; v = (pixel>> 8)&0xFF; if (a < v) a = v; v = (pixel )&0xFF; if (a < v) a = v; pixels[sp] = (pixel&0x00FFFFFF) | (a << 24); sp++; } } }