Mercurial > hg > de.mpg.mpiwg.itgroup.digilib.core
view src/de/mpg/mpiwg/itgroup/digilib/digiImage/DigiImageController.java @ 9:e63a64652f4d
added comments
author | dwinter |
---|---|
date | Mon, 03 Jan 2011 16:53:48 +0100 |
parents | 83c58ea33792 |
children | 2f47c136b8a6 |
line wrap: on
line source
package de.mpg.mpiwg.itgroup.digilib.digiImage; import java.util.ArrayList; import java.util.List; import org.apache.commons.lang.StringUtils; import org.eclipse.swt.graphics.Point; /** Contains methods to manipulate an digilib image @see {#link de.mpiwg.itgroup.digilib.digiImage.Digimage}. * The parameters are documented at the digilib pages @see {@link http://developer.berlios.de/docman/display_doc.php?docid=106&group_id=251}. * */ public class DigiImageController { public static String VMIR="vmir"; // vertical mirroring public static String HMIR="hmir"; // horizontal mirroring public DigiImage digiImage; // the image to be controlled. //private DigiImageParameter parameter; protected DigiImageController(){} /** Create a new controller on the image object. * * @param di */ public DigiImageController(DigiImage di){ this.digiImage=di; } /** Mirrors the image * @param modes can be @see {@value #VMIR} or {@link #HMIR}. */ public void mir(String mode) { DigiImageParameter dp = digiImage.getParameter(); String parameter = dp.getMo(); // mo kann mehrere durch komma getrennte parameter haben String[] splittmo= parameter.split(","); Boolean hasMir = false; List<String> newmo = new ArrayList<String>(); for(String m: splittmo){ if (m.equals(mode)){ hasMir=true; } else { newmo.add(m); } } if(!hasMir){ // kein hmir dann dazufuegen newmo.add(mode); } String newmoString = StringUtils.join(newmo,","); dp.setMo(newmoString); digiImage.setParameter(dp); digiImage.redraw(); } public void vmir() { mir(VMIR); } public void hmir() { mir(HMIR); } public void rotate(float rotateValue) { digiImage.getParameter().setRot(rotateValue); digiImage.redraw(); } /** Zoom the area given by the rectangle (x,y), (x2,y2). Alle point are given in absolute coordinates. * @param x * @param y * @param x2 * @param y2 */ public void zoomArea(int x, int y, int x2, int y2) { Point size = digiImage.getLabel().getSize(); float relx = new Float(x)/new Float(size.x); float rely = new Float(y)/new Float(size.y); float relx2 = new Float(x2)/new Float(size.x); float rely2 = new Float(y2)/new Float(size.y); DigiImageParameter dp = digiImage.getParameter(); float Ww = dp.getWw(); float Wh = dp.getWh(); float Wx = dp.getWx(); float Wy = dp.getWy(); float nWx = relx*Ww+Wx; float nWy = rely*Wh+Wy; float nWw = (relx2-relx)*Ww; float nWh = (rely2-rely)*Wh; dp.setWx(nWx); dp.setWy(nWy); dp.setWw(nWw); dp.setWh(nWh); digiImage.setParameter(dp); digiImage.redraw(); // setRot(rotateValue); } /** * Show the whole image. * */ public void zoomFull(){ DigiImageParameter dp = digiImage.getParameter(); dp.setWw(1); dp.setWh(1); dp.setWx(0); dp.setWy(0); digiImage.setParameter(dp); digiImage.redraw(); } /** * scales the image down (ws --> ws-1) * */ public void scaleDown() { DigiImageParameter dp = digiImage.getParameter(); float ws = dp.getWs(); if (ws>1){ dp.setWs(ws-1); digiImage.setParameter(dp); digiImage.redraw(); } } /** * scales the image up (ws --> ws+1) * */ public void scaleUp() { DigiImageParameter dp = digiImage.getParameter(); float ws = dp.getWs(); dp.setWs(ws+1); digiImage.setParameter(dp); digiImage.redraw(); } /** * If the image object points to a folder the previous image in the folder is displayed. * */ public void prevPage() { DigiImageParameter dp = digiImage.getParameter(); int pn = dp.getPn(); if (pn>1) pn=pn-1; dp.setPn(pn); digiImage.setParameter(dp); digiImage.redraw(); } /** * If the image object points to a folder the next image in the folder is displayed. * TODO currently no check is made if we are already on the last image in the folder. */ public void nextPage() { DigiImageParameter dp = digiImage.getParameter(); int pn = dp.getPn(); pn=pn+1; dp.setPn(pn); digiImage.setParameter(dp); digiImage.redraw(); } }