📄 imagecomponent3d.java
字号:
/** * Retrieves one of the images from this ImageComponent3D object. If the * data access mode is not by-reference, then a copy of the image * is made. If the data access mode is by-reference, then the * reference is returned. * * @param index the index of the image to retrieve. * The index must be less than the depth of this ImageComponent3D object. * * @return either a new RenderedImage object created from the data * in this image component, or the RenderedImage object referenced * by this image component. * * @exception CapabilityNotSetException if appropriate capability is * not set and this object is part of live or compiled scene graph * * @exception IllegalStateException if the image class is not one of: * ImageClass.BUFFERED_IMAGE or ImageClass.RENDERED_IMAGE. * * @since Java 3D 1.2 */ public RenderedImage getRenderedImage(int index) { if (isLiveOrCompiled()) if(!this.getCapability(ImageComponent.ALLOW_IMAGE_READ)) throw new CapabilityNotSetException(J3dI18N.getString("ImageComponent3D3")); return ((ImageComponent3DRetained)this.retained).getImage(index); } /** * Retrieves one of the images from this ImageComponent3D object. If the * data access mode is not by-reference, then a copy of the image * is made. If the data access mode is by-reference, then the * reference is returned. * * @param index the index of the image to retrieve. * The index must be less than the depth of this ImageComponent3D object. * * @return either a new NioImageBuffer object created from the data * in this image component, or the NioImageBuffer object referenced * by this image component. * * @exception CapabilityNotSetException if appropriate capability is * not set and this object is part of live or compiled scene graph * * @exception IllegalStateException if the image class is not * ImageClass.NIO_IMAGE_BUFFER. * * @exception UnsupportedOperationException this method is not supported * for Java 3D 1.5. * * @since Java 3D 1.5 */ public NioImageBuffer getNioImage(int index) { throw new UnsupportedOperationException(); } /** * Modifies a contiguous subregion of a particular slice of * image of this ImageComponent3D object. * Block of data of dimension (width * height) * starting at the offset (srcX, srcY) of the specified * RenderedImage object will be copied into the particular slice of * image component * starting at the offset (dstX, dstY) of this ImageComponent3D object. * The specified RenderedImage object must be of the same format as * the current format of this object. * This method can only be used if the data access mode is * by-copy. If it is by-reference, see updateData(). * * @param index index of the image to be modified. * The index must be less than the depth of this ImageComponent3D object. * @param image RenderedImage object containing the subimage. * @param width width of the subregion. * @param height height of the subregion. * @param srcX starting X offset of the subregion in the specified image. * @param srcY starting Y offset of the subregion in the specified image. * @param dstX startin X offset of the subregion in the image * component of this object. * @param dstY starting Y offset of the subregion in the image * component of this object. * * @exception CapabilityNotSetException if appropriate capability is * not set and this object is part of live or compiled scene graph * * @exception IllegalStateException if the data access mode is * <code>BY_REFERENCE</code>. * * @exception IllegalArgumentException if <code>width</code> or * <code>height</code> of * the subregion exceeds the dimension of the image in this object. * * @exception IllegalArgumentException if <code>dstX</code> < 0, or * (<code>dstX</code> + <code>width</code>) > width of this object, or * <code>dstY</code> < 0, or * (<code>dstY</code> + <code>height</code>) > height of this object. * * @exception IllegalArgumentException if <code>srcX</code> < 0, or * (<code>srcX</code> + <code>width</code>) > width of the RenderedImage * object containing the subimage, or * <code>srcY</code> < 0, or * (<code>srcY</code> + <code>height</code>) > height of the * RenderedImage object containing the subimage. * * @exception IllegalArgumentException if the specified RenderedImage * is not compatible with the existing RenderedImage. * * @exception IllegalStateException if the image class is not one of: * ImageClass.BUFFERED_IMAGE or ImageClass.RENDERED_IMAGE. * * @since Java 3D 1.3 */ public void setSubImage(int index, RenderedImage image, int width, int height, int srcX, int srcY, int dstX, int dstY) { if (isLiveOrCompiled() && !this.getCapability(ALLOW_IMAGE_WRITE)) { throw new CapabilityNotSetException( J3dI18N.getString("ImageComponent3D5")); } if (((ImageComponent3DRetained)this.retained).isByReference()) { throw new IllegalStateException( J3dI18N.getString("ImageComponent3D8")); } int w = ((ImageComponent3DRetained)this.retained).getWidth(); int h = ((ImageComponent3DRetained)this.retained).getHeight(); if ((srcX < 0) || (srcY < 0) || ((srcX + width) > w) || ((srcY + height) > h) || (dstX < 0) || (dstY < 0) || ((dstX + width) > w) || ((dstY + height) > h)) { throw new IllegalArgumentException( J3dI18N.getString("ImageComponent3D7")); } ((ImageComponent3DRetained)this.retained).setSubImage( index, image, width, height, srcX, srcY, dstX, dstY); } /** * Updates a particular slice of image data that is accessed by reference. * This method calls the updateData method of the specified * ImageComponent3D.Updater object to synchronize updates to the * image data that is referenced by this ImageComponent3D object. * Applications that wish to modify such data must perform all * updates via this method. * <p> * The data to be modified has to be within the boundary of the * subregion * specified by the offset (x, y) and the dimension (width*height). * It is illegal to modify data outside this boundary. If any * referenced data is modified outside the updateData method, or * any data outside the specified boundary is modified, the * results are undefined. * <p> * @param updater object whose updateData callback method will be * called to update the data referenced by this ImageComponent3D object. * @param index index of the image to be modified. * The index must be less than the depth of this ImageComponent3D object. * @param x starting X offset of the subregion. * @param y starting Y offset of the subregion. * @param width width of the subregion. * @param height height of the subregion. * * @exception CapabilityNotSetException if appropriate capability is * not set and this object is part of live or compiled scene graph * @exception IllegalStateException if the data access mode is * <code>BY_COPY</code>. * @exception IllegalArgumentException if <code>width</code> or * <code>height</code> of * the subregion exceeds the dimension of the image in this object. * @exception IllegalArgumentException if <code>x</code> < 0, or * (<code>x</code> + <code>width</code>) > width of this object, or * <code>y</code> < 0, or * (<code>y</code> + <code>height</code>) > height of this object. * @exception ArrayIndexOutOfBoundsException if <code>index</code> > the * depth of this object. * * @since Java 3D 1.3 */ public void updateData(Updater updater, int index, int x, int y, int width, int height) { if (isLiveOrCompiled() && !this.getCapability(ALLOW_IMAGE_WRITE)) { throw new CapabilityNotSetException( J3dI18N.getString("ImageComponent3D5")); } if (!((ImageComponent3DRetained)this.retained).isByReference()) { throw new IllegalStateException( J3dI18N.getString("ImageComponent3D6")); } int w = ((ImageComponent3DRetained)this.retained).getWidth(); int h = ((ImageComponent3DRetained)this.retained).getHeight(); if ((x < 0) || (y < 0) || ((x + width) > w) || ((y + height) > h)) { throw new IllegalArgumentException( J3dI18N.getString("ImageComponent3D7")); } ((ImageComponent3DRetained)this.retained).updateData( updater, index, x, y, width, height); } /** * Creates a retained mode ImageComponent3DRetained object that this * ImageComponent3D component object will point to. */ void createRetained() { this.retained = new ImageComponent3DRetained(); this.retained.setSource(this); } /** * @deprecated replaced with cloneNodeComponent(boolean forceDuplicate) */ public NodeComponent cloneNodeComponent() { ImageComponent3DRetained rt = (ImageComponent3DRetained) retained; ImageComponent3D img = new ImageComponent3D(rt.getFormat(), rt.width, rt.height, rt.depth); // XXXX : replace by this to duplicate other attributes /* ImageComponent3D img = new ImageComponent3D(rt.format, rt.width, rt.height, rt.depth, rt.byReference, rt.yUp); */ img.duplicateNodeComponent(this); return img; } /** * Copies all node information from <code>originalNodeComponent</code> into * the current node. This method is called from the * <code>duplicateNode</code> method. This routine does * the actual duplication of all "local data" (any data defined in * this object). * * @param originalNodeComponent the original node to duplicate. * @param forceDuplicate when set to <code>true</code>, causes the * <code>duplicateOnCloneTree</code> flag to be ignored. When * <code>false</code>, the value of each node's * <code>duplicateOnCloneTree</code> variable determines whether * NodeComponent data is duplicated or copied. * * @see Node#cloneTree * @see NodeComponent#setDuplicateOnCloneTree */ void duplicateAttributes(NodeComponent originalNodeComponent, boolean forceDuplicate) { super.duplicateAttributes(originalNodeComponent, forceDuplicate); // TODO : Handle NioImageBuffer if its supported. RenderedImage imgs[] = ((ImageComponent3DRetained) originalNodeComponent.retained).getImage(); if (imgs != null) { ImageComponent3DRetained rt = (ImageComponent3DRetained) retained; for (int i=rt.depth-1; i>=0; i--) { if (imgs[i] != null) { rt.set(i, imgs[i]); } } } } /** * The ImageComponent3D.Updater interface is used in updating image data * that is accessed by reference from a live or compiled ImageComponent * object. Applications that wish to modify such data must define a * class that implements this interface. An instance of that class is * then passed to the <code>updateData</code> method of the * ImageComponent object to be modified. * * @since Java 3D 1.3 */ public static interface Updater { /** * Updates image data that is accessed by reference. * This method is called by the updateData method of an * ImageComponent object to effect * safe updates to image data that * is referenced by that object. Applications that wish to modify * such data must implement this method and perform all updates * within it. * <br> * NOTE: Applications should <i>not</i> call this method directly. * * @param imageComponent the ImageComponent object being updated. * @param index index of the image to be modified. * @param x starting X offset of the subregion. * @param y starting Y offset of the subregion. * @param width width of the subregion. * @param height height of the subregion. * * @see ImageComponent3D#updateData */ public void updateData(ImageComponent3D imageComponent, int index, int x, int y, int width, int height); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -