![JAVA圖像縮放處理_第1頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/16/41129b33-e4f4-4f12-b2b1-b6319dfd7fda/41129b33-e4f4-4f12-b2b1-b6319dfd7fda1.gif)
![JAVA圖像縮放處理_第2頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/16/41129b33-e4f4-4f12-b2b1-b6319dfd7fda/41129b33-e4f4-4f12-b2b1-b6319dfd7fda2.gif)
![JAVA圖像縮放處理_第3頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/16/41129b33-e4f4-4f12-b2b1-b6319dfd7fda/41129b33-e4f4-4f12-b2b1-b6319dfd7fda3.gif)
![JAVA圖像縮放處理_第4頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/16/41129b33-e4f4-4f12-b2b1-b6319dfd7fda/41129b33-e4f4-4f12-b2b1-b6319dfd7fda4.gif)
![JAVA圖像縮放處理_第5頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/16/41129b33-e4f4-4f12-b2b1-b6319dfd7fda/41129b33-e4f4-4f12-b2b1-b6319dfd7fda5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、JAVA圖像縮放處理 今天在網(wǎng)上看到了一篇關(guān)于JAVA圖像處理的文章,博主貼出了一個處理類:特點是高品質(zhì)縮小,具體代碼如下:import java.awt.image.BufferedImage;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import javax.imageio.ImageIO;public class ImageScale privat
2、e int width; private int height; private int scaleWidth; double support = (double) 3.0; double contrib; double normContrib;
3、160; double tmpContrib; int startContrib, stopContrib; int nDots; int nHalfDots; public BufferedImage imageZoomOut(BufferedImage srcBufferImage, i
4、nt w, int h, boolean lockScale) width = srcBufferImage.getWidth(); height = srcBufferImage.getHeight(); scal
5、eWidth = w; if (lockScale) h = w * height / width;
6、60; if (DetermineResultSize(w, h) = 1) return srcBufferImage; CalContrib();
7、; BufferedImage pbOut = HorizontalFiltering(srcBufferImage, w); BufferedImage pbFinalOut = VerticalFiltering(pbOut, h); return pbFin
8、alOut; /* */* * 決定圖像尺寸 */ private int DetermineResultSize(int w, int h) double
9、scaleH, scaleV; scaleH = (double) w / (double) width; scaleV = (double) h / (double) height; /
10、 需要判斷一下scaleH,scaleV,不做放大操作 if (scaleH >= 1.0 && scaleV >= 1.0) return 1;
11、160; return 0; / end of DetermineResultSize() private double Lanczos(int i, int inWidth, int outWidth, double Support)
12、 double x; x = (double) i * (double) outWidth / (double) inWidth; return Math.sin(x * Math.PI) /
13、;(x * Math.PI) * Math.sin(x * Math.PI / Support) / (x * Math.PI / Support); / end of Lanczos() / / Assumption: same horizonta
14、l and vertical scaling factor / private void CalContrib() nHalfDots = (int) (double) width * support / (double) scaleWidth);
15、160; nDots = nHalfDots * 2 + 1; try contrib = new doublenDots;
16、0; normContrib = new doublenDots; tmpContrib = new doublenDots; catch (Exception e)
17、 System.out.println("init contrib,normContrib,tmpContrib" + e); int center = nHalfDots; &
18、#160; contribcenter = 1.0; double weight = 0.0; int i = 0; for (i = 1;
19、;i <= center; i+) contribcenter + i = Lanczos(i, width, scaleWidth, support); weight += c
20、ontribcenter + i; for (i = center - 1; i >= 0; i-) contribi =
21、0;contribcenter * 2 - i; weight = weight * 2 + 1.0; for (i = 0; i <= center
22、; i+) normContribi = contribi / weight; for (i = center + 1; i <&
23、#160;nDots; i+) normContribi = normContribcenter * 2 - i; / end of CalContrib()
24、; / 處理邊緣 private void CalTempContrib(int start, int stop) double weight = 0; int i = 0; &
25、#160; for (i = start; i <= stop; i+) weight += contribi; for
26、60;(i = start; i <= stop; i+) tmpContribi = contribi / weight; / end of CalTem
27、pContrib() private int GetRedValue(int rgbValue) int temp = rgbValue & 0x00ff0000; return temp >> 16;
28、; private int GetGreenValue(int rgbValue) int temp = rgbValue & 0x0000ff00; return temp >> 8; &
29、#160; private int GetBlueValue(int rgbValue) return rgbValue & 0x000000ff; private int ComRGB(int redValue, int
30、 greenValue, int blueValue) return (redValue << 16) + (greenValue << 8) + blueValue; / 行水平濾波 private
31、 int HorizontalFilter(BufferedImage bufImg, int startX, int stopX, int start, int stop, int y, double pContrib)
32、 double valueRed = 0.0; double valueGreen = 0.0; double valueBlue = 0.0; int valueRGB = 0;
33、0; int i, j; for (i = startX, j = start; i <= stopX; i+, j+) valueR
34、GB = bufImg.getRGB(i, y); valueRed += GetRedValue(valueRGB) * pContribj; valueGreen += GetGreenValue(valueRGB)
35、60;* pContribj; valueBlue += GetBlueValue(valueRGB) * pContribj; valueRGB = ComRGB(Clip(int) v
36、alueRed), Clip(int) valueGreen), Clip(int) valueBlue); return valueRGB; / end of HorizontalFilter() / 圖片水平濾波 private BufferedIma
37、ge HorizontalFiltering(BufferedImage bufImage, int iOutW) int dwInW = bufImage.getWidth(); int dwInH = bufImage.getHeight();
38、160; int value = 0; BufferedImage pbOut = new BufferedImage(iOutW, dwInH, BufferedImage.TYPE_INT_RGB); for (int x = 0;
39、x < iOutW; x+) int startX; int start; int X
40、;= (int) (double) x) * (double) dwInW) / (double) iOutW) + 0.5); int y = 0; startX
41、= X - nHalfDots; if (startX < 0) startX = 0;
42、; start = nHalfDots - X; else start = 0
43、; int stop; int stopX = X + nHalfDots;
44、 if (stopX > (dwInW - 1) stopX = dwInW - 1; &
45、#160; stop = nHalfDots + (dwInW - 1 - X); else
46、stop = nHalfDots * 2; if (start > 0 | stop < nDots - 1) &
47、#160; CalTempContrib(start, stop); for (y = 0; y < dwInH; y+)
48、 value = HorizontalFilter(bufImage, startX, stopX, start, stop, y, tmpContrib);
49、160; pbOut.setRGB(x, y, value); else
50、0; for (y = 0; y < dwInH; y+) value = HorizontalFilter(bufImage, startX, sto
51、pX, start, stop, y, normContrib); pbOut.setRGB(x, y, value); &
52、#160; return pbOut; / end of HorizontalFiltering() private
53、60;int VerticalFilter(BufferedImage pbInImage, int startY, int stopY, int start, int stop, int x, double pContrib)
54、160;double valueRed = 0.0; double valueGreen = 0.0; double valueBlue = 0.0; int valueRGB = 0;
55、 int i, j; for (i = startY, j = start; i <= stopY; i+, j+) valueRGB
56、 = pbInImage.getRGB(x, i); valueRed += GetRedValue(valueRGB) * pContribj; valueGreen += GetGreenValue(valueRGB)
57、160;* pContribj; valueBlue += GetBlueValue(valueRGB) * pContribj; valueRGB = ComRGB(Clip(int)
58、valueRed), Clip(int) valueGreen), Clip(int) valueBlue); / System.out.println(valueRGB); return valueRGB; / end of VerticalFilter()
59、160; private BufferedImage VerticalFiltering(BufferedImage pbImage, int iOutH) int iW = pbImage.getWidth(); int iH = pbImage.get
60、Height(); int value = 0; BufferedImage pbOut = new BufferedImage(iW, iOutH, BufferedImage.TYPE_INT_RGB); for
61、(int y = 0; y < iOutH; y+) int startY; int start; &
62、#160; int Y = (int) (double) y) * (double) iH) / (double) iOutH) + 0.5); startY = Y - nHalfDots; &
63、#160; if (startY < 0) startY = 0; start =&
64、#160;nHalfDots - Y; else start = 0; &
65、#160; int stop; int stopY = Y + nHalfDots; if (stopY
66、 > (int) (iH - 1) stopY = iH - 1; stop = nHalf
67、Dots + (iH - 1 - Y); else stop = nHalfDots * 2; &
68、#160; if (start > 0 | stop < nDots - 1) &
69、#160;CalTempContrib(start, stop); for (int x = 0; x < iW; x+)
70、 value = VerticalFilter(pbImage, startY, stopY, start, stop, x, tmpContrib); pbOut.setRGB(x, y, value)
71、; else for (int x = 0; x < iW; x+)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 倉儲物流中心裝修合同-@-1
- 時尚發(fā)廊裝修合同樣本-@-1
- 液態(tài)食用油罐車運輸協(xié)議
- 大型商場裝修協(xié)議模板
- 交通運輸渣土運輸協(xié)議
- 商鋪改造半包裝修合同模板
- 寵物運輸合同模板-@-1
- 福建圍墻垂直綠化施工方案
- 主播轉(zhuǎn)讓合同范本
- 波紋管涵拆除施工方案
- 9.2溶解度(第1課時飽和溶液不飽和溶液)+教學設(shè)計-2024-2025學年九年級化學人教版(2024)下冊
- 2024年審計局公務(wù)員招錄事業(yè)單位招聘考試招錄139人完整版附答案【研優(yōu)卷】
- 濰坊市人民醫(yī)院招聘真題
- 銷售人員薪資提成及獎勵制度
- 2017年江蘇南京中考滿分作文《無情歲月有味詩》5
- 2023年宏觀經(jīng)濟學考點難點
- 2024-2030年中國智慧水務(wù)行業(yè)應(yīng)用需求分析發(fā)展規(guī)劃研究報告
- 黑龍江申論真題2021年(鄉(xiāng)鎮(zhèn))
- 山體排險合同模板
- 醫(yī)保專(兼)職管理人員的勞動合同(2篇)
- 特殊感染手術(shù)的配合與術(shù)后處理課件
評論
0/150
提交評論