我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Android实现图片反转、翻转、旋转、放大和缩小

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Android实现图片反转、翻转、旋转、放大和缩小

**********************************************************************

android 实现图片的翻转

**********************************************************************


Resources res = this.getContext().getResources();
 img = BitmapFactory.decodeResource(res, R.drawable.aa);
 Matrix matrix = new Matrix();
 matrix.postRotate(180); 
 int width = img.getWidth();
 int height = img.getHeight();
 img_a = Bitmap.createBitmap(img, 0, 0, width, height, matrix, true);

然后可以直接把img_a draw到画布上,canvas.drawBitmap(img_a, 10, 10, p);

Matrix 是一个处理翻转、缩放等图像效果的重要类,Matrix.postScale 可设置缩放比例,默认为1

**********************************************************************
android 实现图片的旋转

**********************************************************************


public class ex04_22 extends Activity{
private ImageView mImageView;
private Button btn1,btn2;
private TextView mTextView;
private AbsoluteLayout layout1;
private int ScaleTimes=1,ScaleAngle=1;
 @Override
 public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.main);
 mImageView=(ImageView)findViewById(R.id.myImageView);
 final Bitmap bmp=BitmapFactory.decodeResource(this.getResources(),R.drawable.ex04_22_1);
 final int widthOrig=bmp.getWidth();
 final int heightOrig=bmp.getHeight();
 mImageView.setImageBitmap(bmp);
 btn1=(Button)findViewById(R.id.myButton1);
 btn1.setOnClickListener(new OnClickListener(){
 public void onClick(View v){
 ScaleAngle--;
 if(ScaleAngle<-60){
 ScaleAngle=-60;
 }
 int newWidth=widthOrig*ScaleTimes;
 int newHeight=heightOrig*ScaleTimes;
 float scaleWidth=((float)newWidth)/widthOrig;
 float scaleHeight=((float)newHeight)/heightOrig;
 Matrix matrix=new Matrix();
 matrix.postScale(scaleWidth, scaleHeight);
 matrix.setRotate(5*ScaleAngle);
 Bitmap resizeBitmap=Bitmap.createBitmap(bmp, 0, 0, widthOrig, heightOrig, matrix, true);
 BitmapDrawable myNewBitmapDrawable=new BitmapDrawable(resizeBitmap);
 mImageView.setImageDrawable(myNewBitmapDrawable);
 }
 });
 btn2=(Button)findViewById(R.id.myButton2);
 btn2.setOnClickListener(new OnClickListener(){
 public void onClick(View v){
 ScaleAngle++;
 if(ScaleAngle>60){
 ScaleAngle=60;
 }
 int newWidth=widthOrig*ScaleTimes;
 int newHeight=heightOrig*ScaleTimes;
 float scaleWidth=((float)newWidth)/widthOrig;
 float scaleHeight=((float)newHeight)/heightOrig;
 Matrix matrix=new Matrix();
 matrix.postScale(scaleWidth, scaleHeight);
 matrix.setRotate(5*ScaleAngle);
 Bitmap resizeBitmap=Bitmap.createBitmap(bmp, 0, 0, widthOrig, heightOrig, matrix, true);
 BitmapDrawable myNewBitmapDrawable=new BitmapDrawable(resizeBitmap);
 mImageView.setImageDrawable(myNewBitmapDrawable);
 }
 });
 }

**********************************************************************

实现画面淡入淡出效果可以用 :setAlpha(alpha);
alpha从255,逐渐递减!

**********************************************************************

如何实现屏幕的滚动效果,这里有两个关键点,一个是实现OnGestureListener,以便在触摸事件发生的时候,被回调。包括按下,滚动等等,按照API文档,需要分两步来实现检测手势行为。

1)创建GestureDetector实例

2) 在onTouchEvent()方法中调用GestureDetector的onTouchEvent()方法。

另一个关键点是自己实现一个简单的View,来绘制图片。

