當前位置:首頁 » 安卓系統 » android照片旋轉

android照片旋轉

發布時間: 2024-09-22 13:53:39

1. android 怎麼讓圖片實現朝Z軸的方向旋轉RotateAnimation是x y方向的,我想要包含z方向的

RotateAnimation是不可以繞Z軸旋轉的,如果LZ想要實現Z軸旋轉效果,可以看下matrix這個類(實際還是opengl),可以給LZ例舉下:
rotateX(float degree) 繞著x軸旋轉degree個度數
rotateY(float degree) 繞著y軸旋轉degree個度數
rotateZ(float degree) 繞著z軸旋轉degree個度數

2. ​Android鑷瀹氫箟闇蹭竴鎵嬶紝杞繪澗瀹炵幇View 3D 緲昏漿鏁堟灉

榪欎釜3D緲昏漿鏁堟灉鐨勬牳蹇冨叾瀹炲氨鏄 Rotate3DAnimation 榪欎釜鑷瀹氫箟鐨凙nimation綾匯

鎴戜滑榪欓噷涓昏佹槸閫氳繃瀵 android.graphics.Camera 鐨勬搷浣滄潵瀹炵幇3D鐨勫彉鍖栵紝Camera鐨勫潗鏍囩郴涓轟笁緇村乏鎵嬪潗鏍囩郴錛屽洜姝ゆ垜浠鍙浠ラ氳繃鎿嶄綔瀹冩潵瀹炵幇涓浜3D鐨勬晥鏋溿

鎺ヤ笅鏉ユ垜瀵瑰悇孌典唬鐮佽繘琛岃︾粏璇存槑銆

涓嬮潰榪欐典唬鐮佹槸涓轟簡闃叉㈠綋鍥懼儚鏃嬭漿鍒90搴︾殑鏃跺欙紝鍥懼儚鐨勪晶闈㈠垰濂芥湞鐫鎴戜滑瀵艱嚧鐪嬭搗鏉ヨ繃澶х殑闂棰橈紝鍥犳ゆ垜浠闇瑕佸皢鍥懼儚娌跨潃Z杞寸Щ鍔ㄤ竴涓嬶紝灝辯浉褰撲簬涓杈嗚濺浠庝綘韜鍚庡線鍓嶅紑浣犱細鎰熻夎濺瓚婃潵瓚婂皬涓涓閬撶悊銆

涓嬮潰榪欐典唬鐮佹槸瀹炵幇浜嗗浘鍍忔棆杞銆

涓嬮潰榪欐典唬鐮佹槸涓轟簡灝嗗師鐐圭Щ鍔ㄥ埌鍥懼儚鐨勪腑蹇冪偣銆

濡傛灉涓嶅皢鍥懼儚縐誨姩鍒頒腑蹇冪偣鍒欏浘鍍忎細娌跨潃鍥懼儚鐨勫乏杈規棆杞濡備笅錛

榪欓噷榪樻湁涓鐐硅佹敞鎰忕殑鏄錛屾垜浠闇瑕佸皢鏃嬭漿鍚庡睍紺虹殑欏甸潰錛堟晥鏋滃浘鐨勫弽闈錛夋彁鍓嶅厛鍙嶈漿錛岃繖鏍峰湪鏃嬭漿鍚庡睍紺哄弽闈㈢殑鏃跺欏氨涓嶄細鍑虹幇灞曠ず闀滃儚鐨勯棶棰樹簡錛岃繖閲屾垜閫氳繃緇ф壙FrameLayout騫跺湪 dispatchDraw 澧炲姞濡備笅閫昏緫鏉ュ疄鐜扮殑銆

Rotate3DLayout 鍐呭繀闇鍖呭惈 DefaultLayout 錛堥粯璁ゅ睍紺虹殑欏甸潰錛夊拰 ReverseLayout 錛堢炕杞鍚庡睍紺虹殑欏甸潰錛夛紝鐒跺悗浠ュ湪 DefaultLayout 鍜 ReverseLayout 涓榪涜岃嚜宸辯殑甯冨矓鍗沖彲銆

閫氳繃 rotate3D 鏂規硶鍗沖彲瀹炵幇緲昏漿銆

https://gitee.com/itfitness/rotate3d-layout

