@Override public RealType<?> getType() { return imgPlus.firstElement(); }
@Override public <T extends RealType<T>> ImgPlus<T> typedImg(final T t) { final ImgPlus<? extends RealType<?>> img = getImgPlus(); if (t.getClass().isAssignableFrom(img.firstElement().getClass())) { @SuppressWarnings("unchecked") final ImgPlus<T> typedImg = (ImgPlus<T>) img; return typedImg; } return null; }
@Override public void setImgPlus(final ImgPlus<? extends RealType<?>> imgPlus) { final boolean wasRgbMerged = isRGBMerged(); // are types different boolean typeChanged = false; if (imgPlus.firstElement().getClass() != getType().getClass()) { typeChanged = true; } this.imgPlus = imgPlus; // NB - keeping all the old metadata for now. TODO - revisit this? // NB - keeping isRgbMerged status for now. TODO - revisit this? // set rgb merged status if (wasRgbMerged) { if (!mergedColorCompatible()) { setRGBMerged(false); } } rebuild(); if (typeChanged) typeChange(); }
/** Makes an image that has same type, container, and dimensions as refImage. */ private static <T extends RealType<T>> ImgPlus<T> createBlankCopy( final ImgPlus<T> img) { final long[] dimensions = new long[img.numDimensions()]; img.dimensions(dimensions); final Img<T> blankImg = img.factory().create(dimensions, img.firstElement()); return new ImgPlus<T>(blankImg, img); }
/** * {@inheritDoc} */ @Override public ImgPlus< T > createEmptyOutput( ImgPlus< T > op ) { AxisType[] axes = new AxisType[ op.numDimensions() ]; op.axes( axes ); m_isNewDim.clear(); for ( int d = 0; d < m_newDimensions.length; d++ ) { for ( int a = 0; a < axes.length; a++ ) { if ( !axes[ a ].getLabel().equals( m_newDimensions[ d ] ) ) { m_isNewDim.set( d ); } } } long[] newDims = new long[ op.numDimensions() + m_isNewDim.cardinality() ]; Arrays.fill( newDims, 1 ); for ( int i = 0; i < op.numDimensions(); i++ ) { newDims[ i ] = op.dimension( i ); } return new ImgPlus< T >( op.factory().create( newDims, op.firstElement().createVariable() ) ); }
/** * {@inheritDoc} */ @Override public ImgPlus< T > createEmptyOutput( ImgPlus< T > op ) { BitSet isLength1 = new BitSet( op.numDimensions() ); for ( int d = 0; d < op.numDimensions(); d++ ) { if ( op.dimension( d ) == 1 ) { isLength1.set( d ); } } long[] min = new long[ op.numDimensions() - isLength1.cardinality() ]; long[] max = new long[ min.length ]; int d = 0; for ( int i = 0; i < op.numDimensions(); i++ ) { if ( !isLength1.get( i ) ) { max[ d ] = op.dimension( i ) - 1; d++; } } Img< T > res = op.factory().create( new FinalInterval( min, max ), op.firstElement().createVariable() ); return new ImgPlus< T >( res ); }