代码如下所示。由于,我们不需要使用layout定义,所以不需要提供xml文件。
直接在程序里面setContentView()即可。


package com.j2medev;
import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.GestureDetector.OnGestureListener;
public class HorizontalScroll extends Activity implements OnGestureListener {
private static final int X_MAX = 800;
private static final int Y_MAX = 600;
private int scrollX = 0;
private int scrollY = 0;
MyView main;
Bitmap bmp;
Bitmap adapt;
Resources res;
Paint paint;
GestureDetector gestureScanner;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
gestureScanner = new GestureDetector(this);
paint = new Paint();
res = getResources();
bmp = BitmapFactory.decodeResource(res, R.drawable.arc);
adapt = Bitmap.createBitmap(bmp);
main = new MyView(this);
setContentView(main, new ViewGroup.LayoutParams(800, 600));
}
@Override
public boolean onTouchEvent(MotionEvent me) {
return gestureScanner.onTouchEvent(me);
}
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
 float distanceY) {
main.handleScroll(distanceX, distanceY);
return true;
}
public boolean onDown(MotionEvent e) {
return true;
}
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
 float velocityY) {
return true;
}
public void onLongPress(MotionEvent e) {
}
public void onShowPress(MotionEvent e) {
}
public boolean onSingleTapUp(MotionEvent e) {
return true;
}
// //////////////////
// /////////////////
// ////////////////
class MyView extends View {
public MyView(Context context) {
 super(context);
}
@Override
protected void onDraw(Canvas canvas) {
 canvas.drawBitmap(adapt, -scrollX, -scrollY, paint);
}
public void handleScroll(float distX, float distY) {
 // X-Axis ////////////////////////////////
 if (distX > 6.0) {
 if (scrollX < 460) {
 scrollX += 15;
 }
 } else if (distX < -6.0) {
 if (scrollX >= 15) {
 scrollX -= 15;
 }
 }
 // //////////////////////////////////////////
 // Y-AXIS //////////////////////////////////
 if (distY > 6.0) {
 if (scrollY < 100) {
 scrollY += 15;
 }
 } else if (distY < -6.0) {
 if (scrollY >= 15) {
 scrollY -= 15;
 }
 }
 // //////////////////////////////////////////
 //
 // if ((scrollX <= 480) && (scrollY <= 120)) {
 // adapt = Bitmap.createBitmap(bmp, scrollX, scrollY, 320, 480);
 // invalidate();
 // }
 invalidate();
}
}
}

**********************************************************************

教你在谷歌Android平台中处理图片

**********************************************************************

操作图像像素

现在你可以对单独的像素进行处理了。通过使用android.graphics.Bitmap API中的getPixels,可以加载像素到一个整数数组中。

在本文例子中,你将按照一定规则对每一个像素实现着色。经过这个处理后,所有的像素将被转化为一个范围在0到255的字节码。

android.graphics.Bitmap API中的setPixels则用来加载这个整数数组到一个图像中。

最后一步是通过ImageView变量mIV来更新屏幕。以下是实现这个染色过程的代码片段。


