+++ /dev/null
-package ie.dcu.segment.painters;
-
-
-import ie.dcu.segment.*;
-import ie.dcu.swt.ObservableImage;
-
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-
-/**
- * Shows the foreground region of the image. The background is greyed out.
- *
- * @author Kevin McGuinness
- */
-public class LabelPainter implements SegmentationPainter {
-
- private ImageData maskData;
- private Image maskImage;
-
-
- public String getName() {
- return "Display Label";
- }
-
- public String getDescription() {
- return "Shows the segmented piece with label attached on hovering the mouse.";
- }
-
- public ImageData getMaskData() {
- return maskData;
- }
-
- public void paint(SegmentationContext ctx, ObservableImage im) {
- GC gc = im.beginPaint();
-
- // Paint image
- gc.drawImage(ctx.getImage(), 0, 0);
-
- // Paint mask
- createVisibleMask(ctx.getMask());
- gc.drawImage(maskImage, 0, 0);
-
- // Commit changes
- im.endPaint();
- }
-
-
- private void createVisibleMask(SegmentationMask mask) {
- dispose();
-
- if (isNewMaskDataRequired(mask.getBounds())) {
- maskData = createMaskData(mask.getBounds());
- }
- // Blit in pixels
- byte[] buff = new byte[maskData.width];
- for (int y = 0, i = 0; y < mask.height; y++) {
- for (int x = 0; x < mask.width; x++) {
- switch (mask.values[i++]) {
- case SegmentationMask.BACKGROUND:
- // black
- buff[x] = 1;
- break;
- default:
- // transparent
- buff[x] = 0;
- }
- }
- maskData.setPixels(0, y, buff.length, buff, 0);
- }
-
- // Create new mask
- maskImage = new Image(Display.getCurrent(), maskData);
- }
-
-
- private boolean isNewMaskDataRequired(Rectangle bounds) {
- if (maskData == null) {
- return true;
- } else {
- return maskData.width != bounds.width || maskData.height != bounds.height;
- }
- }
-
-
- private static ImageData createMaskData(Rectangle bounds) {
- RGB[] colors = new RGB[] {
- new RGB(255,255,255),
- new RGB(128,128,128)
- };
-
- // Create binary indexed palette
- PaletteData palette = new PaletteData(colors);
-
- // Create 1 bit indexed image
- ImageData data = new ImageData(
- bounds.width, bounds.height, 1, palette);
-
- // Set transparent pixel
- data.transparentPixel = 0;
- // Create and return the image
- return data;
- }
-
-
- public void dispose() {
- // Dispose mask
- if (maskImage != null) {
- if (!maskImage.isDisposed()) {
- maskImage.dispose();
- }
- maskImage = null;
- }
- }
-}
\ No newline at end of file