導航:首頁 > 編程語言 > 圖片放大java

圖片放大java

發布時間:2023-08-01 13:15:29

① 怎麼用java代碼放大或縮小圖片不失真。

放大圖像不會導致失真,而縮小圖像將不可避免的失真。
Java中也同樣是這樣。
但java提供了4個縮放的微調選項。
image.SCALE_SMOOTH
//平滑優先
image.SCALE_FAST//速度優先
image.SCALE_AREA_AVERAGING
//區域均值
image.SCALE_REPLICATE
//像素復制型縮放
image.SCALE_DEFAULT
//默認縮放模式
調用方法
Image
new_img=old_img.getScaledInstance(1024,
768,
Image.SCALE_SMOOTH);
得到一張縮放後的新圖。

② 怎麼用java代碼放大或縮小圖片不失真。

放大圖像不會導致失真,而縮小圖像將不可避免的失真。Java中也同樣是這樣。但java提供了4個縮放的微調選項。image.SCALE_SMOOTH //平滑優先image.SCALE_FAST//速度優先image.SCALE_AREA_AVERAGING //區域均值image.SCALE_REPLICATE //像素復制型縮放image.SCALE_DEFAULT //默認縮放模式調用方法Image new_img=old_img.getScaledInstance(1024, 768, Image.SCALE_SMOOTH);得到一張縮放後的新圖。怎麼用java代碼放大或縮小圖片不失真。

③ 如何用Java實現圖形的放大和縮小

要用Java實現圖形的放大和縮小,可以使用以下代碼:

import java.awt.*;import java.awt.event.*;import javax.swing.*;//實現矩形在規定時間間隔里循環放大縮小;

public class Test02 extends JFrame implements Runnable{static int w = 0,h = 0;//w:矩形寬度,h:矩形高度 ;

boolean flag = false;//false:放大,true:縮小public Test02(){this.setSize (500,500);this.setVisible (true);this.setTitle (w+","+h);this.setLocationRelativeTo (this);this.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);}public void paint(Graphics g){int width = getWidth();

//窗口寬度int height = getWidth();//窗口高度g.setColor (Color.WHITE);//設置畫筆顏色g.fillRect (0,0,width,height); //填充窗口int x = (width-w)/2;//x:矩形左上角橫坐標int y = (height-h)/2;//y:矩形左上角縱坐標g.setColor (Color.BLUE);//同上...g.drawRect (x,y,w,h);

//畫矩形,實心矩形為fillRect(....)g.setColor (Color.RED);//同上...g.drawOval (x,y,w,h); //畫橢圓setTitle (w+","+h); //以矩形寬和高來設置窗口標題}public void setSize(){float n = getWidth()/getWidth();if(w==0||h==0)flag = false;

if(w==getWidth()||h==getWidth())flag = true;if(!flag){w+=1;h+=n;}if(flag){w-=1;h-=n;}}public void run(){while(true){try{Thread.sleep (5);//間隔}catch(InterruptedException ie){}setSize();repaint();}}public static void main(String[] args){Test02 t = new Test02();Thread th = new Thread(t);th.start();}}

④ 我寫的java圖片查看器怎麼讓圖片縮小放大呢

放大像素會失真,如果你要實現這一共能的話可以用JLabel來顯示圖片。有一個方法可以實現圖片的縮放ImageIcon
ii
=
new
ImageIcon("img/item.jpg");
Image
img
=
ii.getImage();
img
=
img.getScaledInstance(100,
100,
Image.SCALE_DEFAULT);
ii
=
new
ImageIcon(img);這個例子的getScaledInstance方法可以生成一個新的Image對象,可以縮放成指定的大小。

⑤ 如何用 java 以雙線性內插法去放大一張圖片

圖像的縮放很好理解,就是像的放大和縮小。傳統的繪畫工具中,有一種叫做「放大尺」的繪畫工具,畫家常用它來放大圖畫。當然,在計算機上,我們不再需要用放大尺去放大或縮小圖像了,把這個工作交給程序來完成就可以了。下面就來講講計算機怎麼來放大縮小圖象;在本文中,我們所說的圖像都是指點陣圖,也就是用一個像素矩陣來描述圖像的方法,對於另一種圖像:用函數來描述圖像的矢量圖,不在本文討論之列。
越是簡單的模型越適合用來舉例子,我們就舉個簡單的圖像:3X3 的256級灰度圖,也就是高為3個象素,寬也是3個象素的圖像,每個象素的取值可以是 0-255,代表該像素的亮度,255代表最亮,也就是白色,0代表最暗,即黑色。假如圖像的象素矩陣如下圖所示(這個原始圖把它叫做源圖,Source):
234 38 22
67 44 12
89 65 63
這個矩陣中,元素坐標(x,y)是這樣確定的,x從左到右,從0開始,y從上到下,也是從零開始,這是圖象處理中最常用的坐標系,就是這樣一個坐標:
--------------------->X
|
|
|
|

|
∨Y
如果想把這副圖放大為 4X4大小的圖像,那麼該怎麼做呢?那麼第一步肯定想到的是先把4X4的矩陣先畫出來再說,好了矩陣畫出來了,如下所示,當然,矩陣的每個像素都是未知數,等待著我們去填充(這個將要被填充的圖的叫做目標圖,Destination):
? ? ? ?
? ? ? ?
? ? ? ?
? ? ? ?

然後要往這個空的矩陣裡面填值了,要填的值從哪裡來來呢?是從源圖中來,好,先填寫目標圖最左上角的象素,坐標為(0,0),那麼該坐標對應源圖中的坐標可以由如下公式得出:
srcX=dstX* (srcWidth/dstWidth) , srcY = dstY * (srcHeight/dstHeight)
好了,套用公式,就可以找到對應的原圖的坐標了(0*(3/4),0*(3/4))=>(0*0.75,0*0.75)=>(0,0)
,找到了源圖的對應坐標,就可以把源圖中坐標為(0,0)處的234象素值填進去目標圖的(0,0)這個位置了。
接下來,如法炮製,尋找目標圖中坐標為(1,0)的象素對應源圖中的坐標,套用公式:
(1*0.75,0*0.75)=>(0.75,0)
結果發現,得到的坐標裡面竟然有小數,這可怎麼辦?計算機里的圖像可是數字圖像,象素就是最小單位了,象素的坐標都是整數,從來沒有小數坐標。這時候採用的一種策略就是採用四捨五入的方法(也可以採用直接舍掉小數位的方法),把非整數坐標轉換成整數,好,那麼按照四捨五入的方法就得到坐標(1,0),完整的運算過程就是這樣的:
(1*0.75,0*0.75)=>(0.75,0)=>(1,0)
那麼就可以再填一個象素到目標矩陣中了,同樣是把源圖中坐標為(1,0)處的像素值38填入目標圖中的坐標。

依次填完每個象素,一幅放大後的圖像就誕生了,像素矩陣如下所示:
234 38 22 22
67 44 12 12

89 65 63 63
這種放大圖像的方法叫做最臨近插值演算法,這是一種最基本、最簡單的圖像縮放演算法,效果也是最不好的,放大後的圖像有很嚴重的馬賽克,縮小後的圖像有很嚴重的失真;效果不好的根源就是其簡單的最臨近插值方法引入了嚴重的圖像失真,比如,當由目標圖的坐標反推得到的源圖的的坐標是一個浮點數的時候,採用了四捨五入的方法,直接採用了和這個浮點數最接近的象素的值,這種方法是很不科學的,當推得坐標值為 0.75的時候,不應該就簡單的取為1,既然是0.75,比1要小0.25 ,比0要大0.75 ,那麼目標象素值其實應該根據這個源圖中虛擬的點四周的四個真實的點來按照一定的規律計算出來的,這樣才能達到更好的縮放效果。雙線型內插值演算法就是一種比較好的圖像縮放演算法,它充分的利用了源圖中虛擬點四周的四個真實存在的像素值來共同決定目標圖中的一個像素值,因此縮放效果比簡單的最鄰近插值要好很多。
雙線性內插值演算法描述如下:
對於一個目的像素,設置坐標通過反向變換得到的浮點坐標為(i+u,j+v) (其中i、j均為浮點坐標的整數部分,u、v為浮點坐標的小數部分,是取值[0,1)區間的浮點數),則這個像素得值 f(i+u,j+v) 可由原圖像中坐標為 (i,j)、(i+1,j)、(i,j+1)、(i+1,j+1)所對應的周圍四個像素的值決定,即:

f(i+u,j+v) = (1-u)(1-v)f(i,j) + (1-u)vf(i,j+1) + u(1-v)f(i+1,j) + uvf(i+1,j+1) 公式1

其中f(i,j)表示源圖像(i,j)處的的像素值,以此類推。

比如,象剛才的例子,現在假如目標圖的象素坐標為(1,1),那麼反推得到的對應於源圖的坐標是(0.75 , 0.75), 這其實只是一個概念上的虛擬象素,實際在源圖中並不存在這樣一個象素,那麼目標圖的象素(1,1)的取值不能夠由這個虛擬象素來決定,而只能由源圖的這四個象素共同決定:(0,0)(0,1)(1,0)(1,1),而由於(0.75,0.75)離(1,1)要更近一些,那麼(1,1)所起的決定作用更大一些,這從公式1中的系數uv=0.75×0.75就可以體現出來,而(0.75,0.75)離(0,0)最遠,所以(0,0)所起的決定作用就要小一些,公式中系數為(1-u)(1-v)=0.25×0.25也體現出了這一特點;

經典,採納吧

閱讀全文

與圖片放大java相關的資料

熱點內容
在健康青島App掛號怎麼查詢 瀏覽:269
普通人上網用的是什麼伺服器 瀏覽:453
python安裝了找不著 瀏覽:181
常微分第三版答案pdf 瀏覽:264
安卓機qq怎麼開懸浮窗 瀏覽:63
備孕三年了怎麼緩解壓力大 瀏覽:743
登錄阿里雲伺服器黑屏 瀏覽:336
匿名元組Python 瀏覽:725
華為運動健康存儲的文件夾 瀏覽:522
cad正多邊形命令 瀏覽:461
壓縮比150能加97油嗎 瀏覽:399
linux新建群在哪個文件夾 瀏覽:794
韻達快運app在哪裡簽收 瀏覽:338
阿里雲伺服器如何綁定備案域名 瀏覽:273
單片機用什麼鍵盤好 瀏覽:25
android動畫面試 瀏覽:309
pdf無法刪除 瀏覽:90
ftp刪除文件java 瀏覽:89
裂變棋牌源碼 瀏覽:87
邀月命令江別鶴退婚 瀏覽:656