public static void main(String[] args) {
	Display display = new Display();
	
	// create an image with the word "hello" on it
	final Image image0 = new Image(display, 50, 30);
	GC gc = new GC(image0);
	gc.setBackground(display.getSystemColor(SWT.COLOR_RED));
	gc.fillRectangle(image0.getBounds());
	gc.drawString("hello",	5, 5, true);
	gc.dispose();
	
	ImageData data = image0.getImageData();
	// rotate and flip this image
	final Image image1 = new Image(display, rotate(data, SWT.LEFT));
	final Image image2 = new Image(display, rotate(data, SWT.RIGHT));
	final Image image3 = new Image(display, rotate(data, SWT.DOWN));
	final Image image4 = new Image(display, flip(data, true));
	final Image image5 = new Image(display, flip(data, false));

	Shell shell = new Shell(display);
	// draw the results on the shell
	shell.addPaintListener(new PaintListener(){
		@Override
		public void paintControl(PaintEvent e) {
			e.gc.drawText("Original Image:", 10, 10, true);
			e.gc.drawImage(image0, 10, 40);
			e.gc.drawText("Left, Right, 180:", 10, 80, true);
			e.gc.drawImage(image1, 10, 110);
			e.gc.drawImage(image2, 50, 110);
			e.gc.drawImage(image3, 90, 110);
			e.gc.drawText("Flipped Vertical, Horizontal:", 10, 170, true);
			e.gc.drawImage(image4, 10, 200);
			e.gc.drawImage(image5, 70, 200);
		}
	});
	shell.setSize(300, 300);
	shell.open();
	while (!shell.isDisposed()) {
		if (!display.readAndDispatch())
			display.sleep();
	}
	image0.dispose();
	image1.dispose();
	image2.dispose();
	image3.dispose();
	image4.dispose();
	image5.dispose();
	display.dispose();
}