void freezeParentParameters() { SimpleOpManager pManager = view2d.getImageLayer().getDisplayOpManager(); freezeActionsInView.clear(); view2d.copyActionWState(freezeActionsInView); freezeOperations = new SimpleOpManager(); for (ImageOpNode op : pManager.getOperations()) { if (AffineTransformOp.OP_NAME.equals(op.getParam(Param.NAME))) { break; } ImageOpNode operation = op.copy(); freezeOperations.addImageOperationAction(operation); } freezeOperations.setFirstNode(imageLayer.getSourceRenderedImage()); freezeOperations.process(); }
public void applyPreProcess(ViewCanvas<ImageElement> view) { for (ImageOpNode action : postProcessOpManager.getOperations()) { if (preProcessOpManager.getNode(action.getName()) == null) { preProcessOpManager.addImageOperationAction(action.copy()); } } if (view != null) { view.getImageLayer().setImage(view.getImage(), preProcessOpManager); } }
public void fireImageChanged() { if (displayImage == null) { PlanarImage imgSource = disOpManager.getFirstNodeInputImage(); disOpManager.clearNodeIOCache(); disOpManager.setFirstNode(imgSource); } fireLayerChanged(); }
private static void removeImageOpertationAction(SimpleOpManager manager, Class<? extends ImageOpNode> cls) { for (ImageOpNode op : manager.getOperations()) { if (cls.isInstance(op)) { manager.removeImageOperationAction(op); break; } } }
@Override public Transferable createTransferable(JComponent comp) { // Clear disOp = null; // TODO make only one export function with a dialog to choose to disable zoom (real size), add graphics, // anonymize and other default remove annotations if (comp instanceof Image2DViewer) { Image2DViewer<?> view2DPane = (Image2DViewer<?>) comp; PlanarImage src = view2DPane.getSourceImage(); if (src != null) { SimpleOpManager opManager = view2DPane.getImageLayer().getDisplayOpManager().copy(); opManager.removeImageOperationAction(opManager.getNode(ZoomOp.OP_NAME)); opManager.setFirstNode(src); disOp = opManager; return this; } } return null; }
public AcquireImageInfo(ImageElement image) { this.image = Objects.requireNonNull(image); readTags(image); this.setStatus(AcquireImageStatus.TO_PUBLISH); this.attributes = new Attributes(); this.preProcessOpManager = new SimpleOpManager(); this.postProcessOpManager = new SimpleOpManager(); this.postProcessOpManager.addImageOperationAction(new CropOp()); this.postProcessOpManager.addImageOperationAction(new BrightnessOp()); this.postProcessOpManager.addImageOperationAction(new AutoLevelsOp()); this.postProcessOpManager.addImageOperationAction(new RotationOp()); this.postProcessOpManager.addImageOperationAction(new FlipOp()); this.postProcessOpManager.addImageOperationAction(new ZoomOp()); defaultValues = new AcquireImageValues(); currentValues = defaultValues.copy(); nextValues = defaultValues.copy(); steps = new ArrayList<>(); steps.add(currentValues); }
@Override public void setImage(E image, OpManager preprocessing) { boolean init = (image != null && !image.equals(this.sourceImage)) || (image == null && sourceImage != null); this.sourceImage = image; this.preprocessing = preprocessing; // Rectify non square pixel image in the first operation if (sourceImage != null) { ZoomOp node = sourceImage.getRectifyAspectRatioZoomOp(); if (node != null) { SimpleOpManager process = new SimpleOpManager(); process.addImageOperationAction(node); if (preprocessing != null) { for (ImageOpNode op : preprocessing.getOperations()) { if (!node.getName().equals(op.getName())) { process.addImageOperationAction(op); } } } this.preprocessing = process; } } if (preprocessing != null || init) { disOpManager.setFirstNode(getSourceRenderedImage()); updateDisplayOperations(); } }
public void addImageOperationAction(ImageOpNode action) { addImageOperationAction(action, null, null); }
@Override public boolean setParamValue(String opName, String param, Object value) { if (opName != null && param != null) { ImageOpNode node = getNode(opName); if (node != null) { node.setParam(param, value); return true; } } return false; }
public ExportImage(ViewCanvas<E> view2d) { super(view2d.getEventManager(), null); this.view2d = view2d; // Remove OpEventListener to avoid reseting some parameters when setting the series this.imageLayer.removeEventListener(imageLayer.getDisplayOpManager()); setFont(FontTools.getFont8()); this.infoLayer = view2d.getInfoLayer().getLayerCopy(this); infoLayer.setVisible(view2d.getInfoLayer().getVisible()); infoLayer.setShowBottomScale(false); // For exporting view, remove Pixel value, Preloading bar, Key Object infoLayer.setDisplayPreferencesValue(LayerAnnotation.PIXEL, false); infoLayer.setDisplayPreferencesValue(LayerAnnotation.PRELOADING_BAR, false); // Copy image operations from view2d SimpleOpManager operations = imageLayer.getDisplayOpManager(); for (ImageOpNode op : view2d.getImageLayer().getDisplayOpManager().getOperations()) { operations.addImageOperationAction(op.copy()); } // Copy the current values of image operations view2d.copyActionWState(actionsInView); setPreferredSize(new Dimension(1024, 1024)); ViewModel model = view2d.getViewModel(); Rectangle2D canvas = new Rectangle2D.Double(0, 0, view2d.getJComponent().getWidth(), view2d.getJComponent().getHeight()); actionsInView.put("origin.image.bound", canvas); //$NON-NLS-1$ actionsInView.put("origin.zoom", view2d.getActionValue(ActionW.ZOOM.cmd())); //$NON-NLS-1$ actionsInView.put("origin.center.offset", new Point2D.Double(model.getModelOffsetX(), model.getModelOffsetY())); //$NON-NLS-1$ // Do not use setSeries() because the view will be reset this.series = view2d.getSeries(); setImage(view2d.getImage()); }
protected PlanarImage getSourceImage() { SyncType type = (SyncType) actionsInView.get(ZoomWin.FREEZE_CMD); if (SyncType.PARENT_PARAMETERS.equals(type) || SyncType.PARENT_IMAGE.equals(type)) { return freezeOperations.getLastNodeOutputImage(); } // return the image before the zoom operation from the parent view ImageOpNode node = view2d.getImageLayer().getDisplayOpManager().getNode(AffineTransformOp.OP_NAME); if (node != null) { return (PlanarImage) node.getParam(Param.INPUT_IMG); } return view2d.getImageLayer().getDisplayOpManager().getLastNodeOutputImage(); }
(double[]) disOpManager.getParamValue(AffineTransformOp.OP_NAME, AffineTransformOp.P_AFFINE_MATRIX); Rectangle2D bound = (Rectangle2D) disOpManager.getParamValue(AffineTransformOp.OP_NAME, AffineTransformOp.P_DST_BOUNDS); double ratioX = matrix[0]; double ratioY = matrix[4]; matrix[2] = offsetX / rx; matrix[5] = offsetY/ ry; disOpManager.setParamValue(AffineTransformOp.OP_NAME, AffineTransformOp.P_AFFINE_MATRIX, matrix); disOpManager.setParamValue(AffineTransformOp.OP_NAME, AffineTransformOp.P_DST_BOUNDS, b); PlanarImage img = bound.equals(b) ? displayImage : disOpManager.process(); matrix[2] = offsetX; matrix[5] = offsetY; disOpManager.setParamValue(AffineTransformOp.OP_NAME, AffineTransformOp.P_AFFINE_MATRIX, matrix); disOpManager.setParamValue(AffineTransformOp.OP_NAME, AffineTransformOp.P_DST_BOUNDS, bound);
@Override public PlanarImage process() { PlanarImage source = getFirstNodeInputImage(); if (source != null && source.width() > 0) { for (int i = 0; i < operations.size(); i++) { ImageOpNode op = operations.get(i); try { if (i > 0) { op.setParam(Param.INPUT_IMG, operations.get(i - 1).getParam(Param.OUTPUT_IMG)); } if (op.isEnabled()) { op.process(); } else { // Skip this operation op.setParam(Param.OUTPUT_IMG, op.getParam(Param.INPUT_IMG)); } } catch (Exception e) { LOGGER.error("Image {} failed: {}", op.getParam(Param.NAME), e); //$NON-NLS-1$ op.setParam(Param.OUTPUT_IMG, op.getParam(Param.INPUT_IMG)); } } } else { clearNodeIOCache(); } return getLastNodeOutputImage(); }
@Override public SimpleOpManager copy() { return new SimpleOpManager(this); }
postProcessOpManager.setParamValue(RotationOp.OP_NAME, RotationOp.P_ROTATE, nextValues.getFullRotation()); view.getImageLayer().setOffset(new Point(area.x, area.y)); postProcessOpManager.setParamValue(CropOp.OP_NAME, CropOp.P_AREA, area); postProcessOpManager.setParamValue(BrightnessOp.OP_NAME, BrightnessOp.P_BRIGTNESS_VALUE, (double) nextValues.getBrightness()); postProcessOpManager.setParamValue(BrightnessOp.OP_NAME, BrightnessOp.P_CONTRAST_VALUE, (double) nextValues.getContrast()); postProcessOpManager.setParamValue(AutoLevelsOp.OP_NAME, AutoLevelsOp.P_AUTO_LEVEL, nextValues.isAutoLevel()); postProcessOpManager.setParamValue(AutoLevelsOp.OP_NAME, AutoLevelsOp.P_IMAGE_ELEMENT, image); postProcessOpManager.setParamValue(FlipOp.OP_NAME, FlipOp.P_FLIP, nextValues.isFlip()); postProcessOpManager.setParamValue(ZoomOp.OP_NAME, ZoomOp.P_RATIO_X, nextValues.getRatio()); postProcessOpManager.setParamValue(ZoomOp.OP_NAME, ZoomOp.P_RATIO_Y, nextValues.getRatio()); postProcessOpManager.setParamValue(ZoomOp.OP_NAME, ZoomOp.P_INTERPOLATION, ZoomOp.INTERPOLATIONS[1]); postProcessOpManager.resetLastNodeOutputImage(); view.getImageLayer().setImage(image, postProcessOpManager); updateTags(view.getImage()); preProcessOpManager.removeAllImageOperationAction();
public AcquireImageValues restore(ViewCanvas<ImageElement> view) { image.setPixelSpacingUnit(defaultValues.getCalibrationUnit()); image.setPixelSize(defaultValues.getCalibrationRatio()); postProcessOpManager.setParamValue(RotationOp.OP_NAME, RotationOp.P_ROTATE, defaultValues.getOrientation()); postProcessOpManager.setParamValue(FlipOp.OP_NAME, FlipOp.P_FLIP, defaultValues.isFlip()); postProcessOpManager.setParamValue(CropOp.OP_NAME, CropOp.P_AREA, null); postProcessOpManager.setParamValue(BrightnessOp.OP_NAME, BrightnessOp.P_BRIGTNESS_VALUE, (double) defaultValues.getBrightness()); postProcessOpManager.setParamValue(BrightnessOp.OP_NAME, BrightnessOp.P_CONTRAST_VALUE, (double) defaultValues.getContrast()); postProcessOpManager.setParamValue(AutoLevelsOp.OP_NAME, AutoLevelsOp.P_AUTO_LEVEL, defaultValues.isAutoLevel()); postProcessOpManager.setParamValue(AutoLevelsOp.OP_NAME, AutoLevelsOp.P_IMAGE_ELEMENT, image); if (view != null) { view.getImageLayer().setImage(image, postProcessOpManager); } steps.clear(); steps.add(defaultValues); currentValues = defaultValues.copy(); nextValues = defaultValues.copy(); return defaultValues; }
Point2D offset = null; Rectangle crop = (Rectangle) imageInfo.getPostProcessOpManager().getParamValue(CropOp.OP_NAME, CropOp.P_AREA); if (crop != null) { Integer rotationAngle = Optional.ofNullable((Integer) imageInfo.getPostProcessOpManager() .getParamValue(RotationOp.OP_NAME, RotationOp.P_ROTATE)).orElse(0); rotationAngle = rotationAngle % 360; if (rotationAngle == 0 || rotationAngle == 180) {
private static void changePixelSize(DicomImageElement img, Map<String, Object> actionsInView, double[] prPixSize) { img.setPixelSize(prPixSize[1], prPixSize[0]); actionsInView.put(PRManager.TAG_CHANGE_PIX_CONFIG, true); ZoomOp node = img.getRectifyAspectRatioZoomOp(); if (node != null) { SimpleOpManager process = new SimpleOpManager(); process.addImageOperationAction(node); OpManager preprocessing = (OpManager) actionsInView.get(ActionW.PREPROCESSING.cmd()); if (preprocessing != null) { for (ImageOpNode op : preprocessing.getOperations()) { if (!node.getName().equals(op.getName())) { process.addImageOperationAction(op); } } } actionsInView.put(ActionW.PREPROCESSING.cmd(), process); } }
private static void addImageOperationAction(SimpleOpManager manager, ImageOpNode action) { manager.addImageOperationAction(action); }
@Override public Object getParamValue(String opName, String param) { if (opName != null && param != null) { ImageOpNode node = getNode(opName); if (node != null) { return node.getParam(param); } } return null; }