圖片任意角度旋轉

來源:互聯網
上載者:User

收藏一個圖片任意角度旋轉的函數 很簡練

/**<br />*@param imgSource 源映像<br />*@param cx 旋轉點相對於源映像坐上角橫座標<br />*@param cy 旋轉點相對於源映像坐上角縱座標<br />*@param theta 映像逆時針旋轉的角度<br />*@return 旋轉後的映像<br />*/<br />public Image rotate(Image imgSource, int cx, int cy, double theta)<br />{<br />if (Math.abs(theta % 360) < 1)<br />return imgSource; //角度很小時直接返回</p><p>int w1 = imgSource.getWidth(); //原始映像的高度和寬度</p><p>int h1 = imgSource.getHeight();</p><p>int[] srcMap = new int[w1 * h1];</p><p>imgSource.getRGB(srcMap, 0, w1, 0, 0, w1, h1); //擷取原始映像的像素資訊</p><p>int dx = cx > w1 / 2 ? cx : w1 - cx; //計算旋轉半徑</p><p>int dy = cy > h1 / 2 ? cy : h1 - cy;</p><p>double dr = Math.sqrt(dx * dx + dy * dy);</p><p>int wh2 = (int) (2 * dr + 1); //旋轉後新映像為正方形,其邊長+1是為了防止數組越界</p><p>int[] destMap = new int[wh2 * wh2]; //存放新映像象素的數組</p><p>double destX, destY;</p><p>double radian = theta * Math.PI / 180; //計算角度計算對應的弧度值</p><p>for (int i = 0; i < w1; i++) {<br />for (int j = 0; j < h1; j++) {<br />if (srcMap[j * w1 + i] >> 24 != 0) { //對非透明點才進行處理<br />// 得到當前點經旋轉後相對於新映像左上方的座標<br />destX = dr + (i - cx) * Math.cos(radian) + (j - cy) // 這個地方不懂<br />* Math.sin(radian);<br />destY = dr + (j - cy) * Math.cos(radian) - (i - cx) //這個地方不懂<br />* Math.sin(radian);<br />//從源映像中往新映像中填充像素<br />destMap[(int) destY * wh2 + (int) destX] = srcMap[j * w1<br />+ i];// 不懂<br />}<br />}<br />}<br />return Image.createRGBImage(destMap, wh2, wh2, true); //返迴旋轉後的映像<br />}

 

還有點缺陷 就是旋轉後的圖片有點失真 函數中標出了不懂的地方 希望高人再指點一下

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.