本文目錄一覽:
如何使用java旋轉圖片
廢話不多說直接上代碼:
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Transparency;
import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.imageio.ImageIO;
import javax.imageio.stream.ImageOutputStream;
public class ImageChange {
public static InputStream rotateImg(BufferedImage image, int degree, Color bgcolor) throws IOException {
int iw = image.getWidth();//原始圖象的寬度
int ih = image.getHeight();//原始圖象的高度
int w = 0;
int h = 0;
int x = 0;
int y = 0;
degree = degree % 360;
if (degree 0)
degree = 360 + degree;//將角度轉換到0-360度之間
double ang = Math.toRadians(degree);//將角度轉為弧度
/**
*確定旋轉後的圖象的高度和寬度
*/
if (degree == 180 || degree == 0 || degree == 360) {
w = iw;
h = ih;
} else if (degree == 90 || degree == 270) {
w = ih;
h = iw;
} else {
int d = iw + ih;
w = (int) (d * Math.abs(Math.cos(ang)));
h = (int) (d * Math.abs(Math.sin(ang)));
}
x = (w / 2) – (iw / 2);//確定原點坐標
y = (h / 2) – (ih / 2);
BufferedImage rotatedImage = new BufferedImage(w, h, image.getType());
Graphics2D gs = (Graphics2D)rotatedImage.getGraphics();
if(bgcolor==null){
rotatedImage = gs.getDeviceConfiguration().createCompatibleImage(w, h, Transparency.TRANSLUCENT);
}else{
gs.setColor(bgcolor);
gs.fillRect(0, 0, w, h);//以給定顏色繪製旋轉後圖片的背景
}
AffineTransform at = new AffineTransform();
at.rotate(ang, w / 2, h / 2);//旋轉圖象
at.translate(x, y);
AffineTransformOp op = new AffineTransformOp(at, AffineTransformOp.TYPE_BICUBIC);
op.filter(image, rotatedImage);
image = rotatedImage;
ByteArrayOutputStream byteOut= new ByteArrayOutputStream();
ImageOutputStream iamgeOut = ImageIO.createImageOutputStream(byteOut);
ImageIO.write(image, “png”, iamgeOut);
InputStream inputStream = new ByteArrayInputStream(byteOut.toByteArray());
return inputStream;
}
}
java 怎麼讓一個圖形繞一個點旋轉360度
import java.awt.Canvas;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
/**
* @author ZhengYesheng
*/
public class RotateImageCanvas extends Canvas implements Runnable
{
private static final long serialVersionUID = -1997487731464495923L;
BufferedImage img;
BufferedImage rotatedImg;
int degress = 0;
public RotateImageCanvas(BufferedImage img)
{
super();
this.img = img;
new Thread(this).start();
}
@Override
public void run()
{
while (true)
{
//A,與B的代碼配合決定旋轉的速度
degress += 1;
degress %= 360;
repaint();
try
{
if (degress == 0)
{
//繞一周後等待的時間在這裡設置
Thread.sleep(3 * 1000);
}
else
{
//考慮到視覺平滑,這裡不應大約40。
Thread.sleep(30);
}
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
@Override
public void paint(Graphics graphics)
{
super.paint(graphics);
//獲取旋轉指定角度後的圖片。為了避免累計誤差,這裡是用原始圖像旋轉的
rotatedImg = rotateImage(img, degress);
//繪製旋轉後的圖片
graphics.drawImage(rotatedImg, 0, 0, this);
}
/**
* 旋轉圖片為指定角度。
* 注意:1、這個方法實現了圖像的基於中點的旋轉,要想繞指定點,需要配合Matrix類
* 2、為避免圖像被裁切,結果圖片的尺寸也需要動態計算
* 3、現在旋轉後有黑色背景,如果不需要這個效果,需要設置結果圖片的Alpha模式
*
* @param bufferedimage
* 目標圖像
* @param degree
* 旋轉角度
* @return
*/
private BufferedImage rotateImage(BufferedImage bufferedimage, int degree)
{
int w = bufferedimage.getWidth();
int h = bufferedimage.getHeight();
int type = bufferedimage.getColorModel().getTransparency();
BufferedImage img;
Graphics2D graphics2d;
(graphics2d = (img = new BufferedImage(w, h, type)).createGraphics())
.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
graphics2d.rotate(Math.toRadians(degree), w / 2, h / 2);
graphics2d.drawImage(bufferedimage, 0, 0, null);
graphics2d.dispose();
return img;
}
}
java實現圖片旋轉90度的問題
類Graphics2D的方法rotate(double theta, double x,
double y)可以用來旋轉圖片
利用java實現圖片翻轉的代碼
重載渲染控件的paintComponent(Graphics
g)方法.
設你當前圖像實例為img,已初始化,需要旋轉的角度為ang
public
void
paintComponent(Graphics
g){
super.paintCompoent(g);
Graphics2D
g2d
=
(Graphics2D)g;
g2d.rotate(-angle);
g2d.drawImage(img,0,0,this.getWidth(),this.getHeight(),null);
}
Graphics,Graphics2D
類中有對當前描繪環境進行仿射變換的方法,包括translate,scale,rotate,也可以直接設置仿射變換矩陣,利用這點就可以根據所需要的實現方式來進行描繪.
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/302056.html