예제 #1
0
  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();
  }