鍦ㄨ繖閲屽氨榪樺垎浜涓浠界敱澶т漿浜茶嚜鏀跺綍鏁寸悊鐨 Android瀛︿範PDF+鏋舵瀯瑙嗛+闈㈣瘯鏂囨。+婧愮爜絎旇 楂樼駭鏋舵瀯鎶鏈榪涢樁鑴戝浘銆丄ndroid寮鍙戦潰璇曚笓棰樿祫鏂欙紝楂樼駭榪涢樁鏋舵瀯璧勬枡

榪欎簺閮芥槸鎴戠幇鍦ㄩ棽鏆囨椂榪樹細鍙嶅嶇炕闃呯殑綺懼搧璧勬枡銆傞噷闈㈠硅繎鍑犲勾鐨勫ぇ鍘傞潰璇曢珮棰戠煡璇嗙偣閮芥湁璇︾粏鐨勮茶В銆傜浉淇″彲浠ユ湁鏁堝湴甯鍔╁ぇ瀹舵帉鎻$煡璇嗐佺悊瑙e師鐞嗭紝甯鍔╁ぇ瀹跺湪鏈鏉ュ彇寰椾竴浠戒笉閿欑殑絳斿嵎銆

褰撶劧錛屼綘涔熷彲浠ユ嬁鍘繪煡婕忚ˉ緙猴紝鎻愬崌鑷韜鐨勭珵浜夊姏銆

鐪熷績甯屾湜鍙浠ュ府鍔╁埌澶у訛紝Android璺婕婕錛屽叡鍕夛紒

濡傛灉浣犳湁闇瑕佺殑璇濓紝鍙闇 縐佷俊鎴戙愯繘闃躲戝嵆鍙鑾峰彇

3. Android中Camera方向問題總結

          如今生活當中每一個人都離不開手機,拍攝照片更加常見,剛好最近在研究Android中的Camera的「方向」問題,總結一下。好了,進入正題,通過手機的Camera拍攝出來的照片來自於相機的圖像感測器,相機被固定到手機後,相機的圖像感測器的圖像採集方向就固定住了,因此相機感測器的採集圖像的方向我們是改變不了,只能對採集後獲得的圖片數據進行旋轉,以便得到正確的預覽。我們可以通過CameraInfo對象的orientation屬性來獲取圖像感測器的圖像採集方向,orientation屬性就描述著相機的圖像感測器採集圖像的方向,orientation是一個角度值,只能是0,90,180,270四個中的一個,表示的含義就是圖像感測器採集圖像的角度,忘記說了,這里的角度是相對於手機的「自然方向」來說的,何為「自然方向」?是指當寬比高短時,我們看到的手機的方向(豎屏),可以這樣理解,這個值是相機所採集的圖片需要順時針旋轉至自然方向的角度值,因為如果我們要想在手機的自然方向上正確預覽相機拍照的圖片數據,我們必須對相機感測器採集的圖像進行順時針旋轉,這個旋轉的角度就是orientation,注意只能對拍照後獲得的圖片數據進行旋轉,我們是無法改變相機感測器採集圖像的方向的,因為它在相機被固定到手機上後,就被固定死了。 

             圖像感測器的預覽方向默認情況下是和圖像感測器的圖像採集方向是一致,也就是前面提到的orientation值,那這里為什麼說默認呢?是因為相機感測器的預覽方向是可以改變的,不像圖像感測器的圖像採集方向無法改變,通過Camera對象的setDisplayOrientation方法改變預覽方向(順時針旋轉)。對大部分手機來說,後置攝像頭的orientation為90,也就是說我們需要對拍照採集的圖片數據順時針旋轉90度,才能夠在自然方向正確預覽我們拍攝後的圖片,需要通過Camera對象的setDisplayOrientation順時針旋轉90度才能在自然方向正確預覽我們的攝像頭畫面。同樣對於大部分手機來說,前置攝像頭的orientation通常為270度,也就是說我們需要對拍照採集的圖片數據順時針旋轉270度,才能夠在自然方向正確預覽我們拍攝後的圖片,但是我們預覽方向我們卻不是順時針旋轉270度,而是90度,這是為什麼呢?因為前者攝像頭會在旋轉預覽方向之前,會對預覽方向來一個水平的鏡像翻轉,這就是為什麼我們通過前者攝像頭像是在照鏡子一般,可能還不太理解,我們會通過圖片來對上面的分析進行演示。 

後置攝像頭orientation=90,此時圖像感測器採集圖像的方向90度,相對於自然方向,如下:

此時圖像採集的方向我們是無法改變的,但是能夠改變預覽的方向,通過setDisplayOrientation(90)順時針旋轉預覽方向,以便在自然方向進行正確預覽。

