真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

java圖片旋轉(zhuǎn)的代碼 js旋轉(zhuǎn)圖片的代碼

java 圖像翻轉(zhuǎn) 。。求解釋 代碼?。?/h2>

在操作二維或三維的圖形圖像上,長期以來人們總結(jié)出了一些常用的變換矩陣,這些矩陣就像公式和定理一樣被開發(fā)人員使用,樓主可以把這些矩陣當(dāng)成公式來記憶,就像我們小時(shí)候背加法、乘法口訣一樣。

城中網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)建站,城中網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為城中上千提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)要多少錢,請找那個(gè)售后服務(wù)好的城中做網(wǎng)站的公司定做!

如果樓主想了解得更深入一些,請往下看:

[?x']???[??m00??m01??m02??]?[?x?]???[?m00x?+?m01y?+?m02?]

[?y']?=?[??m10??m11??m12??]?[?y?]?=?[?m10x?+?m11y?+?m12?]

[?1?]???[???0????0????1???]?[?1?]???[?????????1?????????]

上面的式子是jdk文檔中復(fù)制過來的,就是變換時(shí)的運(yùn)算過程,也就是說變換后的坐標(biāo)x'、y'是由一個(gè)3*3的矩陣與原坐標(biāo)x、y相乘得出的,其中的m00~m12就是AffineTransform構(gòu)造方法中的六個(gè)參數(shù),另外,式子中的最后一行是固定的。

矩陣乘法就不用說了吧,最后得出的結(jié)果就是上式中的最后一列,可能寫成下面這樣會更容易理解:

x'?=?m00x?+?m01y?+?m02

y'?=?m10x?+?m11y?+?m12

看出什么了嗎?其實(shí)這就是二維平面直角坐標(biāo)系中的兩個(gè)很簡單的二元一次方程而已,方程定義的就是橫縱坐標(biāo)變換的規(guī)則。

以水平翻轉(zhuǎn)為例,水平翻轉(zhuǎn)是以圖形/圖像的垂直中線為軸來翻轉(zhuǎn)的,因此任何一個(gè)點(diǎn)(x,y)變換后的坐標(biāo)應(yīng)該是y坐標(biāo)不變,x坐標(biāo)變?yōu)?x+width-1,即(-x+width-1,y),之所以減1是因?yàn)榇怪敝休S上的點(diǎn)不應(yīng)該改變。

理解了上面的變換過程之后,將結(jié)果帶入上面的兩個(gè)二元一次方程,可以得出

m00=-1、m01=0、m02=width-1

m10=0、m11=1、m12=0

正好是你給的代碼中的六個(gè)值(AffineTransform構(gòu)造方法中的參數(shù)順序?yàn)閙00、m10、m01、m11、m02、m12)

其他幾個(gè)變換道理是一樣的

java環(huán)境下,如何實(shí)現(xiàn)3D圖形的自動旋轉(zhuǎn)?

程序?qū)崿F(xiàn)思路: 在javafx中Node對象有一個(gè)effect屬性,可以用于實(shí)現(xiàn)各種特效。PerspectiveTransform特效可以使Node對象實(shí)現(xiàn)透視變換。因此我們可以通過計(jì)算透視變換中每個(gè)點(diǎn)的位置來實(shí)現(xiàn)3D翻轉(zhuǎn)特效。

實(shí)現(xiàn)步驟: 1、定義FlipView對象。包含以下屬性:

復(fù)制代碼 代碼如下:

//正面視圖

public Node frontNode;

//反面視圖

public Node backNode;

//是否翻轉(zhuǎn)

boolean flipped = false;

//翻轉(zhuǎn)角度

DoubleProperty time = new SimpleDoubleProperty(Math.PI / 2);

//正面翻轉(zhuǎn)特效

PerspectiveTransform frontEffect = new PerspectiveTransform();

//反面翻轉(zhuǎn)特效

PerspectiveTransform backEffect = new PerspectiveTransform();

create方法返回需要顯示的內(nèi)容:

復(fù)制代碼 代碼如下:

