Login  Register

ImagePlus not drawing updates with in a loop

Posted by Richard Zorger on Apr 23, 2014; 7:01pm
URL: http://imagej.273.s1.nabble.com/ImagePlus-not-drawing-updates-with-in-a-loop-tp5007405.html

Hello,

I am making a plugin that uses imagePlus.insert() to add images to the canvas. These inserts are done within a loop. I want the imagePlus to be re-drawn for each iteration of the loop so that users can see each of the images as they are added. This works for the first time I run the loop but if I run it a second time it will not update the canvas within the loop. I have tried lots of different methods to let the imagePlus, imageProcesser and canvas know that there has been a change but nothing works. Here is some code:

        CustomCanvas cc = new CustomCanvas(imp3);
        CustomWindow cw = new CustomWindow(imp3, cc, 1);        
        ...
        ImagePlus impLoop;
        for (int i=numOldImages;i<numImages;i++){ // Insert each image in it's correct location in the gallery
                impLoop = IJ.openImage(galleryImages.get(i));
                ipLoop = impLoop.getProcessor();
                float thumbHeight = idealHeight/thumbFactor;
                float thumbWidth = idealWidth/thumbFactor;
                if (currentCol > numColumns){ // Make new row if there are more than numColumns open images
                        row = row + (int) thumbHeight;
                        column = 0;                
                        currentCol = 1;
                }                                
                currentCol++;
                galleryOrder.add(galleryImages.get(i));
                ipLoop = ipLoop.resize((int) thumbWidth);
                ip3.insert(ipLoop, column, row);

                imp3.setProcessor(ip3);  // This updates the gallery as each image is loaded for the 1st directory
               
                if (i == imageTally+numOldImages-1) {
                        row = row + (int) thumbHeight;
                        for (int k=0;k<maxNumCols - currentCol + 1;k++) { // Add spacers for empty slots in gallery
                                galleryOrder.add(" ");
                        }
                }

                System.gc();
                column = column + (int) thumbWidth;
               
                IJ.showStatus("Loading image: " + (i+1) +"/" + numImages + ", " + galleryImages.get(i));
                IJ.showProgress(i,numImages);        
        }

        IJ.showStatus("Finished loading images!");
        imp3.show();
        imp3.draw();
        cc.setDrawingSize(screen.width-panelWidth, row+gutter);        // redraws image
        cw.minimize(); // makes canvas match window size (with room for side panel)
        cw.setSize(ccSize);
        cc.setMagnification(1);    

The two calls imp3.setProcessor(ip3) and cc.setDrawingSize(screen.width-panelWidth, row+gutter) both cause the image to be updated, but neither can make it update in the loop.

Also a similar thing happens with the progress bar. It shows up once, then in subsequent running of the loop it is not visible. Is there a way I can setVisble on the progress bar?

thanks!

Richard

--
ImageJ mailing list: http://imagej.nih.gov/ij/list.html