import ij.IJ;
import ij.ImagePlus;
import ij.WindowManager;
import ij.process.*;
import ij.gui.GenericDialog;
import java.awt.*;
import ij.plugin.filter.*;
public class Alpha_Blending implements PlugInFilter {
ImagePlus fgIm = null;
static double alpha = 0.5;
public int setup(String arg, ImagePlus img) {
return DOES_8G;
}
public void run(ImageProcessor bgIp) {
if(runDialog()){
ImageProcessor fgIp=fgIm.getProcessor().convertToByte(false);
fgIp = fgIp.duplicate();
fgIp.multiply(1-alpha);
bgIp.multiply(alpha);
bgIp.copyBits(fgIp, 0, 0, Blitter.ADD);
}
}
boolean runDialog(){
int[] windowList = WindowManager.getIDList();
if (windowList == null){
IJ.noImage();
return false;
}
String[] windowTitles = new String[windowList.length];
for(int i = 0; i < windowList.length; i++)
{
ImagePlus im = WindowManager.getImage (windowList[i]);
if (im == null)
windowTitles[i] = "untitled";
else
windowTitles[i] = im.getShortTitle();
}
GenericDialog gd = new GenericDialog("Alpha Blending");
gd.addChoice("Foreground image: ", windowTitles, windowTitles[0]);
gd. addNumericField("Alpha value [0. . 1]: " , alpha, 2);
gd.showDialog();
if (gd.wasCanceled())
return false;
else {
int fgIdx = gd.getNextChoiceIndex();
fgIm = WindowManager.getImage(windowList[fgIdx]);
alpha = gd.getNextNumber ();
return true;
}
}
}
Suscribirse a:
Enviar comentarios (Atom)
2 comentarios:
El uso de de este código es muy práctica a la hora de realizar montajes
Mi estimado Juanito, excelente tu código, nada me queda una duda ¿hasta que número de montajes puedes realizar? por lo que entiendo estas montando una imagen encima de otra entonces cuantas imágenes puedes montar, ¿existe alguna restricción?
Publicar un comentario