/******************************************************************************************************************* * * {@inheritDoc} * ******************************************************************************************************************/ @Override @Nonnull public ImageModel createImageModel (final @Nonnull BufferedImage bufferedImage) { return new ImageModelJAI(bufferedImage); }
/******************************************************************************************************************* * * * ******************************************************************************************************************/ public ImageModelJAI (final @Nonnull Object planarImage) { super(get(planarImage)); if (!(get(planarImage) instanceof PlanarImage)) { throw new IllegalArgumentException("planarImage is not an instance of PlanarImage or RenderedImage"); } // System.err.println("CREATED PlanarImage, id: " + getId() + ", planarImage: " + planarImage); }
/******************************************************************************************************************* * * {@inheritDoc} * ******************************************************************************************************************/ @Nonnull @Override public ColorModel getColorModel() { return getPlanarImage().getColorModel(); }
/******************************************************************************************************************* * * {@inheritDoc} * ******************************************************************************************************************/ @Nonnull @Override public EditableImage createCopy (final boolean copyContents) { final TiledImage image2 = new TiledImage(getPlanarImage(), false); if (copyContents) { image2.setData(getPlanarImage().getData()); // FIXME: getData() creates a copy! } return createImage(image2); }
/******************************************************************************************************************* * * {@inheritDoc} * ******************************************************************************************************************/ @Nonnegative @Override public int getHeight() { return getPlanarImage().getHeight(); }
/******************************************************************************************************************* * * FIXME: this is probably not the best way of working. You're reading a BufferedImage by means of an ImageReader * and later converting it to a PlanarImage. But JAI has its own way to read images which is probably more * efficient. You need to change EditableImage read() methods to incapsulate ImageReaders and find a way to * preferably use JAI readers for supported file types, and ImageReaders for other types. * ******************************************************************************************************************/ @Nonnull public static EditableImage createImage (final @Nonnull RenderedImage renderedImage) { return new EditableImage(new ImageModelJAI(renderedImage)); }
/******************************************************************************************************************* * * {@inheritDoc} * ******************************************************************************************************************/ @Nonnull @Override protected RenderedImage toRenderedImageForSerialization() { return getPlanarImage().getAsBufferedImage(); }
/******************************************************************************************************************* * * {@inheritDoc} * ******************************************************************************************************************/ @Nonnull @Override public ImageModel convertFrom (final @Nonnull Object image) { if (image instanceof RenderedImage) { return new ImageModelJAI(PlanarImage.wrapRenderedImage((RenderedImage)image)); } throw new UnsupportedOperationException(""); }
/******************************************************************************************************************* * * {@inheritDoc} * ******************************************************************************************************************/ @Nonnegative @Override public int getWidth() { return getPlanarImage().getWidth(); }
/******************************************************************************************************************* * * {@inheritDoc} * ******************************************************************************************************************/ @Nonnull @Override public EditableImage.DataType getDataType() { return (getPlanarImage() == null) ? null : EditableImage.DataType.valueOf(getPlanarImage().getSampleModel().getDataType()); }
/******************************************************************************************************************* * * {@inheritDoc} * ******************************************************************************************************************/ @Nonnull @Override public <T> T getInnerProperty (final @Nonnull Class<T> propertyClass) { if (propertyClass.equals(PlanarImage.class)) { return (T)getPlanarImage(); } if (propertyClass.equals(SampleModel.class)) { return (T)getPlanarImage().getSampleModel(); } if (propertyClass.equals(ColorModel.class)) { return (T)getPlanarImage().getColorModel(); } throw new IllegalArgumentException(propertyClass.getName()); }
/******************************************************************************************************************* * * {@inheritDoc} * ******************************************************************************************************************/ @Nonnegative @Override public int getBandCount() { return getPlanarImage().getSampleModel().getNumBands(); }
/******************************************************************************************************************* * * {@inheritDoc} * ******************************************************************************************************************/ @Override public void dispose() { getPlanarImage().dispose(); super.dispose(); }