java旋轉圖片,java獲取圖片旋轉角度

本文目錄一覽:

如何使用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-tw/n/302056.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-30 16:10
下一篇 2024-12-30 16:10

相關推薦

  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • 用Python繪製酷炫圖片

    在本篇文章中,我們將展示如何使用Python繪製酷炫的圖片。 一、安裝Python繪圖庫 在使用Python繪製圖片之前,我們需要先安裝Python繪圖庫。Python有很多繪圖庫…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字元串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字元串中是否存在多個指定字元: 一、字元串遍歷 字元串是Java編程中非常重要的一種數據類型。要判斷字元串中是否存在多個指定字元…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29

發表回復

登錄後才能評論