From: <gun...@us...> - 2007-07-28 01:06:13
|
Revision: 4752 http://dcm4che.svn.sourceforge.net/dcm4che/?rev=4752&view=rev Author: gunterze Date: 2007-07-27 18:06:10 -0700 (Fri, 27 Jul 2007) Log Message: ----------- [#DCM-98] Provide DicomObject.getShorts(..) method to retrieve SS/US/OW values as short[] Modified Paths: -------------- dcm4che2/trunk/dcm4che-core/src/main/java/org/dcm4che2/data/AbstractDicomObject.java dcm4che2/trunk/dcm4che-core/src/main/java/org/dcm4che2/data/BasicDicomObject.java dcm4che2/trunk/dcm4che-core/src/main/java/org/dcm4che2/data/DicomElement.java dcm4che2/trunk/dcm4che-core/src/main/java/org/dcm4che2/data/DicomObject.java dcm4che2/trunk/dcm4che-core/src/main/java/org/dcm4che2/data/FilteredDicomObject.java dcm4che2/trunk/dcm4che-core/src/main/java/org/dcm4che2/data/SequenceDicomElement.java dcm4che2/trunk/dcm4che-core/src/main/java/org/dcm4che2/data/SimpleDicomElement.java dcm4che2/trunk/dcm4che-core/src/main/java/org/dcm4che2/data/VR.java dcm4che2/trunk/dcm4che-core/src/main/java/org/dcm4che2/util/ByteUtils.java Modified: dcm4che2/trunk/dcm4che-core/src/main/java/org/dcm4che2/data/AbstractDicomObject.java =================================================================== --- dcm4che2/trunk/dcm4che-core/src/main/java/org/dcm4che2/data/AbstractDicomObject.java 2007-07-27 13:50:20 UTC (rev 4751) +++ dcm4che2/trunk/dcm4che-core/src/main/java/org/dcm4che2/data/AbstractDicomObject.java 2007-07-28 01:06:10 UTC (rev 4752) @@ -394,6 +394,22 @@ return a == null || a.isEmpty() ? defVal : a.getInts(cacheGet()); } + public short[] getShorts(int tag) { + return toShorts(get(tag)); + } + + public short[] getShorts(int tag, short[] defVal) { + return toShorts(get(tag), defVal); + } + + private short[] toShorts(DicomElement a) { + return a == null ? null : a.getShorts(cacheGet()); + } + + private short[] toShorts(DicomElement a, short[] defVal) { + return a == null || a.isEmpty() ? defVal : a.getShorts(cacheGet()); + } + public float getFloat(int tag) { return toFloat(get(tag), 0.f); } @@ -623,6 +639,14 @@ return toInts(get(tagPath), defVal); } + public short[] getShorts(int[] tagPath) { + return toShorts(get(tagPath)); + } + + public short[] getShorts(int[] tagPath, short[] defVal) { + return toShorts(get(tagPath), defVal); + } + public float getFloat(int[] tagPath) { return toFloat(get(tagPath), 0.f); } @@ -810,6 +834,13 @@ return item.putFragments(tagPath[last], vr, bigEndian); } + public DicomElement putShorts(int[] tagPath, VR vr, short[] val) { + checkTagPathLength(tagPath); + int last = tagPath.length - 1; + DicomObject item = getItem(tagPath, last, false); + return item.putShorts(tagPath[last], vr, val); + } + public DicomElement putInt(int[] tagPath, VR vr, int val) { checkTagPathLength(tagPath); int last = tagPath.length - 1; Modified: dcm4che2/trunk/dcm4che-core/src/main/java/org/dcm4che2/data/BasicDicomObject.java =================================================================== --- dcm4che2/trunk/dcm4che-core/src/main/java/org/dcm4che2/data/BasicDicomObject.java 2007-07-27 13:50:20 UTC (rev 4751) +++ dcm4che2/trunk/dcm4che-core/src/main/java/org/dcm4che2/data/BasicDicomObject.java 2007-07-28 01:06:10 UTC (rev 4752) @@ -398,6 +398,14 @@ return a; } + public DicomElement putShorts(int tag, VR vr, short[] val) { + final boolean be = bigEndian(); + if (vr == null) + vr = vrOf(tag); + return addInternal(new SimpleDicomElement(tag, vr, be, vr.toBytes(val, + be), cachePut ? val : null)); + } + public DicomElement putInt(int tag, VR vr, int val) { final boolean be = bigEndian(); if (vr == null) Modified: dcm4che2/trunk/dcm4che-core/src/main/java/org/dcm4che2/data/DicomElement.java =================================================================== --- dcm4che2/trunk/dcm4che-core/src/main/java/org/dcm4che2/data/DicomElement.java 2007-07-27 13:50:20 UTC (rev 4751) +++ dcm4che2/trunk/dcm4che-core/src/main/java/org/dcm4che2/data/DicomElement.java 2007-07-28 01:06:10 UTC (rev 4752) @@ -93,6 +93,8 @@ byte[] setFragment(int index, byte[] b); + short[] getShorts(boolean cache); + int getInt(boolean cache); int[] getInts(boolean cache); Modified: dcm4che2/trunk/dcm4che-core/src/main/java/org/dcm4che2/data/DicomObject.java =================================================================== --- dcm4che2/trunk/dcm4che-core/src/main/java/org/dcm4che2/data/DicomObject.java 2007-07-27 13:50:20 UTC (rev 4751) +++ dcm4che2/trunk/dcm4che-core/src/main/java/org/dcm4che2/data/DicomObject.java 2007-07-28 01:06:10 UTC (rev 4752) @@ -456,6 +456,32 @@ * (group, element) as 8 byte integer: ggggeeee. * @return */ + short[] getShorts(int tag); + + /** + * @param tag + * (group, element) as 8 byte integer: ggggeeee. + * @return + */ + short[] getShorts(int tag, short[] defVal); + + /** + * @param tagPath + * @return + */ + short[] getShorts(int[] tagPath); + + /** + * @param tagPath + * @return + */ + short[] getShorts(int[] tagPath, short[] defVal); + + /** + * @param tag + * (group, element) as 8 byte integer: ggggeeee. + * @return + */ float getFloat(int tag); /** @@ -828,6 +854,15 @@ * @param val * @return */ + DicomElement putShorts(int tag, VR vr, short[] val); + + /** + * @param tag + * (group, element) as 8 byte integer: ggggeeee. + * @param vr + * @param val + * @return + */ DicomElement putFloat(int tag, VR vr, float val); /** @@ -984,6 +1019,14 @@ * @param val * @return */ + DicomElement putShorts(int[] tagPath, VR vr, short[] val); + + /** + * @param tagPath + * @param vr + * @param val + * @return + */ DicomElement putFloat(int[] tagPath, VR vr, float val); /** Modified: dcm4che2/trunk/dcm4che-core/src/main/java/org/dcm4che2/data/FilteredDicomObject.java =================================================================== --- dcm4che2/trunk/dcm4che-core/src/main/java/org/dcm4che2/data/FilteredDicomObject.java 2007-07-27 13:50:20 UTC (rev 4751) +++ dcm4che2/trunk/dcm4che-core/src/main/java/org/dcm4che2/data/FilteredDicomObject.java 2007-07-28 01:06:10 UTC (rev 4752) @@ -389,6 +389,11 @@ throw new UnsupportedOperationException(); } + public DicomElement putShorts(int tag, VR vr, short[] val) + { + throw new UnsupportedOperationException(); + } + public DicomElement putNestedDicomObject(int tag, DicomObject item) { throw new IllegalArgumentException(TagUtils.toString(tag)); Modified: dcm4che2/trunk/dcm4che-core/src/main/java/org/dcm4che2/data/SequenceDicomElement.java =================================================================== --- dcm4che2/trunk/dcm4che-core/src/main/java/org/dcm4che2/data/SequenceDicomElement.java 2007-07-27 13:50:20 UTC (rev 4751) +++ dcm4che2/trunk/dcm4che-core/src/main/java/org/dcm4che2/data/SequenceDicomElement.java 2007-07-28 01:06:10 UTC (rev 4752) @@ -164,6 +164,14 @@ throw new UnsupportedOperationException(); } + public short getShort(boolean cache) { + throw new UnsupportedOperationException(); + } + + public short[] getShorts(boolean cache) { + throw new UnsupportedOperationException(); + } + public int getInt(boolean cache) { throw new UnsupportedOperationException(); } Modified: dcm4che2/trunk/dcm4che-core/src/main/java/org/dcm4che2/data/SimpleDicomElement.java =================================================================== --- dcm4che2/trunk/dcm4che-core/src/main/java/org/dcm4che2/data/SimpleDicomElement.java 2007-07-27 13:50:20 UTC (rev 4751) +++ dcm4che2/trunk/dcm4che-core/src/main/java/org/dcm4che2/data/SimpleDicomElement.java 2007-07-28 01:06:10 UTC (rev 4752) @@ -150,6 +150,15 @@ return value; } + public short[] getShorts(boolean cache) { + if (cache && cachedValue instanceof short[]) + return (short[]) cachedValue; + short[] val = vr.toShorts(value, bigEndian); + if (cache) + cachedValue = val; + return val; + } + public int getInt(boolean cache) { if (cache && cachedValue instanceof Integer) return ((Integer) cachedValue).intValue(); Modified: dcm4che2/trunk/dcm4che-core/src/main/java/org/dcm4che2/data/VR.java =================================================================== --- dcm4che2/trunk/dcm4che-core/src/main/java/org/dcm4che2/data/VR.java 2007-07-27 13:50:20 UTC (rev 4751) +++ dcm4che2/trunk/dcm4che-core/src/main/java/org/dcm4che2/data/VR.java 2007-07-28 01:06:10 UTC (rev 4752) @@ -419,6 +419,13 @@ : ByteUtils.ushorts2bytesLE(val); } + public byte[] toBytes(short[] val, boolean bigEndian) + { + return bigEndian + ? ByteUtils.shorts2bytesBE(val) + : ByteUtils.shorts2bytesLE(val); + } + public byte[] toBytes(String val, boolean bigEndian, SpecificCharacterSet cs) { @@ -436,6 +443,13 @@ return toBytes(t, bigEndian); } + public short[] toShorts(byte[] val, boolean bigEndian) + { + return bigEndian + ? ByteUtils.bytesBE2shorts(val) + : ByteUtils.bytesLE2shorts(val); + } + public String toString(byte[] val, boolean bigEndian, SpecificCharacterSet cs) { @@ -1463,6 +1477,20 @@ : ByteUtils.ushorts2bytesLE(val); } + public byte[] toBytes(short[] val, boolean bigEndian) + { + return bigEndian + ? ByteUtils.shorts2bytesBE(val) + : ByteUtils.shorts2bytesLE(val); + } + + public short[] toShorts(byte[] val, boolean bigEndian) + { + return bigEndian + ? ByteUtils.bytesBE2shorts(val) + : ByteUtils.bytesLE2shorts(val); + } + public int toInt(byte[] val, boolean bigEndian) { if (val == null || val.length == 0) @@ -2184,6 +2212,11 @@ throw new UnsupportedOperationException(); } + public byte[] toBytes(short[] val, boolean bigEndian) + { + throw new UnsupportedOperationException(); + } + public byte[] toBytes(float val, boolean bigEndian) { throw new UnsupportedOperationException(); @@ -2230,6 +2263,11 @@ throw new UnsupportedOperationException(); } + public short[] toShorts(byte[] val, boolean bigEndian) + { + throw new UnsupportedOperationException(); + } + public int toInt(byte[] val, boolean bigEndian) { throw new UnsupportedOperationException(); Modified: dcm4che2/trunk/dcm4che-core/src/main/java/org/dcm4che2/util/ByteUtils.java =================================================================== --- dcm4che2/trunk/dcm4che-core/src/main/java/org/dcm4che2/util/ByteUtils.java 2007-07-27 13:50:20 UTC (rev 4751) +++ dcm4che2/trunk/dcm4che-core/src/main/java/org/dcm4che2/util/ByteUtils.java 2007-07-28 01:06:10 UTC (rev 4752) @@ -206,6 +206,26 @@ return b; } + public static byte[] shorts2bytesLE(short[] val) + { + if (val == null) + return null; + byte[] b = new byte[val.length << 1]; + for (int i = 0; i < val.length; i++) + ushort2bytesLE(val[i], b, i << 1); + return b; + } + + public static byte[] shorts2bytesBE(short[] val) + { + if (val == null) + return null; + byte[] b = new byte[val.length << 1]; + for (int i = 0; i < val.length; i++) + ushort2bytesBE(val[i], b, i << 1); + return b; + } + public static int bytesLE2ushort(byte[] b, int off) { return bytesLE2sshort(b, off) & 0xffff; @@ -274,6 +294,30 @@ return val; } + public static short[] bytesLE2shorts(byte[] b) + { + if (b == null) + return null; + if ((b.length & 0x1) != 0) + throw new IllegalArgumentException("byte[" + b.length + "]"); + short[] val = new short[b.length >> 1]; + for (int i = 0; i < val.length; i++) + val[i] = (short) bytesLE2sshort(b, i << 1); + return val; + } + + public static short[] bytesBE2shorts(byte[] b) + { + if (b == null) + return null; + if ((b.length & 0x1) != 0) + throw new IllegalArgumentException("byte[" + b.length + "]"); + short[] val = new short[b.length >> 1]; + for (int i = 0; i < val.length; i++) + val[i] = (short) bytesBE2sshort(b, i << 1); + return val; + } + public static byte[] float2bytesLE(float val, byte[] b, int off) { return int2bytesLE(Float.floatToIntBits(val), b, off); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |