当前位置:首页 » 安卓系统 » 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);
}
}

热点内容
避孕套存储箱 发布:2024-11-24 16:25:09 浏览:734
如何自己搭建云服务器干货 发布:2024-11-24 16:22:08 浏览:370
安卓怎么返回出厂系统 发布:2024-11-24 16:20:32 浏览:446
求生之路sp源码 发布:2024-11-24 16:06:05 浏览:372
javaurl的正则表达式 发布:2024-11-24 15:53:45 浏览:245
c语言只可以执行编译文件 发布:2024-11-24 15:53:33 浏览:756
126邮件服务器地址 发布:2024-11-24 15:52:46 浏览:214
微信80安卓什么时候更新动态 发布:2024-11-24 15:40:54 浏览:480
破天窝窝脚本 发布:2024-11-24 15:40:53 浏览:112
王者荣耀苹果转安卓怎么转的 发布:2024-11-24 15:40:49 浏览:677