private void TintThePicture(int deg) {
 int[] pix = new int[picw * pich];
 mBitmap.getPixels(pix, 0, picw, 0, 0, picw, pich);
 int RY, GY, BY, RYY, GYY, BYY, R, G, B, Y;
 double angle = (3.14159d * (double)deg) / 180.0d;
 int S = (int)(256.0d * Math.sin(angle));
 int C = (int)(256.0d * Math.cos(angle));
 for (int y = 0; y < pich; y++)
 for (int x = 0; x < picw; x++)
 {
 int index = y * picw + x;
 int r = (pix[index] >> 16) & 0xff;
 int g = (pix[index] >> 8) & 0xff;
 int b = pix[index] & 0xff;
 RY = ( 70 * r - 59 * g - 11 * b) / 100;
 GY = (-30 * r + 41 * g - 11 * b) / 100;
 BY = (-30 * r - 59 * g + 89 * b) / 100;
 Y = ( 30 * r + 59 * g + 11 * b) / 100;
 RYY = (S * BY + C * RY) / 256;
 BYY = (C * BY - S * RY) / 256;
 GYY = (-51 * RYY - 19 * BYY) / 100;
 R = Y + RYY;
 R = (R < 0) ? 0 : ((R > 255) ? 255 : R);
 G = Y + GYY;
 G = (G < 0) ? 0 : ((G > 255) ? 255 : G);
 B = Y + BYY;
 B = (B < 0) ? 0 : ((B > 255) ? 255 : B);
 pix[index] = 0xff000000 | (R << 16) | (G << 8) | B;
 }
 Bitmap bm = Bitmap.createBitmap(picw, pich, false);
 bm.setPixels(pix, 0, picw, 0, 0, picw, pich);
 // Put the updated bitmap into the main view
 mIV.setImageBitmap(bm);
 mIV.invalidate();
 mBitmap = bm;
 pix = null;
 }

**********************************************************************

android 图片的放大和缩小

**********************************************************************


public class ex04_22 extends Activity{
private ImageView mImageView;
private Button btn1,btn2;
private TextView mTextView;
private AbsoluteLayout layout1;
private Bitmap bmp;
private int id=0;
private int displayWidth,displayHeight;
private float scaleWidth=1,scaleHeight=1;
private final static String filename="/data/data/ex04_22.lcs/ex04_22_2.png";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//取得屏幕分辨率
DisplayMetrics dm=new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
displayWidth=dm.widthPixels;
displayHeight=dm.heightPixels-80;
bmp=BitmapFactory.decodeResource(this.getResources(),R.drawable.ex04_22_1);
layout1=(AbsoluteLayout)findViewById(R.id.layout1);
mImageView=(ImageView)findViewById(R.id.myImageView);
btn1=(Button)findViewById(R.id.myButton1);
btn1.setOnClickListener(new OnClickListener(){
public void onClick(View v){
small();
}
});
btn2=(Button)findViewById(R.id.myButton2);
btn2.setOnClickListener(new OnClickListener(){
public void onClick(View v){
big();
}
});
}
private void small(){
//获得Bitmap的高和宽
int bmpWidth=bmp.getWidth();
int bmpHeight=bmp.getHeight();
//设置缩小比例
double scale=0.8;
//计算出这次要缩小的比例
scaleWidth=(float)(scaleWidth*scale);
scaleHeight=(float)(scaleHeight*scale);
//产生resize后的Bitmap对象
Matrix matrix=new Matrix();
matrix.postScale(scaleWidth, scaleHeight);
Bitmap resizeBmp=Bitmap.createBitmap(bmp, 0, 0, bmpWidth, bmpHeight, matrix, true);
if(id==0){
layout1.removeView(mImageView);
}
else{
layout1.removeView((ImageView)findViewById(id));
}
id++;
ImageView imageView=new ImageView(this);
imageView.setId(id);
imageView.setImageBitmap(resizeBmp);
layout1.addView(imageView);
setContentView(layout1);
btn2.setEnabled(true);
}
private void big(){
//获得Bitmap的高和宽
int bmpWidth=bmp.getWidth();
int bmpHeight=bmp.getHeight();
//设置缩小比例
double scale=1.25;
//计算出这次要缩小的比例
scaleWidth=(float)(scaleWidth*scale);
scaleHeight=(float)(scaleHeight*scale);
//产生resize后的Bitmap对象
Matrix matrix=new Matrix();
matrix.postScale(scaleWidth, scaleHeight);
Bitmap resizeBmp=Bitmap.createBitmap(bmp, 0, 0, bmpWidth, bmpHeight, matrix, true);
if(id==0){
layout1.removeView(mImageView);
}
else{
layout1.removeView((ImageView)findViewById(id));
}
id++;
ImageView imageView=new ImageView(this);
imageView.setId(id);
imageView.setImageBitmap(resizeBmp);
layout1.addView(imageView);
setContentView(layout1);
if(scaleWidth*scale*bmpWidth>displayWidth||scaleHeight*scale*scaleHeight>displayHeight){
btn2.setEnabled(false);
}
}
}