我們來看看前置攝像頭orientation=270的情況,銘記前置攝像頭預覽方向在旋轉之前會進行一個水平鏡像翻轉(可以理解為逆時針旋轉180),這就是為什麼我們通過手機前置攝像頭預覽時,看到的像是在照鏡子一般。

此時我們需要將獲取到的圖片數據進行順時針旋轉270度,才能夠在手機自然方向正確預覽。接下來看看前者攝像頭預覽方向,注意咯

好了,就到這,水平有限,有什麼錯誤的地方,希望各位大神留言,拜託了。

4. 如何解決Android三星手機從圖庫選擇照片旋轉問題

最近解決了一個令我頭疼好久的問題,就是三星手機拍照圖片旋轉的問題,項目中有上傳圖片的功能,那麼涉及到拍照,從相冊中選擇圖片,別的'手機都ok沒有問題,唯獨三星的手機拍照之後,你會很清楚的看到會把照片旋轉一下,然後你根據路徑找到的圖片就是已經被旋轉的了,解決辦法終於被我找到了。我們可以根據圖片的路徑讀取照片exif(Exchangeable Image File 可交換圖像文件)信息中的旋轉角度,至於這個EXIF可以看一下大牛的文章

Android 下的EXIF

根據調試,可以清楚的發現三星手機拍照的圖片的旋轉角度是90度,而別的手機旋轉角度是0度

看一下代碼:

/** * 讀取照片exif信息中的旋轉角度 * @param path 照片路徑 * @return角度 */ public static int readPictureDegree(String path) { int degree = 0; try { ExifInterface exifInterface = new ExifInterface(path); int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL); switch (orientation) { case ExifInterface.ORIENTATION_ROTATE_90: degree = 90; break; case ExifInterface.ORIENTATION_ROTATE_180: degree = 180; break; case ExifInterface.ORIENTATION_ROTATE_270: degree = 270; break; } } catch (IOException e) { e.printStackTrace(); } return degree; }

那麼我們只需要根據旋轉角度將圖片旋轉過來就OK了

public static Bitmap toturn(Bitmap img){ Matrix matrix = new Matrix(); matrix.postRotate(+90); /*翻轉90度*/ int width = img.getWidth(); int height =img.getHeight(); img = Bitmap.createBitmap(img, 0, 0, width, height, matrix, true); return img; }

輕松解決了,是不是很完美?

以上就是本文的全部內容,希望大家喜歡。

5. Android自定義控制項之可平移、縮放、旋轉圖片控制項

先上效果圖

源碼

單點拖動圖片對圖片進行平移操作。雙手縮放圖片大小和旋轉圖片到一定的角度。圖片縮放的時候 不能大於最大的縮放因子和小於最小的縮放因子。大於最大縮放因子或者小於最小縮放因子需要對圖像進行回彈。圖片旋轉的角度只能為90度的倍數,不滿足90度要進行回彈。圖片回彈要一個漸變的效果。

大體思路: 首先,Android中提供了Matrix類可以對圖像進行處理。其次,要顯示一張圖片最容易想到的就是ImageView。回彈要求漸變的過程,可以通過屬性動畫進行設置。所以大體的思路是:繼承ImageView,重寫onTouchEvent()方法,判斷事件類型,在對應的事件使用Matrix對圖像進行變換。
Matrix是一個已經封裝好的矩陣,最重要的作用就是對坐標點進行變換。
舉個栗子:
1.某個點(x0,y0,1)通過單位矩陣E映射得到的點還是(x0,y0,1)。

3.點(x0,y0,1)通過矩陣T映射得到的點就會做如下的變換

可以看到點(x0,y0,1)經過T矩陣在x軸方向上平移了dx,在y軸方向上平移了dy。

通過以上的變換可以得到具體的思路: 我們維護一個圖像對應的矩陣mCurrentMatrix,該矩陣主要是對ImageView中的圖像的各個點進行映射。ImageView在容器位置擺放完成之後,置mCurrentMatrix矩陣為單位矩陣。當onTouchEvent()方法中觸發單點觸控並且手指進行平移的時候,調用矩陣mCurrentMatrix的postTranslate(dx,dy),對mCurrentMatrix進行變換。當手指抬起,利用變換結束後的矩陣對圖像的各個點進行映射,從而得到平移變換後的圖像。同理可得,在兩只手指進行縮放旋轉的時候,我們對矩陣mCurrentMatrix進行各種變換,當縮放旋轉的事件結束再利用變換完的矩陣去映射圖像的各個點,從而得到縮放、旋轉後的圖像。

安卓自定義View進階 - Matrix原理
安卓自定義View進階 - Matrix詳解

首先理清事件的邏輯:

初始化圖像大小和位置

縮放圖像大小和控制項大小自適應,平移圖像中心和控制項中心重合

onTouchEvent()函數

平移操作

將圖像對應的矩陣進行變換。

縮放操作

mBoundRectF為記錄圖像邊界的矩形。縮放的時候選取圖像的中心進行縮放。

旋轉操作

旋轉的時候旋轉的旋轉中心也是圖像的中心

圖像中各個點的映射

調用ImageView的setImageMatrix(Matrix matrix)會讓ImageView根據設置的matrix去重新繪制圖像。

更新圖像的矩形邊界

獲得圖像的矩形,並根據矩陣映射矩形各個點的坐標。

縮放回彈

旋轉回彈

一些計算方法

要求圖像的變換是一個漸變的過程,很容易想到的就是屬性動畫。因為屬性動畫本身就是對值進行不斷set的過程。而我們維護的矩陣也是一個值,所以很自然可以想到,如果得到回彈之前的矩陣的值以及回彈之後矩陣的值,就可以根據動畫監聽器中動畫當前的系數值去改變矩陣的值。

對animator對象設置完監聽器之後,就可以在手指抬起的時候調用屬性動畫的start()方法開啟動畫。

自定義可平移、縮放、旋轉的控制項主要點有兩個方面:一是onTouchEvent()中判斷平移、旋轉、縮放的觸發條件,平移位移量、縮放比例因子、旋轉角度的計算。二是Matrix矩陣的應用。

6. android怎麼實現一張圖片旋轉幾秒後後自動換到另一張圖片

圖片旋轉使用動畫,設置動畫時間,旋轉完成後,設置另一張圖片

RotateAnimation 動畫,
RotateAnimation (float fromDegrees, float toDegrees, int
pivotXType, float pivotXValue, int pivotYType, float pivotYValue)
參數說明:

float fromDegrees:旋轉的開始角度。
float toDegrees:旋轉的結束角度。
int
pivotXType:X軸的伸縮模式,可以取值為ABSOLUTE、RELATIVE_TO_SELF、RELATIVE_TO_PARENT。
float
pivotXValue:X坐標的伸縮值。
int
pivotYType:Y軸的伸縮模式,可以取值為ABSOLUTE、RELATIVE_TO_SELF、RELATIVE_TO_PARENT。
float
pivotYValue:Y坐標的伸縮值。

7. android 怎麼得到手機拍照照片的旋轉角度

具體思路:
1、首先在調用拍照方法時,保存拍照後的相片原圖,得到原圖路徑,(PhotoBitmapUtils是我自己寫的一個工具類)

