import javax.microedition.lcdui.*;

public class ImageManager {
	public final static int ROT_90=5;
	public final static int ROT_180=2;
	public final static int ROT_270=6;
	public final static int ROT_NONE=1;

	public ImageManager(){}

	public Image getRotation(Image img,int angle){
		Image tempI=Image.createImage(img.getWidth(),img.getHeight());
		Graphics graph=tempI.getGraphics();
		graph.drawRegion(img,0,0,img.getWidth(),img.getHeight(),angle,0,0,Graphics.TOP|Graphics.LEFT);
		return tempI;
	}

	public Image[] getRotations(Image img,int row,int col,int angle){
		Image[] splittedImgs=splitImage(img,row,col);
		Image[] rotatedImgs=new Image[splittedImgs.length];
		for(int i=0;i<row;i++){
		      for(int j=0;j<col;j++){
		        rotatedImgs[i*j+j]=getRotation(splittedImgs[i*j+j],angle);
		      }
		    }
		return rotatedImgs;
	}
	public Image[] splitImage(Image img,int rows,int cols){
		Image tempI []=new Image[cols*rows];
		int index=0;
		for (int i=0;i<rows;i++){
			for(int j=0;j<cols;j++){
		      	Image element=Image.createImage(img.getWidth()/cols,img.getHeight()/rows);
			      Graphics temp=element.getGraphics();       
				temp.drawRegion(img,(img.getWidth()/cols)*j,(img.getHeight()/rows)*i
					,img.getWidth()/cols,img.getHeight()/rows,ROT_NONE,0,0,Graphics.TOP|Graphics.LEFT);
			      tempI[i*j+j]=element;
		}
		}
		return tempI;
	}
	public Image getCombinedImage(Image [] imArr){
		Image tempI=Image.createImage(getWidths(imArr),getHeights(imArr));
		Graphics tempG=tempI.getGraphics();
		int xPointer=0;
		for (int i=0;i<imArr.length;i++){    
		tempG.drawRegion(imArr[i],0,0,imArr[i].getWidth(),imArr[i].getHeight()
			,ROT_NONE,xPointer,0,Graphics.TOP|Graphics.LEFT);
		xPointer+=imArr[i].getWidth();
	}
	return tempI;
	}
	public Image getCombinedImage(Image img1,Image img2){
		Image tempI=Image.createImage(img1.getWidth()+img2.getWidth(),img1.getHeight());
		Graphics tempG=tempI.getGraphics();   
		tempG.drawRegion(img1,0,0,img1.getWidth(),img1.getHeight()
			,ROT_NONE,0,0,Graphics.TOP|Graphics.LEFT);  
		tempG.drawRegion(img2,0,0,img2.getWidth(),img2.getHeight(),ROT_NONE
			,img1.getWidth(),0,Graphics.TOP|Graphics.LEFT);
	    return tempI;
	}
	public int getWidths(Image [] im){
		int counts=0;
		for (int i=0;i<im.length;i++){
			counts+=im[i].getWidth();
		}
		return counts;
	}
	public int getHeights(Image [] im){
		int counts=0;
		for(int i=0;i<im.length;i++){
			if(counts<=im[i].getHeight()){
			counts=im[i].getHeight();
			}
		}
		return counts;
	}
	public Image getRotatedAndCombined(Image img,int rows,int cols){
		//1. olarak imaj gelecek alacak döndürüp bir image alacak ve imajı
		Image rots[]=new Image[4];
		int angles []={ROT_NONE,ROT_90,ROT_180,ROT_270};
		for(int i=0;i<4;i++){
		rots[i]=getCombinedImage(getRotations(img,rows,cols,angles[i]));
		}
		return getCombinedImage(rots);
	}
}


