Package com.pixelmed.display

## Class DicomImageBlackout

- java.lang.Object
- - java.awt.Component
  - - java.awt.Container
    - - java.awt.Window
      - - java.awt.Frame
        - - javax.swing.JFrame
          - - com.pixelmed.display.DicomImageBlackout

- All Implemented Interfaces:
    `java.awt.image.ImageObserver`, `java.awt.MenuContainer`, `java.io.Serializable`, `javax.accessibility.Accessible`, `javax.swing.RootPaneContainer`, `javax.swing.WindowConstants`
  Direct Known Subclasses:
    `DicomCleaner.OurDicomImageBlackout`

      public class DicomImageBlackout
      extends javax.swing.JFrame

  This class displays images and allows the user to black out burned-in annotation, and save the result.

  A main method is provided, which can be supplied with a list of file names or pop up a file chooser dialog.

  See Also:
    Serialized Form

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class | Description
    --- | --- | ---
    `protected class` | `DicomImageBlackout.ApplyActionListener` |
    `protected class` | `DicomImageBlackout.ApplySaveAllActionListener` |
    `class` | `DicomImageBlackout.BurnedInAnnotationFlagAction` | A class of values for the Burned in Annotation action argument of the `DicomImageBlackout()` constructor.
    `protected class` | `DicomImageBlackout.CancelActionListener` |
    `protected class` | `DicomImageBlackout.CenterMaximumAfterInitialSizeLayout` |
    `protected class` | `DicomImageBlackout.CineSliderChangeListener` |
    `class` | `DicomImageBlackout.DefaultStatusNotificationHandler` | A default status notification implementation, which just writes everything to stderr.
    `protected class` | `DicomImageBlackout.NextActionListener` |
    `protected class` | `DicomImageBlackout.OverlaysChangeListener` |
    `protected class` | `DicomImageBlackout.PixelPaddingBlackoutValueChangeListener` |
    `protected class` | `DicomImageBlackout.PreviousActionListener` |
    `protected class` | `DicomImageBlackout.SaveActionListener` |
    `class` | `DicomImageBlackout.StatusNotificationHandler` | An abstract class for the user of to supply a callback notification method, supplied as an argument of the `DicomImageBlackout()` constructor.
    `protected class` | `DicomImageBlackout.ZeroBlackoutValueChangeListener` |

    - ### Nested classes/interfaces inherited from class javax.swing.JFrame

      `javax.swing.JFrame.AccessibleJFrame`

    - ### Nested classes/interfaces inherited from class java.awt.Frame

      `java.awt.Frame.AccessibleAWTFrame`

    - ### Nested classes/interfaces inherited from class java.awt.Window

      `java.awt.Window.AccessibleAWTWindow, java.awt.Window.Type`

    - ### Nested classes/interfaces inherited from class java.awt.Container

      `java.awt.Container.AccessibleAWTContainer`

    - ### Nested classes/interfaces inherited from class java.awt.Component

      `java.awt.Component.AccessibleAWTComponent, java.awt.Component.BaselineResizeBehavior, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy`

  - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `protected DicomImageBlackout.ApplyActionListener` | `applyActionListener` |
    `protected javax.swing.JButton` | `blackoutApplyButton` |
    `protected javax.swing.JButton` | `blackoutNextButton` |
    `protected javax.swing.JButton` | `blackoutPreviousButton` |
    `protected javax.swing.JButton` | `blackoutSaveButton` |
    `protected int` | `burnedinflag` |
    `protected boolean` | `burnInOverlays` |
    `protected boolean` | `changesWereMade` |
    `protected javax.swing.JSlider` | `cineSlider` |
    `protected DicomImageBlackout.CineSliderChangeListener` | `cineSliderChangeListener` |
    `protected javax.swing.JPanel` | `cineSliderControlsPanel` |
    `protected java.lang.String` | `currentFileName` |
    `protected int` | `currentFileNumber` |
    `protected boolean` | `deferredDecompression` |
    `protected java.lang.String[]` | `dicomFileNames` |
    `protected SingleImagePanel` | `imagePanel` |
    `protected javax.swing.JLabel` | `imagesRemainingLabel` |
    `protected AttributeList` | `list` |
    `protected javax.swing.Box` | `mainPanel` |
    `protected javax.swing.JPanel` | `multiPanel` |
    `protected DicomImageBlackout.NextActionListener` | `nextActionListener` |
    `protected java.lang.String` | `ourAETitle` |
    `protected EventContext` | `ourEventContext` |
    `protected com.pixelmed.display.DicomImageBlackout.OurFrameSelectionChangeListener` | `ourFrameSelectionChangeListener` |
    `protected DicomImageBlackout.PreviousActionListener` | `previousActionListener` |
    `protected int` | `previousColumns` |
    `protected java.util.Vector` | `previousPersistentDrawingShapes` |
    `protected int` | `previousRows` |
    `protected java.io.File` | `redactedJPEGFile` |
    `protected java.util.ResourceBundle` | `resourceBundle` |
    `protected static java.lang.String` | `resourceBundleName` |
    `protected DicomImageBlackout.SaveActionListener` | `saveActionListener` |
    `protected SourceImage` | `sImg` |
    `protected DicomImageBlackout.StatusNotificationHandler` | `statusNotificationHandler` |
    `protected boolean` | `usedjpegblockredaction` |
    `protected boolean` | `usePixelPaddingBlackoutValue` |
    `protected javax.swing.JCheckBox` | `usePixelPaddingBlackoutValueCheckBox` |
    `protected boolean` | `useZeroBlackoutValue` |
    `protected javax.swing.JCheckBox` | `useZeroBlackoutValueCheckBox` |

    - ### Fields inherited from class javax.swing.JFrame

      `accessibleContext, rootPane, rootPaneCheckingEnabled`

    - ### Fields inherited from class java.awt.Frame

      `ICONIFIED, MAXIMIZED_BOTH, MAXIMIZED_HORIZ, MAXIMIZED_VERT, NORMAL`

    - ### Fields inherited from class java.awt.Component

      `BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT`

    - ### Fields inherited from interface java.awt.image.ImageObserver

      `ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH`

    - ### Fields inherited from interface javax.swing.WindowConstants

      `DISPOSE_ON_CLOSE, DO_NOTHING_ON_CLOSE, EXIT_ON_CLOSE, HIDE_ON_CLOSE`

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `DicomImageBlackout​(java.lang.String[] dicomFileNames, DicomImageBlackout.StatusNotificationHandler snh, int burnedinflag)` | Opens a window to display the supplied list of DICOM files to allow them to have burned in annotation blacked out.
    `DicomImageBlackout​(java.lang.String title, java.lang.String[] dicomFileNames, DicomImageBlackout.StatusNotificationHandler snh, int burnedinflag)` | Opens a window to display the supplied list of DICOM files to allow them to have burned in annotation blacked out.

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `protected void` | `addSingleImagePanelToMultiPanelAndEstablishLayout()` |
    `protected void` | `addSingleImagePanelToMultiPanelAndEstablishLayoutWithCenterMaximumAfterInitialSizeLayout()` |
    `protected void` | `buildUIComponents()` |
    `protected java.awt.Dimension` | `changeDimensionToFitInMaximumAvailable​(java.awt.Dimension useDimension, java.awt.Dimension maxDimension, boolean onlySmaller)` |
    `protected void` | `createCineSliderIfNecessary​(int min, int max, int value)` |
    `void` | `deconstruct()` |
    `void` | `dispose()` |
    `protected void` | `finalize()` |
    `protected double` | `getScaleFactorToFitInMaximumAvailable​(double useWidth, double useHeight, double maxWidth, double maxHeight)` |
    `protected void` | `loadDicomFileOrDirectory​(java.io.File currentFile)` | Load the named DICOM file and display it in the image panel.
    `protected void` | `loadDicomFileOrDirectory​(java.lang.String dicomFileName)` | Load the named DICOM file and display it in the image panel.
    `static void` | `main​(java.lang.String[] arg)` | The method to invoke the application.
    `protected void` | `recordStateOfDrawingShapesForFileChange()` |
    `protected java.awt.Dimension` | `reduceDimensionToFitInMaximumAvailable​(java.awt.Dimension useDimension)` |
    `protected void` | `showUIComponents()` |
    `protected void` | `updateDisplayedFileNumber​(int current, int total)` |

    - ### Methods inherited from class javax.swing.JFrame

      `addImpl, createRootPane, frameInit, getAccessibleContext, getContentPane, getDefaultCloseOperation, getGlassPane, getGraphics, getJMenuBar, getLayeredPane, getRootPane, getTransferHandler, isDefaultLookAndFeelDecorated, isRootPaneCheckingEnabled, paramString, processWindowEvent, remove, repaint, setContentPane, setDefaultCloseOperation, setDefaultLookAndFeelDecorated, setGlassPane, setIconImage, setJMenuBar, setLayeredPane, setLayout, setRootPane, setRootPaneCheckingEnabled, setTransferHandler, update`

    - ### Methods inherited from class java.awt.Frame

      `addNotify, getExtendedState, getFrames, getIconImage, getMaximizedBounds, getMenuBar, getState, getTitle, isResizable, isUndecorated, remove, removeNotify, setBackground, setExtendedState, setMaximizedBounds, setMenuBar, setOpacity, setResizable, setShape, setState, setTitle, setUndecorated`

    - ### Methods inherited from class java.awt.Window

      `addPropertyChangeListener, addPropertyChangeListener, addWindowFocusListener, addWindowListener, addWindowStateListener, createBufferStrategy, createBufferStrategy, getBackground, getBufferStrategy, getFocusableWindowState, getFocusCycleRootAncestor, getFocusOwner, getFocusTraversalKeys, getIconImages, getInputContext, getListeners, getLocale, getModalExclusionType, getMostRecentFocusOwner, getOpacity, getOwnedWindows, getOwner, getOwnerlessWindows, getShape, getToolkit, getType, getWarningString, getWindowFocusListeners, getWindowListeners, getWindows, getWindowStateListeners, isActive, isAlwaysOnTop, isAlwaysOnTopSupported, isAutoRequestFocus, isFocusableWindow, isFocusCycleRoot, isFocused, isLocationByPlatform, isOpaque, isShowing, isValidateRoot, pack, paint, processEvent, processWindowFocusEvent, processWindowStateEvent, removeWindowFocusListener, removeWindowListener, removeWindowStateListener, setAlwaysOnTop, setAutoRequestFocus, setBounds, setBounds, setCursor, setFocusableWindowState, setFocusCycleRoot, setIconImages, setLocation, setLocation, setLocationByPlatform, setLocationRelativeTo, setMinimumSize, setModalExclusionType, setSize, setSize, setType, setVisible, toBack, toFront`

    - ### Methods inherited from class java.awt.Container

      `add, add, add, add, add, addContainerListener, applyComponentOrientation, areFocusTraversalKeysSet, doLayout, findComponentAt, findComponentAt, getAlignmentX, getAlignmentY, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalPolicy, getInsets, getLayout, getMaximumSize, getMinimumSize, getMousePosition, getPreferredSize, invalidate, isAncestorOf, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, list, list, paintComponents, print, printComponents, processContainerEvent, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusTraversalKeys, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setFont, transferFocusDownCycle, validate, validateTree`

    - ### Methods inherited from class java.awt.Component

      `add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, checkImage, checkImage, coalesceEvents, contains, contains, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBaseline, getBaselineResizeBehavior, getBounds, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getFontMetrics, getForeground, getGraphicsConfiguration, getHeight, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocation, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getSize, getTreeLock, getWidth, getX, getY, hasFocus, imageUpdate, isBackgroundSet, isCursorSet, isDisplayable, isDoubleBuffered, isEnabled, isFocusable, isFocusOwner, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isValid, isVisible, list, list, list, paintAll, prepareImage, prepareImage, printAll, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processKeyEvent, processMouseEvent, processMouseMotionEvent, processMouseWheelEvent, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, requestFocus, requestFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, requestFocusInWindow, revalidate, setComponentOrientation, setDropTarget, setEnabled, setFocusable, setFocusTraversalKeysEnabled, setForeground, setIgnoreRepaint, setLocale, setMaximumSize, setMixingCutoutShape, setName, setPreferredSize, toString, transferFocus, transferFocusBackward, transferFocusUpCycle`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, getClass, hashCode, notify, notifyAll, wait, wait, wait`

    - ### Methods inherited from interface java.awt.MenuContainer

      `getFont`

- - ### Field Detail

    - #### resourceBundleName

          protected static java.lang.String resourceBundleName

    - #### resourceBundle

          protected java.util.ResourceBundle resourceBundle

    - #### ourAETitle

          protected java.lang.String ourAETitle

    - #### dicomFileNames

          protected java.lang.String[] dicomFileNames

    - #### currentFileName

          protected java.lang.String currentFileName

    - #### currentFileNumber

          protected int currentFileNumber

    - #### mainPanel

          protected javax.swing.Box mainPanel

    - #### multiPanel

          protected javax.swing.JPanel multiPanel

    - #### imagePanel

          protected SingleImagePanel imagePanel

    - #### list

          protected AttributeList list

    - #### sImg

          protected SourceImage sImg

    - #### changesWereMade

          protected boolean changesWereMade

    - #### usedjpegblockredaction

          protected boolean usedjpegblockredaction

    - #### deferredDecompression

          protected boolean deferredDecompression

    - #### redactedJPEGFile

          protected java.io.File redactedJPEGFile

    - #### previousRows

          protected int previousRows

    - #### previousColumns

          protected int previousColumns

    - #### previousPersistentDrawingShapes

          protected java.util.Vector previousPersistentDrawingShapes

    - #### cineSliderControlsPanel

          protected javax.swing.JPanel cineSliderControlsPanel

    - #### cineSliderChangeListener

          protected DicomImageBlackout.CineSliderChangeListener cineSliderChangeListener

    - #### cineSlider

          protected javax.swing.JSlider cineSlider

    - #### imagesRemainingLabel

          protected javax.swing.JLabel imagesRemainingLabel

    - #### ourEventContext

          protected EventContext ourEventContext

    - #### burnInOverlays

          protected boolean burnInOverlays

    - #### useZeroBlackoutValue

          protected boolean useZeroBlackoutValue

    - #### usePixelPaddingBlackoutValue

          protected boolean usePixelPaddingBlackoutValue

    - #### useZeroBlackoutValueCheckBox

          protected javax.swing.JCheckBox useZeroBlackoutValueCheckBox

    - #### usePixelPaddingBlackoutValueCheckBox

          protected javax.swing.JCheckBox usePixelPaddingBlackoutValueCheckBox

    - #### ourFrameSelectionChangeListener

          protected com.pixelmed.display.DicomImageBlackout.OurFrameSelectionChangeListener ourFrameSelectionChangeListener

    - #### burnedinflag

          protected int burnedinflag

    - #### statusNotificationHandler

          protected DicomImageBlackout.StatusNotificationHandler statusNotificationHandler

    - #### applyActionListener

          protected DicomImageBlackout.ApplyActionListener applyActionListener

    - #### saveActionListener

          protected DicomImageBlackout.SaveActionListener saveActionListener

    - #### nextActionListener

          protected DicomImageBlackout.NextActionListener nextActionListener

    - #### previousActionListener

          protected DicomImageBlackout.PreviousActionListener previousActionListener

    - #### blackoutApplyButton

          protected javax.swing.JButton blackoutApplyButton

    - #### blackoutSaveButton

          protected javax.swing.JButton blackoutSaveButton

    - #### blackoutNextButton

          protected javax.swing.JButton blackoutNextButton

    - #### blackoutPreviousButton

          protected javax.swing.JButton blackoutPreviousButton

  - ### Constructor Detail

    - #### DicomImageBlackout

          public DicomImageBlackout​(java.lang.String[] dicomFileNames,
                                    DicomImageBlackout.StatusNotificationHandler snh,
                                    int burnedinflag)

      Opens a window to display the supplied list of DICOM files to allow them to have burned in annotation blacked out.

      Each file will be processed sequentially, with the edited pixel data overwriting the original file.

      Parameters:
        `dicomFileNames` - the list of file names to process, if null a file chooser dialog will be raised
        `snh` - an instance of `StatusNotificationHandler`; if null, a default handler will be used that writes to stderr
        `burnedinflag` - whether or not and under what circumstances to to add/change BurnedInAnnotation attribute; takes one of the values of `BurnedInAnnotationFlagAction`

    - #### DicomImageBlackout

          public DicomImageBlackout​(java.lang.String title,
                                    java.lang.String[] dicomFileNames,
                                    DicomImageBlackout.StatusNotificationHandler snh,
                                    int burnedinflag)

      Opens a window to display the supplied list of DICOM files to allow them to have burned in annotation blacked out.

      Each file will be processed sequentially, with the edited pixel data overwriting the original file.

      Parameters:
        `title` - the string to use in the title bar of the window or null if use default for locale
        `dicomFileNames` - the list of file names to process, if null a file chooser dialog will be raised
        `snh` - an instance of `StatusNotificationHandler`; if null, a default handler will be used that writes to stderr
        `burnedinflag` - whether or not and under what circumstances to to add/change BurnedInAnnotation attribute; takes one of the values of `BurnedInAnnotationFlagAction`

  - ### Method Detail

    - #### recordStateOfDrawingShapesForFileChange

          protected void recordStateOfDrawingShapesForFileChange()

    - #### createCineSliderIfNecessary

          protected void createCineSliderIfNecessary​(int min,
                                                     int max,
                                                     int value)

      Parameters:
        `min` - minimum frame number, starting from 1
        `max` - number of frames
        `value` - frame number, starting from 1

    - #### updateDisplayedFileNumber

          protected void updateDisplayedFileNumber​(int current,
                                                   int total)

    - #### loadDicomFileOrDirectory

          protected void loadDicomFileOrDirectory​(java.lang.String dicomFileName)

      Load the named DICOM file and display it in the image panel.

      Parameters:
        `dicomFileName` -

    - #### loadDicomFileOrDirectory

          protected void loadDicomFileOrDirectory​(java.io.File currentFile)

      Load the named DICOM file and display it in the image panel.

      Parameters:
        `currentFile` -

    - #### getScaleFactorToFitInMaximumAvailable

          protected double getScaleFactorToFitInMaximumAvailable​(double useWidth,
                                                                 double useHeight,
                                                                 double maxWidth,
                                                                 double maxHeight)

    - #### changeDimensionToFitInMaximumAvailable

          protected java.awt.Dimension changeDimensionToFitInMaximumAvailable​(java.awt.Dimension useDimension,
                                                                              java.awt.Dimension maxDimension,
                                                                              boolean onlySmaller)

    - #### reduceDimensionToFitInMaximumAvailable

          protected java.awt.Dimension reduceDimensionToFitInMaximumAvailable​(java.awt.Dimension useDimension)

    - #### addSingleImagePanelToMultiPanelAndEstablishLayout

          protected void addSingleImagePanelToMultiPanelAndEstablishLayout()

    - #### addSingleImagePanelToMultiPanelAndEstablishLayoutWithCenterMaximumAfterInitialSizeLayout

          protected void addSingleImagePanelToMultiPanelAndEstablishLayoutWithCenterMaximumAfterInitialSizeLayout()

    - #### showUIComponents

          protected void showUIComponents()

    - #### buildUIComponents

          protected void buildUIComponents()

    - #### deconstruct

          public void deconstruct()

    - #### dispose

          public void dispose()

      Overrides:
        `dispose` in class `java.awt.Window`

    - #### finalize

          protected void finalize()
                           throws java.lang.Throwable

      Throws:
        `java.lang.Throwable`

    - #### main

          public static void main​(java.lang.String[] arg)

      The method to invoke the application.

      Parameters:
        `arg` - optionally, a list of files; if absent a file dialog is presented