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
`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.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
`protected DicomImageBlackout.ApplyActionListener` `applyActionListener`
`protected javax.swing.JButton` `blackoutApplyButton`
`protected javax.swing.JButton` `blackoutNextButton`
`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 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 int` `previousColumns`
`protected java.util.Vector` `previousPersistentDrawingShapes`
`protected int` `previousRows`
`protected DicomImageBlackout.SaveActionListener` `saveActionListener`
`protected SourceImage` `sImg`
`protected DicomImageBlackout.StatusNotificationHandler` `statusNotificationHandler`
`protected boolean` `usePixelPaddingBlackoutValue`
`protected javax.swing.JCheckBox` `usePixelPaddingBlackoutValueCheckBox`
`protected boolean` `useZeroBlackoutValue`
`protected javax.swing.JCheckBox` `useZeroBlackoutValueCheckBox`

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

`accessibleContext, EXIT_ON_CLOSE, rootPane, rootPaneCheckingEnabled`

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

`CROSSHAIR_CURSOR, DEFAULT_CURSOR, E_RESIZE_CURSOR, HAND_CURSOR, ICONIFIED, MAXIMIZED_BOTH, MAXIMIZED_HORIZ, MAXIMIZED_VERT, MOVE_CURSOR, N_RESIZE_CURSOR, NE_RESIZE_CURSOR, NORMAL, NW_RESIZE_CURSOR, S_RESIZE_CURSOR, SE_RESIZE_CURSOR, SW_RESIZE_CURSOR, TEXT_CURSOR, W_RESIZE_CURSOR, WAIT_CURSOR`

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

`BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT`

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

`DISPOSE_ON_CLOSE, DO_NOTHING_ON_CLOSE, HIDE_ON_CLOSE`

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

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

### Constructor Summary

Constructors
Constructor and Description
`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

Methods
`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` `recordStateOfDrawingShapesForNextFile()`
`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, getCursorType, getExtendedState, getFrames, getIconImage, getMaximizedBounds, getMenuBar, getState, getTitle, isResizable, isUndecorated, remove, removeNotify, setBackground, setCursor, setExtendedState, setMaximizedBounds, setMenuBar, setOpacity, setResizable, setShape, setState, setTitle, setUndecorated`

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

`addPropertyChangeListener, addPropertyChangeListener, addWindowFocusListener, addWindowListener, addWindowStateListener, applyResourceBundle, applyResourceBundle, 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, hide, isActive, isAlwaysOnTop, isAlwaysOnTopSupported, isAutoRequestFocus, isFocusableWindow, isFocusCycleRoot, isFocused, isLocationByPlatform, isOpaque, isShowing, isValidateRoot, pack, paint, postEvent, processEvent, processWindowFocusEvent, processWindowStateEvent, removeWindowFocusListener, removeWindowListener, removeWindowStateListener, reshape, setAlwaysOnTop, setAutoRequestFocus, setBounds, setBounds, setCursor, setFocusableWindowState, setFocusCycleRoot, setIconImages, setLocation, setLocation, setLocationByPlatform, setLocationRelativeTo, setMinimumSize, setModalExclusionType, setSize, setSize, setType, setVisible, show, toBack, toFront`

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

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

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

`action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, contains, createImage, createImage, createVolatileImage, createVolatileImage, disable, disableEvents, dispatchEvent, enable, enable, 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, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getSize, getTreeLock, getWidth, getX, getY, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isDoubleBuffered, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, 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, requestFocusInWindow, requestFocusInWindow, resize, resize, revalidate, setComponentOrientation, setDropTarget, setEnabled, setFocusable, setFocusTraversalKeysEnabled, setForeground, setIgnoreRepaint, setLocale, setMaximumSize, setName, setPreferredSize, show, size, 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, postEvent`

### Field Detail

#### 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

#### 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

#### blackoutApplyButton

    protected javax.swing.JButton blackoutApplyButton

#### blackoutSaveButton

    protected javax.swing.JButton blackoutSaveButton

#### blackoutNextButton

    protected javax.swing.JButton blackoutNextButton

### Constructor Detail

#### 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
  `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`
Throws:
  `DicomException`

### Method Detail

#### recordStateOfDrawingShapesForNextFile

    protected void recordStateOfDrawingShapesForNextFile()

#### 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

Overrides:
  `finalize` in class `java.lang.Object`
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