private void create() {

time.addListener(new ChangeListener() {

@Override

public void changed(ObservableValue? extends Number arg0,

Number arg1, Number arg2) {

setPT(frontEffect, time.get());

setPT(backEffect, time.get());

}

});

anim.getKeyFrames().addAll(frame1, frame2);

backNode.visibleProperty().bind(

Bindings.when(time.lessThan(0)).then(true).otherwise(false));

frontNode.visibleProperty().bind(

Bindings.when(time.lessThan(0)).then(false).otherwise(true));

setPT(frontEffect, time.get());

setPT(backEffect, time.get());

frontNode.setEffect(frontEffect);

backNode.setEffect(backEffect);

getChildren().addAll(backNode, frontNode);

}

以上代碼需要注意的是: 隨著time值的變化frontEffect和backEffect的值也會隨著變換。 2、PerspectiveTransform特效的實(shí)現(xiàn)使用了Math.sin()和Math.cos()方法模擬3D角度變換。 具體實(shí)現(xiàn)如下:

復(fù)制代碼 代碼如下:

private void setPT(PerspectiveTransform pt, double t) {

double width = 200;

double height = 200;

double radius = width / 2;

double back = height / 10;

pt.setUlx(radius - Math.sin(t) * radius);

pt.setUly(0 - Math.cos(t) * back);

pt.setUrx(radius + Math.sin(t) * radius);

pt.setUry(0 + Math.cos(t) * back);

pt.setLrx(radius + Math.sin(t) * radius);

pt.setLry(height - Math.cos(t) * back);

pt.setLlx(radius - Math.sin(t) * radius);

pt.setLly(height + Math.cos(t) * back);

}

3、角度變換在1秒的時(shí)間內(nèi)從3.14/2變換到-3.14/2。

復(fù)制代碼 代碼如下:

KeyFrame frame1 = new KeyFrame(Duration.ZERO, new KeyValue(time,

Math.PI / 2, Interpolator.LINEAR));

KeyFrame frame2 = new KeyFrame(Duration.seconds(1),

new EventHandler() {

@Override

public void handle(ActionEvent event) {

flipped = !flipped;

}

}, new KeyValue(time, -Math.PI / 2, Interpolator.LINEAR));

4、FlipView對象的創(chuàng)建:通過構(gòu)造函數(shù)可以很方便的創(chuàng)建FlipView對象.

復(fù)制代碼 代碼如下:

ImageView image1 = new ImageView(new Image(getClass()

.getResourceAsStream("lion1.png")));

ImageView image2 = new ImageView(new Image(getClass()

.getResourceAsStream("lion2.png")));

FlipView flip = new FlipView(image1, image2);

如何使用java旋轉(zhuǎn)圖片

廢話不多說直接上代碼:

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;//將角度轉(zhuǎn)換到0-360度之間

double?ang?=?Math.toRadians(degree);//將角度轉(zhuǎn)為弧度

/**

*確定旋轉(zhuǎn)后的圖象的高度和寬度

*/

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);//確定原點(diǎn)坐標(biāo)

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);//以給定顏色繪制旋轉(zhuǎn)后圖片的背景

}

AffineTransform?at?=?new?AffineTransform();

at.rotate(ang,?w?/?2,?h?/?2);//旋轉(zhuǎn)圖象

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實(shí)現(xiàn)圖片翻轉(zhuǎn)的代碼

重載渲染控件的paintComponent(Graphics

g)方法.

設(shè)你當(dāng)前圖像實(shí)例為img,已初始化,需要旋轉(zhuǎn)的角度為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

類中有對當(dāng)前描繪環(huán)境進(jìn)行仿射變換的方法,包括translate,scale,rotate,也可以直接設(shè)置仿射變換矩陣,利用這點(diǎn)就可以根據(jù)所需要的實(shí)現(xiàn)方式來進(jìn)行描繪.


網(wǎng)站名稱:java圖片旋轉(zhuǎn)的代碼 js旋轉(zhuǎn)圖片的代碼
網(wǎng)址分享:http://weahome.cn/article/dodjdcg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部