Example #1
0
 private int[] getActiveOverlayGroupOffsets(ImageReadParam param) {
   if (param instanceof DicomImageReadParam) {
     DicomImageReadParam dParam = (DicomImageReadParam) param;
     Attributes psAttrs = dParam.getPresentationState();
     if (psAttrs != null) return Overlays.getActiveOverlayGroupOffsets(psAttrs);
     else
       return Overlays.getActiveOverlayGroupOffsets(
           metadata.getAttributes(), dParam.getOverlayActivationMask());
   }
   return Overlays.getActiveOverlayGroupOffsets(metadata.getAttributes(), 0xffff);
 }
Example #2
0
 private void applyOverlay(
     int gg0000,
     WritableRaster raster,
     int frameIndex,
     ImageReadParam param,
     int outBits,
     byte[] ovlyData) {
   Attributes ovlyAttrs = metadata.getAttributes();
   int grayscaleValue = 0xffff;
   if (param instanceof DicomImageReadParam) {
     DicomImageReadParam dParam = (DicomImageReadParam) param;
     Attributes psAttrs = dParam.getPresentationState();
     if (psAttrs != null) {
       if (psAttrs.containsValue(Tag.OverlayData | gg0000)) ovlyAttrs = psAttrs;
       grayscaleValue = Overlays.getRecommendedDisplayGrayscaleValue(psAttrs, gg0000);
     } else grayscaleValue = dParam.getOverlayGrayscaleValue();
   }
   Overlays.applyOverlay(
       ovlyData != null ? 0 : frameIndex,
       raster,
       ovlyAttrs,
       gg0000,
       grayscaleValue >>> (16 - outBits),
       ovlyData);
 }
Example #3
0
  private byte[] extractOverlay(int gg0000, WritableRaster raster) {
    Attributes attrs = metadata.getAttributes();

    if (attrs.getInt(Tag.OverlayBitsAllocated | gg0000, 1) == 1) return null;

    int ovlyRows = attrs.getInt(Tag.OverlayRows | gg0000, 0);
    int ovlyColumns = attrs.getInt(Tag.OverlayColumns | gg0000, 0);
    int bitPosition = attrs.getInt(Tag.OverlayBitPosition | gg0000, 0);

    int mask = 1 << bitPosition;
    int length = ovlyRows * ovlyColumns;

    byte[] ovlyData = new byte[(((length + 7) >>> 3) + 1) & (~1)];
    Overlays.extractFromPixeldata(raster, mask, ovlyData, 0, length);
    return ovlyData;
  }
Example #4
0
 private WritableRaster applyLUTs(
     WritableRaster raster, int frameIndex, ImageReadParam param, SampleModel sm, int outBits) {
   WritableRaster destRaster =
       sm.getDataType() == raster.getSampleModel().getDataType()
           ? raster
           : Raster.createWritableRaster(sm, null);
   Attributes imgAttrs = metadata.getAttributes();
   StoredValue sv = StoredValue.valueOf(imgAttrs);
   LookupTableFactory lutParam = new LookupTableFactory(sv);
   DicomImageReadParam dParam =
       param instanceof DicomImageReadParam
           ? (DicomImageReadParam) param
           : new DicomImageReadParam();
   Attributes psAttrs = dParam.getPresentationState();
   if (psAttrs != null) {
     lutParam.setModalityLUT(psAttrs);
     lutParam.setVOI(
         selectVOILUT(psAttrs, imgAttrs.getString(Tag.SOPInstanceUID), frameIndex + 1),
         0,
         0,
         false);
     lutParam.setPresentationLUT(psAttrs);
   } else {
     Attributes sharedFctGroups = imgAttrs.getNestedDataset(Tag.SharedFunctionalGroupsSequence);
     Attributes frameFctGroups =
         imgAttrs.getNestedDataset(Tag.PerFrameFunctionalGroupsSequence, frameIndex);
     lutParam.setModalityLUT(
         selectFctGroup(
             imgAttrs, sharedFctGroups, frameFctGroups, Tag.PixelValueTransformationSequence));
     if (dParam.getWindowWidth() != 0) {
       lutParam.setWindowCenter(dParam.getWindowCenter());
       lutParam.setWindowWidth(dParam.getWindowWidth());
     } else
       lutParam.setVOI(
           selectFctGroup(imgAttrs, sharedFctGroups, frameFctGroups, Tag.FrameVOILUTSequence),
           dParam.getWindowIndex(),
           dParam.getVOILUTIndex(),
           dParam.isPreferWindow());
     if (dParam.isAutoWindowing()) lutParam.autoWindowing(imgAttrs, raster);
     lutParam.setPresentationLUT(imgAttrs);
   }
   LookupTable lut = lutParam.createLUT(outBits);
   lut.lookup(raster, destRaster);
   return destRaster;
 }
Example #5
0
 private ColorModel createColorModel(int bits, int dataType) {
   return pmi.createColorModel(bits, dataType, metadata.getAttributes());
 }