xml文件


<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout
android:id="@+id/layout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
>
<ImageView
android:id="@+id/myImageView"
android:layout_width="200px"
android:layout_height="150px"
android:class="lazy" data-src="@drawable/ex04_22_1"
android:layout_x="0px"
android:layout_y="0px"
>
</ImageView>
<Button
android:id="@+id/myButton1"
android:layout_width="90px"
android:layout_height="60px"
android:text="缩小"
android:textSize="18sp"
android:layout_x="20px"
android:layout_y="372px"
>
</Button>
<Button
android:id="@+id/myButton2"
android:layout_width="90px"
android:layout_height="60px"
android:text="放大"
android:textSize="18sp"
android:layout_x="210px"
android:layout_y="372px"
>
</Button>
</AbsoluteLayout>

*********************************************************************

android 图片透明度处理代码

*********************************************************************


public static Bitmap setAlpha(Bitmap sourceImg, int number) {
  int[] argb = new int[sourceImg.getWidth() * sourceImg.getHeight()];
  sourceImg.getPixels(argb, 0, sourceImg.getWidth(), 0, 0,sourceImg.getWidth(), sourceImg.getHeight());// 获得图片的ARGB值
  number = number * 255 / 100;
  for (int i = 0; i < argb.length; i++) {
  argb = (number << 24) | (argb & 0x00FFFFFF);// 修改最高2位的值
  }
  sourceImg = Bitmap.createBitmap(argb, sourceImg.getWidth(), sourceImg.getHeight(), Config.ARGB_8888);
  return sourceImg;
}

以上就是涉及到了Android图片处理的所有内容,包括android图片反转、android 图片翻转、android 图片旋转、实现画面淡入淡出效果、android 图片的放大和缩小以及教你在谷歌Android平台中处理图片。

您可能感兴趣的文章:Android实现屏幕旋转方法总结Android Tween动画之RotateAnimation实现图片不停旋转效果实例介绍Android开发 旋转屏幕导致Activity重建解决方法Android中利用matrix 控制图片的旋转、缩放、移动Android编程中调用Camera时预览画面有旋转问题的解决方法Android 图片缩放与旋转的实现详解Android开发之图形图像与动画(二)Animation实现图像的渐变/缩放/位移/旋转Android 3D旋转动画效果实现分解Android UI之ImageView实现图片旋转和缩放flutter RotationTransition实现旋转动画


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Android实现图片反转、翻转、旋转、放大和缩小

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android实现图片反转、翻转、旋转、放大和缩小

**********************************************************************android 实现图片的翻转***********************************
2022-06-06

Android实现旋转,放大,缩小图片的方法

本文实例讲述了Android实现旋转,放大,缩小图片的方法。分享给大家供大家参考,具体如下: 项目中需要做到一个预览图片的功能 最初设想自定义个一个view,在onDraw中用的是生成新的Bitmap,来放大,缩小 但由于手机内存是有限制的
2022-06-06

Android UI之ImageView实现图片旋转和缩放

这一篇,给大家介绍一下ImageView控件的使用,ImageView主要是用来显示图片,可以对图片进行放大、缩小、旋转的功能。 android:sacleType属性指定ImageVIew控件显示图片的方式,例如:center表示图像以不
2022-06-06

Android 图片缩放与旋转的实现详解

本文使用Matrix实现Android实现图片缩放与旋转。示例代码如下: 代码如下:package com.android.matrix;import android.app.Activity;import android.graphics
2022-06-06

CSS3实现图片放大旋转