String fileName = "";
/**
* 啟動相機拍照
*/
private void addBitmapShoots() {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// 設置圖片要保存的 根路徑+文件名
fileName = PhotoBitmapUtils.getPhotoFileName(getContext());
File file = new File(fileName);
if (!file.exists()) {
try {
file.createNewFile();

8. 在android中,某圖片使用rotateanimation動畫,如何繞著這個圖片的左下角的進行旋轉

1、定義一個ImageView
定義一個ImageView是為了裝載圖片,其中的圖片將被rotate用來進行旋轉,其他View亦可。
資源文件為

復制代碼代碼如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/infoOperating"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/operating"
android:scaleType="center">
</ImageView>
</LinearLayout>

其中的android:src為圖片內容,可使用附件中的圖片。
java代碼為

復制代碼代碼如下:

ImageView infoOperatingIV = (ImageView)findViewById(R.id.infoOperating);

2、定義rotate旋轉效果
在res/anim文件夾下新建tip.xml文件,內容如下

復制代碼代碼如下:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<rotate
android:fromDegrees="0"
android:toDegrees="359"
android:ration="500"
android:repeatCount="-1"
android:pivotX="50%"
android:pivotY="50%" />
</set>

含義表示從0到359度開始循環旋轉,0-359(若設置成360在停止時會出現停頓現象)度旋轉所用時間為500ms,旋轉中心距離view的左頂點為50%距離,距離view的上邊緣為50%距離,即正中心,具體每個含義見下面的具體屬性介紹。

java代碼為

復制代碼代碼如下:

Animation operatingAnim = AnimationUtils.loadAnimation(this, R.anim.tip);
LinearInterpolator lin = new LinearInterpolator();
operatingAnim.setInterpolator(lin);

setInterpolator表示設置旋轉速率。LinearInterpolator為勻速效果,Accelerateinterpolator為加速效果、DecelerateInterpolator為減速效果,具體可見下面android:interpolator的介紹。
a. 關於其中的屬性意義如下(紅色部分加以注意):
android:fromDegrees 起始的角度度數
android:toDegrees 結束的角度度數,負數表示逆時針,正數表示順時針。如10圈則比android:fromDegrees大3600即可
android:pivotX 旋轉中心的X坐標
浮點數或是百分比。浮點數表示相對於Object的左邊緣,如5; 百分比表示相對於Object的左邊緣,如5%; 另一種百分比表示相對於父容器的左邊緣,如5%p; 一般設置為50%表示在Object中心
android:pivotY 旋轉中心的Y坐標
浮點數或是百分比。浮點數表示相對於Object的上邊緣,如5; 百分比表示相對於Object的上邊緣,如5%; 另一種百分比表示相對於父容器的上邊緣,如5%p; 一般設置為50%表示在Object中心
android:ration 表示從android:fromDegrees轉動到android:toDegrees所花費的時間,單位為毫秒。可以用來計算速度。
android:interpolator表示變化率,但不是運行速度。一個插補屬性,可以將動畫效果設置為加速,減速,反復,反彈等。默認為開始和結束慢中間快,
android:startOffset 在調用start函數之後等待開始運行的時間,單位為毫秒,若為10,表示10ms後開始運行
android:repeatCount 重復的次數,默認為0,必須是int,可以為-1表示不停止
android:repeatMode 重復的模式,默認為restart,即重頭開始重新運行,可以為reverse即從結束開始向前重新運行。在android:repeatCount大於0或為infinite時生效
android:detachWallpaper 表示是否在壁紙上運行
android:zAdjustment 表示被animated的內容在運行時在z軸上的位置,默認為normal。
normal保持內容當前的z軸順序
top運行時在最頂層顯示
bottom運行時在最底層顯示
b. 運行速度
運行速度為運行時間(android:ration)除以運行角度差(android:toDegrees-android:fromDegrees),比如android:ration為1000,android:toDegrees為360,android:fromDegrees為0就表示1秒轉1圈。
c. 循環運行

復制代碼代碼如下:

android:fromDegrees="0"
android:toDegrees="360"
android:repeatCount="-1"

android:repeatCount="-1"即表示循環運行,配合上android:fromDegrees="0" android:toDegrees="360"表示不間斷
3、開始和停止旋轉
在操作開始之前調用

復制代碼代碼如下:

if (operatingAnim != null) {
infoOperatingIV.startAnimation(operatingAnim);
}

在操作完成時調用

復制代碼代碼如下:

infoOperatingIV.clearAnimation();

許多朋友不知道如何停止旋轉animation,所以強制設置rotate轉動多少圈表示操作,但卻無法與操作實際的進度匹配上,實際上只要如上代碼所示清除animation即可。
其他:
對於上面的轉動在橫屏(被設置為了不重繪activity)時會出現問題,即旋轉中心偏移,導致動畫旋轉偏離原旋轉中心。解決如下

復制代碼代碼如下:

@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (operatingAnim != null && infoOperatingIV != null && operatingAnim.hasStarted()) {
infoOperatingIV.clearAnimation();
infoOperatingIV.startAnimation(operatingAnim);
}
}

熱點內容
在c語言中表示什麼 發布:2024-11-24 19:04:46 瀏覽:408
discuz友情鏈接緩存 發布:2024-11-24 19:00:11 瀏覽:693
資料庫時區 發布:2024-11-24 18:28:30 瀏覽:614
板的塑性演算法 發布:2024-11-24 18:17:59 瀏覽:29
酷狗緩存亂碼 發布:2024-11-24 18:12:42 瀏覽:509
aes演算法模式 發布:2024-11-24 17:47:19 瀏覽:612
linux查看埠是否佔用 發布:2024-11-24 17:42:15 瀏覽:467
手機電影天堂的文件夾 發布:2024-11-24 17:39:08 瀏覽:690
吉林金稅盤安全伺服器地址 發布:2024-11-24 17:39:00 瀏覽:277
360無法訪問網路 發布:2024-11-24 17:32:48 瀏覽:558