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

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

android 实现图片的翻转

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

Resources res = this.getContext().getResources();
 img = BitmapFactory.decodeResource(res, R.drawable.aa);
 Matrix matrix = new Matrix();
 matrix.postRotate(180); /*翻转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: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平台中处理图片。

(0)

相关推荐

  • Android Tween动画之RotateAnimation实现图片不停旋转效果实例介绍

    主要介绍Android中如何使用rotate实现图片不停旋转的效果.Android 平台提供了两类动画,一类是 Tween 动画,即通过对场景里的对象不断做图像变换(平移.缩放.旋转)产生动画效果:第二类是 Frame 动画,即顺序播放事先做好的图像,跟电影类似.本文分析 Tween动画的rotate实现旋转效果. 在新浪微博客户端中各个操作进行中时activity的右上角都会有个不停旋转的图标,类似刷新的效果,给用户以操作中的提示.这种非模态的提示方式推荐使用,那么下面就分享下如何实现这种效果

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

    前言 之前因为项目需求,其中使用到了图片的单击显示取消,图片平移缩放功能,昨天突然想再加上图片的旋转功能,在网上看了很多相关的例子,可是没看到能同时实现我想要的功能的. 需求: (1)图片平移.缩放.旋转等一系列操作后,图片需要自动居中显示. (2)图片旋转后选自动水平显示或者垂直显示 (3)图片在放大缩小的同时都能旋转 Demo实现部分效果截图 Demo主要代码 Java MainActivity.java package com.practice.noyet.rotatezoomimagev

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

    本文使用Matrix实现Android实现图片缩放与旋转.示例代码如下: 复制代码 代码如下: package com.android.matrix;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Matrix;import android.graphics.drawable.BitmapDrawable

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

    相信大家使用多点对图片进行缩放,平移的操作很熟悉了,大部分大图的浏览都具有此功能,有些app还可以对图片进行旋转操作,QQ的大图浏览就可以对图片进行旋转操作,大家都知道对图片进行缩放,平移,旋转等操作可以使用Matrix来实现,Matrix就是一个3X3的矩阵,对图片的处理可分为四个基础变换操作,Translate(平移变换).Rotate(旋转变换).Scale (缩放变换).Skew(错切变换),如果大家对Matrix不太了解的话可以看看这篇文章(点击查看),作者对每一种Matrix的变换写

  • Android开发之图片旋转功能实现方法【基于Matrix】

    本文实例讲述了Android开发之图片旋转功能实现方法.分享给大家供大家参考,具体如下: 在Android中进行图像旋转需要使用Matrix,它包含了一个3*3的矩阵,专门用于进行图像变换匹配.Matrix ,中文里叫矩阵,高等数学里有介绍,在图像处理方面,主要是用于平面的缩放.平移.旋转等操作.Matrix没有机构体,它必须初始化,然后通过reset方法和set方法来实现. 首先介绍一下矩阵运算.加法和减法就不用说了,太简单了,对应位相加就好.图像处理,主要用到的是乘法 .下面是一个乘法的公式

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

    本文主要讲解利用android中Matrix控制图形的旋转缩放移动,具体参见一下代码: 复制代码 代码如下: /**  * 使用矩阵控制图片移动.缩放.旋转  */  public class CommonImgEffectView extends View { private Context context ;      private Bitmap mainBmp , controlBmp ;      private int mainBmpWidth , mainBmpHeight , c

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

    先来看看要实现的效果图 在讲解中,需要大家提前了解一些关于图片绘制的原理的相关知识. 关于实现的流程 1.自定义View 2.获得操作图片的Bitmap 3.复写View的onTouchEvent()方法中的ACTION_DOWN,ACTION_POINTER_DOWN,ACTION_MOVE,ACTION_POINTER_UP以及ACTION_UP事件. 4.定义相应图片变化的Matrix矩阵,通过手势操作的变化来设置相应的Matrix. 5.完成最终的Matrix设置时,通过invalida

  • Android使用Matrix旋转图片模拟碟片加载过程

    今天实现了一个模拟碟片加载过程的小demo,在此展示一下.由于在公司,不好截取动态图片,因此就在这截取两张静态图片看看效果先. 下面简单的将代码列出来. setp1.准备两张用于旋转的图片,如下:loading_disc.png是第一张图片,loading_light.png是第二张图片.      step2.自定义一个View,用来控制这两个图片的旋转.com.oyp.loadingdisk.LoadingDiscView.java package com.oyp.loadingdisk;

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

    本文实例讲述了Android实现旋转,放大,缩小图片的方法.分享给大家供大家参考,具体如下: 项目中需要做到一个预览图片的功能 最初设想自定义个一个view,在onDraw中用的是生成新的Bitmap,来放大,缩小 但由于手机内存是有限制的,在放大几倍以后,就会core掉. 后面直接选用imageview来完成此项任务,很遗憾,虽然不会重复生成bitmap导致core掉,但是imageview的大小限制是图片无法再放大或放大也只能在这个区域中. 最后选定用 当然  Drawable来做了 pri

  • android图片处理之让图片一直匀速旋转

    本文是在我的文章android图片处理,让图片变成圆形 的基础上继续写的,可以去看看,直接看也没关系,也能看懂 1.首先在res文件夹下创建一个名字为anim的文件夹,名字不要写错  2.在anim里面创建一个xlm文件:img_animation.xml,这个名字随便写都可以,注意不要大写,里面的代码如下: <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http:/

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

    一.简介 二.方法 1)设置图片放大缩小效果 第一步:将<ImageView>标签中的android:scaleType设置为"fitCenter" android:scaleType="fitCenter" 第二步:获取屏幕的宽度 DisplayMetrics dm=new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); dm.widthPixels 第三

随机推荐