import javax.imageio.ImageIO;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.JToolBar;
import javax.swing.ScrollPaneConstants;
import java.applet.Applet;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.PrintJob;
import java.awt.image.BufferedImage;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.Properties;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import java.net.*;
import javax.print.*;
import javax.print.attribute.*;
import javax.print.attribute.standard.*;
import javax.swing.*;
import sun.awt.ScrollPaneWheelScroller;
public class First extends JApplet{
private static BufferedImage clouds[]=new BufferedImage[2];
private JScrollPane scroll;
private int flag = 0;
private int scale = 1;
private int newAngle = 0;
private BufferedImage temp;
private int zoomState=0;
Scrollbar slider;
int sliderValue;
int number=0;
// PrintImagePanel fImgPanel;
public void init() {
// File input = new File("D:\\Pooja\\flower030.gif");
// File input1=new File("D:\\Pooja\\rose.jpg");
try {
URL url = new URL(getCodeBase(), "rose.jpg");
BufferedImage img = ImageIO.read(url);
clouds[0] = img;
url = new URL(getCodeBase(), "rose.jpg");
img = ImageIO.read(url);
clouds[1] = img;
// clouds[0] = ImageIO.read(input);
// clouds[1]=ImageIO.read(input1);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Demo demo = new Demo();
getContentPane().add(demo);
getContentPane().add("North", new DemoControls(demo));
}
public class Demo extends Canvas
{
public String direction = "image";
public Object scalingFactor = "100%";
public JScrollPane scrollPane;
public Demo() {
setBackground(Color.white);
}
public void drawDemo(int width, int height, Graphics g) {
Graphics2D g2 = (Graphics2D) g;
if (scalingFactor.equals("100%")) {
scale = 1;
} else if (scalingFactor.equals("200%")) {
scale = 2;
} else if (scalingFactor.equals("300%")) {
scale = 3;
}
if (direction.equals("image")) {
temp = Rotation(clouds[number], 0);
newAngle = 0;
} else if (direction.equals(">>>")) {
temp = Rotation(clouds[number], newAngle - 90);
newAngle = newAngle - 90;
flag = 0;
} else if (direction.equals("<<<")) {
temp = Rotation(clouds[number], newAngle + 90);
newAngle = newAngle + 90;
flag = 1;
} else if (direction.equals("zoom")) {
if(scalingFactor.equals("50%")){
temp = zoomOut(Rotation(clouds[number], newAngle),2);}
else
temp=zoomIn(Rotation(clouds[number], newAngle), scale);
//spd = new ScrollPaneDemo(temp);
}
else if(direction.equals("zoomIn")){
zoomState=zoomState+1;
temp=resizeImage(zoomState);
}
else if(direction.equals("zoomOut")){
zoomState=zoomState-1;
temp=resizeImage(zoomState);
}
else if (direction.equals("back")){
number=0;
temp=Rotation(clouds[number], 0);
}
else if (direction.equals("next")){
number=1;
temp = Rotation(clouds[number], 0);
}
// temp = Rotation(clouds[number], 0);
// newAngle = 0;
// int frame_width = 360;
// int frame_height = 360;
//
// /* PrintTestApp f = new PrintTestApp();
// f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
//
// f.init (temp);
// f.setSize (frame_width, frame_height);
// f.setVisible (true);*/
// PrintingApplet pa=new PrintingApplet();
// } // main
//
//
return;
}
public BufferedImage resizeImage(int zoomState){
BufferedImage img=null;
if(zoomState<0){
img=zoomOut(Rotation(clouds[number], newAngle),(-1*zoomState)+1);
}
else if(zoomState>0){
img=zoomIn(Rotation(clouds[number], newAngle),zoomState+1);
}
else if(zoomState==0){
img=zoomIn(Rotation(clouds[number], newAngle),1);
}
switch(zoomState){
case 3:img=zoomIn(Rotation(clouds[number], newAngle),4);System.out.println("3");break;
case 2:img=zoomIn(Rotation(clouds[number], newAngle),3);System.out.println("2");break;
case 1:img=zoomIn(Rotation(clouds[number], newAngle),2);System.out.println("1");break;
case 0:img=zoomIn(Rotation(clouds[number], newAngle),1);System.out.println("0");break;
case -1:img=zoomOut(Rotation(clouds[number], newAngle),2);System.out.println("-1");break;
case -2:img=zoomOut(Rotation(clouds[number], newAngle),3);System.out.println("-2");break;
case -3:img=zoomOut(Rotation(clouds[number], newAngle),4);System.out.println("-3");break;
}
return img;
}
// Function For ZoomIn
public BufferedImage zoomIn(BufferedImage bi, int scale) {
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice[] gs = ge.getScreenDevices();
int screenWidth=0 ;
int screenHeight=0;
for (int i=0; i<gs.length; i++) {
DisplayMode dm = gs[i].getDisplayMode();
screenWidth = dm.getWidth();
screenHeight = dm.getHeight();
}
int width = scale * bi.getWidth();
int height = scale * bi.getHeight();
BufferedImage biScale = new BufferedImage(width, height,
bi.getType());
for (int i = 0; i < width; i++)
for (int j = 0; j < height; j++)
biScale.setRGB(i, j, bi.getRGB(i / scale, j / scale));
if((screenWidth<width)||(screenHeight<height)){
System.out.println("Screen out Of Bound");
}
return biScale;
}
// Function For ZoomOut
public BufferedImage zoomOut(BufferedImage bi,int d) {
int width = (bi.getWidth() / d);
int height = (bi.getHeight() / d);
BufferedImage biScale = new BufferedImage(width, height,bi.getType());
for (int i = 0; i < width; i++)
for (int j = 0; j < height; j++)
biScale.setRGB(i, j, bi.getRGB(i*d, j * d));
return biScale;
}
// Method For Rotating Image
public <Picture> BufferedImage Rotation(BufferedImage pic, double angl) {
Picture pic1 = (Picture) pic;
int width = pic.getWidth();
int height = pic.getHeight();
double angle = Math.toRadians(angl);
double sin = Math.sin(angle);
double cos = Math.cos(angle);
double x0 = 0.5 * (width - 1); // point to rotate about
double y0 = 0.5 * (height - 1); // center of image
BufferedImage pic2 = new BufferedImage(width, height, 8);
// rotation
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
double a = x - x0;
double b = y - y0;
int xx = (int) (+a * cos - b * sin + x0);
int yy = (int) (+a * sin + b * cos + y0);
// plot pixel (x, y) the same color as (xx, yy) if it's in
// bounds
if (xx >= 0 && xx < width && yy >= 0 && yy < height) {
pic2.setRGB(x, y, pic.getRGB(xx, yy));
// pic2.set(x, y, pic1.get(xx, yy));
}
}
}
return pic2;
}
//For Printing
public void paint(Graphics g) {
{Graphics2D g2 = (Graphics2D) g;
Dimension d = getSize();
g.clearRect(0, 0, d.width, d.height);
drawDemo(d.width, d.height, g);
g2.drawImage(temp, 100, 20, this);}
}
}
static class DemoControls extends JPanel implements ActionListener,Printable,ItemListener
{
Demo demo;
JToolBar toolbar;
private JComboBox combo;
protected JTextArea textArea;
public DemoControls(Demo demo) {
this.demo = demo;
demo.setBackground(Color.white);
add(toolbar = new JToolBar(), BorderLayout.PAGE_START);
toolbar.setFloatable(true);
addTool("image", "true Image", true);
addTool("<<<", "anticlockwise", false);
addTool(">>>", "clockwise", false);
addTool("zoom", "zoom", false);
addTool("zoomIn","zoomIn",false);
addTool("zoomOut","zoomOut",false);
addTool("back","last image",false);
addTool("next","next image",false);
addTool("print","Printing",false);
add(combo = new JComboBox());
combo.addItem("50%");
combo.addItem("100%");
combo.addItem("200%");
combo.addItem("300%");
combo.addItemListener(this);
}
public void addTool(String str, String tooltip, boolean state) {
JButton b = (JButton) toolbar.add(new JButton(str));
b.setBackground(state ? Color.pink : Color.lightGray);
b.setToolTipText(tooltip);
b.setSelected(state);
b.addActionListener(this);
}
public void itemStateChanged(ItemEvent event) {
if (event.getSource() == combo
&& event.getStateChange() == ItemEvent.SELECTED) {
System.out.println("Change:" + combo.getSelectedItem());
//System.out.println("Inside Item Listener");
demo.scalingFactor = combo.getSelectedItem();
}
}
public void actionPerformed(ActionEvent e) {
for (int i = 0; i < toolbar.getComponentCount(); i++) {
//System.out.println("Inside Action Listener");
JButton b = (JButton) toolbar.getComponentAtIndex(i);
b.setBackground(Color.lightGray);
}
JButton b = (JButton) e.getSource();
b.setBackground(Color.GRAY);
demo.direction = b.getText();
if(b.getText().equalsIgnoreCase("print")){
PrinterJob printJob = PrinterJob.getPrinterJob();
printJob.setPrintable(this);
if (printJob.printDialog())
{
try
{
printJob.print();
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
}
demo.repaint();
}
public int print(Graphics g, PageFormat arg1, int arg2)
throws PrinterException {
// TODO Auto-generated method stub
Graphics pg = getGraphics();
paint(pg);
demo.repaint();
return 0;
}
}
public static void main(String[] args) {
First demo = new First();
demo.init();
JFrame f = new JFrame("ToolBar");
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
f.pack();
f.setSize(new Dimension(200, 200));
f.show();
}
}