⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 simpleimage.java

📁 一款机器人仿真软件,功能上与microsoft robotics studio有些相似,但基于Java平台.突出特点是给出了传感器仿真,如声纳,激光等.
💻 JAVA
字号:
/* * Created on 18 nov. 2005 * credits: largely inspired from : http://www.dickbaldwin.com/java/Java174.htm#pixelgrabber%20class%20class *  * important methods are : constructor, setPixel, getPixel, getImage *  */package contribs.maploader;import java.awt.Color;import java.awt.Frame;import java.awt.Graphics;import java.awt.Image;import java.awt.MediaTracker;import java.awt.Toolkit;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.awt.image.ImageObserver;import java.awt.image.MemoryImageSource;import java.awt.image.PixelGrabber;class SimpleImage extends Frame {	private static final long serialVersionUID = -1L;	private Image _image;//ref to raw image file fetched from disk		// File references	private String _filename; // name of the image file	private int _width; // width of the image file	private int _height; // height of the image file		// the pixel matrix representing the image rbg pixels	private int[] _pixelMatrix;	public SimpleImage( String __filename , boolean __display)	{		// step 1 : load the image (jpeg, gif or png)			_filename = __filename;		_image = Toolkit.getDefaultToolkit().getImage(_filename);		    MediaTracker mediaTracker = new MediaTracker(this);	    mediaTracker.addImage(_image,1);		    try{ // (1) wait for image to be loaded (2) timeout in 10s 	    		if( !mediaTracker.waitForID(1,10000) )	    		{	    			// indicates where the file has been searched, better when 	    			// you don't know where the file should be.	    			System.out.println("[error] image could not be loaded.");	    			System.out.println("  please verify that the file exists : ");	    			System.err.println("  "+System.getProperty("user.dir")+System.getProperty("file.separator")+_filename);	    			System.exit(-1);        	    		}	    }	    catch(InterruptedException e) { e.printStackTrace(); }    	    // step 2 : register the image 	    	    _width = _image.getWidth(this);	    _height = _image.getHeight(this);	    _pixelMatrix = new int [ _width * _height ];	    try{	    		PixelGrabber pixelGrabber = new PixelGrabber(_image,0,0,_width,_height,_pixelMatrix,0,_width);	    		if( ! ( pixelGrabber.grabPixels() && ((pixelGrabber.getStatus() & ImageObserver.ALLBITS) != 0) ) )	    			System.out.println("[error] grabbing failed.");	    }	    catch (InterruptedException e) { e.printStackTrace(); }	    	    // step 3 : if you want to display the image, display it	    	    if ( __display == true ) preparePaint();	}		/**	 * get the raw pixel	 * @param __x position of x	 * @param __y position of y	 * @return the raw pixel value	 */	public int getRawPixel ( int __x, int __y )	{		return ( _pixelMatrix[__y*_width+__x] );	}		/**	 * set the raw pixel value	 * @param __x position of x	 * @param __y position of y	 * @param __rawvalue the new raw value of the pixel to set.	 */	public void setRawPixel ( int __x, int __y , int __rawvalue )	{		_pixelMatrix[__y*_width+__x] = __rawvalue;	}		/** 	 * return : alpha, red, green, blue (each 256 bits value)	 */	public int[] getPixel ( int __x, int __y )	{		int values[] = new int[4];		int rawvalue = _pixelMatrix[__y*_width+__x];		values[0] = ( rawvalue & 0xFF000000 ) / (int)Math.pow(256,3);		values[1] = ( rawvalue & 0x00FF0000 ) / (int)Math.pow(256,2);		values[2] = ( rawvalue & 0x0000FF00 ) / 256;		values[3] = ( rawvalue & 0x000000FF );		return ( values );	}		/**	 * Set the value of a pixel (x,y)	 * @param __x coord x	 * @param __y coord y	 * @param __alpha alpha value (0-255)	 * @param __red red value (0-255)	 * @param __green green value (0-255)	 * @param __blue blue value (0-255)	 */	public void setPixel ( int __x, int __y , int __alpha, int __red, int __green, int __blue )	{		if ( __red > 255 || __green > 255 || __blue > 255 || __alpha > 255 )		{			System.out.println("[warning] setPixel values must be between 0 and 255.");			return;		}		_pixelMatrix[__y*_width+__x] = __alpha * (int)Math.pow(256,3) + __red * (int)Math.pow(256,2) + __green * 256 + __blue ;	}			public Image getImage ()	{		return ( this.createImage( new MemoryImageSource( _width, _height, _pixelMatrix, 0, _width) ) );	}		/**	 * returns the width of the image.	 */	public int getWidth()	{		return (_width);	}		/**	 * returns the height of the image.	 */	public int getHeight()	{		return (_height);	}	/**	 * Displays informations about the picture loaded.	 */	public void displayInformation ()	{		System.out.println("filename: " + _filename);		System.out.println("width   : " + _width);		System.out.println("height  : " + _height);	}  	/**	 * Display the image in a frame. 	 */	public void preparePaint()	{	    this.setVisible(true);	    	    	    //inTop = this.getInsets().top;	    //inLeft = this.getInsets().left;	    this.setSize(this.getInsets().left+_width,this.getInsets().top+_height);	    this.setTitle("Image viewer");	    this.setBackground(Color.black);	    	    this.addWindowListener(new WindowAdapter(){	    	public void windowClosing(WindowEvent e){System.exit(0);}	    	});	}	/**	 * paint the graphics in the frame.	 */	public void paint(Graphics g)	{		Image image = getImage();		g.drawImage(_image,this.getInsets().left,this.getInsets().top,this); // image at loading time		g.drawImage(image,this.getInsets().left,this.getInsets().top+_height,this); // current image in memory	}	/* *** maintenant amusons nous un peu *** */		public void exampleImageManipulation_1 ()	{		/*		for( int i = 0; i < (_width*_height) ; i++ )			_pixelMatrix[i] = _pixelMatrix[i] & 0xFFFFFF;  // alpha, R, G, B -- alpha=255=maxOpacity		// ...SAME AS...		**/		for ( int x = 0 ; x != _width ; x++ )			for ( int y = 0 ; y != _height ; y++ )			{				int[] values = getPixel(x,y);				setPixel (x,y,values[0],values[1],values[2],values[3]); // alpha, R, G, B -- alpha=255=maxOpacity			}	}		public void exampleImageManipulation_2 ()	{		for ( int x = 0 ; x != _width ; x++ )			for ( int y = 0 ; y != _height ; y++ )			{				int[] values = getPixel(x,y);				setPixel (x,y,255,(values[1]+1)%256,(values[2]+1)%256,(values[3]+1)%256); // alpha, R, G, B -- alpha=255=maxOpacity			}	}	public void exampleImageManipulation_3 ()	{		for ( int x = 10 ; x != _width-10 ; x++ )			for ( int y = 10 ; y != _height-10 ; y++ )			{				int[] values = getPixel((int)((double)x-8*Math.sin(x)),(int)((double)y-4*Math.cos(y)));				setPixel (x,y,255,(values[1]+1)%256,(values[2]+1)%256,(values[3]+1)%256); // alpha, R, G, B -- alpha=255=maxOpacity			}	}			/* Main method for test and demo purpose */		public static void main(String[] args)	{		// Display Examples		/*		boolean display = false;		SimpleImage simpleimage = new SimpleImage("nicolas/test.gif", display);		simpleimage.displayInformation();		while (true) 		{ 			simpleimage.exampleImageManipulation_3();		}		//if ( display ) obj.repaint();		*/						// Maze Display example		boolean display = false;		SimpleImage simpleimage = new SimpleImage("ressources/map1.png", display);		simpleimage.displayInformation();				for ( int y = 0 ; y != simpleimage.getHeight() ; y++ )		{			for ( int x = 0 ; x != simpleimage.getWidth() ; x++ )			{				int [] values = simpleimage.getPixel(x,y);				if ( values[1] == 255 && values[2] == 0 && values[3] == 0 ) 					System.out.print("#");				else					if ( values[1] == 0 && values[2] == 255 && values[3] == 0 )						System.out.print("X");					else						if ( values[1] == 0 && values[2] == 0 && values[3] == 255 )							System.out.print("!");						else							System.out.print(" ");			}			System.out.print("\n");		}				}	  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -