package edu.mbl.jif.gui.imaging.zoom; /** ImageCanvas */ import edu.mbl.jif.gui.imaging.zoom.core.ZoomGraphics; import edu.mbl.jif.gui.imaging.zoom.core.ZoomJPanel; import java.awt.*; import java.awt.image.*; import javax.swing.*; public class MemImagePanel extends ZoomJPanel { BufferedImage img; MemoryImageSource mis; byte[] imageArrayByte = null; int w = 0; int h = 0; int frames = 0; byte startIntensity = 10; // GBH: Added ROI selection functions Rectangle roiRect = null; Color roiRectColor = Color.YELLOW; public MemImagePanel(int w, int h) { this.w = w; this.h = h; createImageSource(w, h); } public Rectangle getRoiRect() { return roiRect; } // BufferedImage img = loadImage( // edu.mbl.jif.Constants.testDataPath + // "images\\PSCollagenDark.gif"); //589x421 public void paintBackground(ZoomGraphics zg) { this.setBackground(Color.GRAY); //zg.drawImage(img, null, 0, 0); String s = "frame" + frames; zg.drawImage(img, null, 0, 0); zg.setColor(Color.black); zg.drawString(s, 20, 20); } public void createImageSource(int w, int h) { this.w = w; this.h = h; imageArrayByte = new byte[h * w]; for (int i = 0; i < imageArrayByte.length; i++) { imageArrayByte[i] = startIntensity; } // create a ColorModel with a gray scale palette: byte[] gray = new byte[256]; for (int i = 0; i < 256; i++) { gray[i] = (byte) i; } IndexColorModel cm = new IndexColorModel(8, 256, gray, gray, gray); // construct a MemoryImageSource that can be used to create the image mis = new MemoryImageSource(w, h, cm, imageArrayByte, 0, w); mis.setAnimated(true); mis.setFullBufferUpdates(true); //mis.addConsumer(new ImageConsumer( ); // in a component class you can use createImage directly //img = createImage(mis); img = toBufferedImage(Toolkit.getDefaultToolkit().createImage(mis)); } public void animate() { for (int i = 0; i < 100; i++) { for (int j = 0; j < imageArrayByte.length; j++) { imageArrayByte[j] = (byte) (startIntensity + (byte) (i * 2)); } System.out.println(i); mis.newPixels(); super.paint(getGraphics()); frames++; try { Thread.sleep(50); } catch (InterruptedException ex) { } } } public void callBack() { frames++; mis.newPixels(); } public final static int TRANSPARENT_TO_REMOVE = new Color(255, 0, 255).getRGB(); /** * Description of the Field */ public final static int TRANSPARENT_PIXEL = new Color(255, 0, 0, 0).getRGB(); public static BufferedImage toBufferedImage(Image image) { if (image == null) { return null; } if (image instanceof BufferedImage) { return (BufferedImage) image; } // This code ensures that all the pixels in // the image are loaded. image = new ImageIcon(image).getImage(); // Create the buffered image. BufferedImage bufferedImage = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_ARGB); // Copy image to buffered image. Graphics2D g = bufferedImage.createGraphics(); // paint the image. g.drawImage(image, 0, 0, null); g.dispose(); // Get the DataBuffer from your bufferedImage like DataBuffer db = bufferedImage.getRaster().getDataBuffer(); // then you can just iterate through and convert your chosencolor to a transparent color for (int i = 0, c = db.getSize(); i < c; i++) { if (db.getElem(i) == TRANSPARENT_TO_REMOVE) { // set to transparent db.setElem(i, TRANSPARENT_PIXEL); } } return bufferedImage; } public static void main(String[] args) { final MemImagePanel memImg = new MemImagePanel(200, 200); SwingUtilities.invokeLater(new Runnable() { public void run() { JFrame f = new JFrame(); f.add(memImg); f.setPreferredSize(new Dimension(220, 220)); f.pack(); f.setVisible(true); memImg.animate(); } }); } }