知识点:    css3动画    transition    @-webkit-keyframes rotation{from {-webkit-transform: rotate(0deg);}to {-webkit-t
2023-01-31

基于RxPaparazzo实现图片裁剪、图片旋转、比例放大缩小功能

前言:基于RxPaparazzo的图片裁剪,图片旋转、比例放大|缩小。效果: 开发环境:AndroidStudio2.2.1+gradle-2.14.1 涉及知识:1.Material Design(CardView+Coordinator
2023-05-31

Android中imageView图片放大缩小及旋转功能示例代码

一、简介二、方法1)设置图片放大缩小效果第一步:将标签中的android:scaleType设置为"fitCenter"android:scaleType="fitCenter"
2023-05-30

Android实现对图片放大、平移和旋转的功能

先来看看要实现的效果图在讲解中,需要大家提前了解一些关于图片绘制的原理的相关知识。 关于实现的流程 1、自定义View 2、获得操作图片的Bitmap 3、复写View的onTouchEvent()方法中的ACTIO
2022-06-06

Android单点触控实现图片平移、缩放、旋转功能

相信大家使用多点对图片进行缩放,平移的操作很熟悉了,大部分大图的浏览都具有此功能,有些app还可以对图片进行旋转操作,QQ的大图浏览就可以对图片进行旋转操作,大家都知道对图片进行缩放,平移,旋转等操作可以使用Matrix来实现,Matrix
2022-06-06

基于Android 实现图片平移、缩放、旋转同时进行

前言 之前因为项目需求,其中使用到了图片的单击显示取消,图片平移缩放功能,昨天突然想再加上图片的旋转功能,在网上看了很多相关的例子,可是没看到能同时实现我想要的功能的。 需求:(1)图片平移、缩放、旋转等一系列操作后,图片需要自动居中显示。
2022-06-06

iOS中大尺寸图片的旋转与缩放实例详解

前言 由于iPhone的硬件性能限制,直到iPhone 6s开始,才将最大内存拓展到2G。可即使是如此,也不代表一个应用可使用的空间是2G。一张10000 x 10000的图片,如果通过UIImageJPEGRepresentation方法
2022-05-24

android实现图片反转效果

可能有些同学不明白,为啥要图片反转(不是旋转哦),我们在游戏开发中,为了节省图片资源(空间) 有可能会使用到图片反转,例如,一个人物图片,面向左,或右,如果不能实现图片反转的情况下,就需要两张图片了,废话少说,看效果上代码:在上图中,实际两
2022-06-06

Android中利用matrix 控制图片的旋转、缩放、移动

本文主要讲解利用android中Matrix控制图形的旋转缩放移动,具体参见一下代码: 代码如下: public class CommonImgEffectView extends V
2022-06-06

iOS实现音乐播放器图片旋转

本文实例为大家分享了iOS实现音乐播放器图片旋转的具体代码,供大家参考,具体内容如下 通过给继承与 UIImageView 的类 CXGImageView 添加 CABasicAnimation 转动动画,实现播放器图片转动效果. 主要提供
2022-05-26

Android开发实现图片平移、缩放、倒影及旋转功能的方法

本文实例讲述了Android开发实现图片平移、缩放、倒影及旋转功能的方法。分享给大家供大家参考,具体如下:解析:1)根据原来的图片创建新的图片Bitmap modBm = Bitmap.createBitmap(bm.getWidth()+
2023-05-30

Python如何实现简单图像缩放与旋转

这篇文章主要介绍Python如何实现简单图像缩放与旋转,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1. 图像缩放1.2. 使用命令import cv2# 缩放def resize(img, k, inter):
2023-06-26

HTML5 和小程序如何实现拍照图片旋转、压缩和上传功能

这篇文章给大家分享的是有关HTML5 和小程序如何实现拍照图片旋转、压缩和上传功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。最近接到一个“发表评论”的需求:用户输入评论并且可以拍照或从相册选择图片上传,即支持
2023-06-09

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录