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

📄 rotation.java

📁 基于j2me的任意角度图片旋转
💻 JAVA
字号:
package com.midp;
import java.lang.Math;
public class Rotation {
	
	public static int TRANSPARENT = 0;
	
	/**
	 * 解决坏点的基本实现,没有考虑效率
	 * @param _pixels
	 * @param _width
	 * @param _height
	 * @param _angle
	 * @return
	 */
	public static int[] rotate1(int[] _pixels,int _width,int _height,double _angle)
	{
		int i,j;
		double radius = Math.sqrt(_width*_width + _height*_height);
		int r = (int)radius;
		int[] newPixels = new int[r*r];
		for(i = 0; i < newPixels.length;i++)
		{
				newPixels[i] = (TRANSPARENT)<<24;
		}
		double x1,y1;
		int x2,y2;
		double cos = Math.cos(_angle);
		double sin = Math.sin(_angle);
		for(i = 0;i < r;i++)
		{
			for(j = 0;j < r;j++)
			{
				x1 = j + (- r)/2;
				y1 = i + (- r)/2;
				x2 = (int)(x1*cos + y1*sin);
				y2 = (int)(-x1*sin + y1*cos);
				if(x2 >= -_width/2&&x2< _width/2&&y2 >= -_height/2&&y2< _height/2)
				{
					int k = (y2 + _height/2)*_width+x2+_width/2;
					
					newPixels[i*r + j] = _pixels[k];
				}
			}
		}
		return newPixels;
	}
	
	/**
	 * 该算法存在坏点
	 * @param _pixels
	 * @param _width
	 * @param _height
	 * @param _angle
	 * @return
	 */
	public static int[] rotate2(int[] _pixels,int _width,int _height,double _angle)
	{
		int i,j;
		double radius = Math.sqrt(_width*_width + _height*_height);
		int r = (int)radius;
		int[] newPixels = new int[r*r];
		for(i = 0; i < newPixels.length;i++)
		{
				newPixels[i] = (TRANSPARENT)<<24;
		}
		double x1,y1;
		int x2,y2;
		double cos = Math.cos(_angle);
		double sin = Math.sin(_angle);
		for(i = 0; i < _height;i++)
		{
			for(j = 0;j < _width;j++)
			{
				x1 = j + (- _width)/2;
				y1 = i + (- _height)/2;
				x2 = (int)(x1*cos - y1*sin);
				y2 = (int)(x1*sin + y1*cos);
				x2 += r/2;
				y2 += r/2;
				newPixels[y2*r+x2] = _pixels[i*_width+j];
			}
		}
		return newPixels;
	}
	
	/**
	 * 优化以后的算法
	 * @param _pixels
	 * @param _width
	 * @param _height
	 * @param _angle
	 * @return
	 */
	public static int[] rotate3(int[] _pixels,int _width,int _height,double _angle)
	{
		int i,j;
		double radius = Math.sqrt(_width*_width + _height*_height);
		int r = (int)radius;
		int[] newPixels = new int[r*r];
		for(i = 0; i < newPixels.length;i++)
		{
				newPixels[i] = (TRANSPARENT)<<24;
		}
		double x2,y2;
		int x3,y3;
		double cos = Math.cos(_angle);
		double sin = Math.sin(_angle);
		for(i = 0;i < r;i++)
		{
			x2 = (-r/2)*cos + (i - r/2)*sin;
			y2 = (r/2)*sin + (i - r/2)*cos;
			x3 = (int)x2;
			y3 = (int)y2;
			for(j = 0;j < r;j++)
			{
				if(x3 >= -_width/2&&x3< _width/2&&y3 >= -_height/2&&y3< _height/2)
				{
					newPixels[i*r + j] = _pixels[(y3 + _height/2)*_width+x3+_width/2];
				}
				x2 += cos;
				y2 -= sin;
				x3 = (int)x2;
				y3 = (int)y2;
			}
		}
		return newPixels;
	}
	
}

⌨️ 快捷键说明

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