private boolean newImage(BufferedImage tmpImage) { Boolean iguales = true; // Si es la primer imagen if (lastBufferedImage == null) { // Devuelvo true return true; } // Obtengo los buffers de las imágenes DataBuffer newImageDataBuffer = tmpImage.getRaster().getDataBuffer(); DataBuffer lastImageDataBuffer = lastBufferedImage.getRaster().getDataBuffer(); // Obtengo los tipos de los buffers. DataBufferInt newImageDBAsDBInt = (DataBufferInt) newImageDataBuffer; DataBufferInt lastImageDBAsDBInt = (DataBufferInt) lastImageDataBuffer; // Armo arreglos de ints con la información de los buffers for (int bank = 0; bank < newImageDBAsDBInt.getNumBanks(); bank++) { int[] nueva = newImageDBAsDBInt.getData(bank); int[] anterior = lastImageDBAsDBInt.getData(bank); // si la información es la misma if (Arrays.equals(nueva, anterior) == true) { // las imágenes son iguales y devuelvo false ya que NO debo enviarla iguales = false; } } // Si las imágenes son distintas, devuelvo true ya que debo enviarla. return iguales; }
/** * Constructs a IntegerComponentRaster with the given SampleModel, DataBuffer, and parent. * DataBuffer must be a DataBufferInt and SampleModel must be of type * SinglePixelPackedSampleModel. When translated into the base Raster's coordinate system, aRegion * must be contained by the base Raster. Origin is the coodinate in the new Raster's coordinate * system of the origin of the base Raster. (The base Raster is the Raster's ancestor which has no * parent.) * * <p>Note that this constructor should generally be called by other constructors or create * methods, it should not be used directly. * * @param sampleModel The SampleModel that specifies the layout. * @param dataBuffer The DataBufferInt that contains the image data. * @param aRegion The Rectangle that specifies the image area. * @param origin The Point that specifies the origin. * @param parent The parent (if any) of this raster. */ public IntegerComponentRaster( SampleModel sampleModel, DataBuffer dataBuffer, Rectangle aRegion, Point origin, IntegerComponentRaster parent) { super(sampleModel, dataBuffer, aRegion, origin, parent); this.maxX = minX + width; this.maxY = minY + height; if (!(dataBuffer instanceof DataBufferInt)) { throw new RasterFormatException("IntegerComponentRasters must have" + "integer DataBuffers"); } DataBufferInt dbi = (DataBufferInt) dataBuffer; if (dbi.getNumBanks() != 1) { throw new RasterFormatException( "DataBuffer for IntegerComponentRasters" + " must only have 1 bank."); } this.data = stealData(dbi, 0); if (sampleModel instanceof SinglePixelPackedSampleModel) { SinglePixelPackedSampleModel sppsm = (SinglePixelPackedSampleModel) sampleModel; int[] boffsets = sppsm.getBitOffsets(); boolean notByteBoundary = false; for (int i = 1; i < boffsets.length; i++) { if ((boffsets[i] % 8) != 0) { notByteBoundary = true; } } this.type = (notByteBoundary ? IntegerComponentRaster.TYPE_INT_PACKED_SAMPLES : IntegerComponentRaster.TYPE_INT_8BIT_SAMPLES); this.scanlineStride = sppsm.getScanlineStride(); this.pixelStride = 1; this.dataOffsets = new int[1]; this.dataOffsets[0] = dbi.getOffset(); this.bandOffset = this.dataOffsets[0]; int xOffset = aRegion.x - origin.x; int yOffset = aRegion.y - origin.y; dataOffsets[0] += xOffset + yOffset * scanlineStride; this.numDataElems = sppsm.getNumDataElements(); } else { throw new RasterFormatException( "IntegerComponentRasters must have" + " SinglePixelPackedSampleModel"); } verify(); }