Java tutorial
/* Java Media APIs: Cross-Platform Imaging, Media and Visualization Alejandro Terrazas Sams, Published November 2002, ISBN 0672320940 */ import javax.media.jai.ImageLayout; import javax.media.jai.PointOpImage; import java.awt.image.RenderedImage; import java.awt.image.Raster; import java.awt.image.WritableRaster; public class CheckAlignmentOpImage extends PointOpImage { public CheckAlignmentOpImage(RenderedImage s1, RenderedImage s2, int sp, ImageLayout layout, java.util.Map configuration, boolean cobbleSources) { super(s1, s2, layout, configuration, cobbleSources); source1 = s1; source2 = s2; samplingPeriod = sp; } public Raster computeTile(int x, int y) { Raster r1 = source1.getTile(x, y); Raster r2 = source2.getTile(x, y); int xBounds = r1.getWidth(); if (r2.getWidth() < xBounds) xBounds = r2.getWidth(); int yBounds = r1.getHeight(); if (r2.getHeight() < yBounds) yBounds = r2.getHeight(); WritableRaster wr; wr = r1.createCompatibleWritableRaster(xBounds, yBounds); int tmpi; int tmpj; for (int i = 0; i < wr.getWidth(); i++) for (int j = 0; j < wr.getHeight(); j++) { tmpi = i / samplingPeriod; tmpj = j / samplingPeriod; if ((tmpi % 2 == 0) && (tmpj % 2 == 0)) wr.setDataElements(i, j, r2.getDataElements(i, j, null)); else if ((tmpi % 2 != 0) && (tmpj % 2 != 0)) wr.setDataElements(i, j, r2.getDataElements(i, j, null)); else wr.setDataElements(i, j, r1.getDataElements(i, j, null)); } return wr; } private RenderedImage source1, source2; private int samplingPeriod; }