引用:http://www.open-open.com/lib/view/open1325749794953.html

android 实现图片的翻转

1 Resources res =this.getContext().getResources();
2 img = BitmapFactory.decodeResource(res, R.drawable.aa);
3 Matrix matrix =newMatrix();
4 matrix.postRotate(180);/*翻转180度*/
5 intwidth = img.getWidth();
6 intheight = img.getHeight();
7 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 实现图片的旋转

01 publicclassex04_22extendsActivity{
02
03 privateImageView mImageView;
04 privateButton btn1,btn2;
05 privateTextView mTextView;
06 privateAbsoluteLayout layout1;
07 privateintScaleTimes=1,ScaleAngle=1;
08 @Override
09 publicvoidonCreate(Bundle savedInstanceState) {
10 super.onCreate(savedInstanceState);
11 setContentView(R.layout.main);
12 mImageView=(ImageView)findViewById(R.id.myImageView);
13 finalBitmap bmp=BitmapFactory.decodeResource(this.getResources(),R.drawable.ex04_22_1);
14 finalintwidthOrig=bmp.getWidth();
15 finalintheightOrig=bmp.getHeight();
16 mImageView.setImageBitmap(bmp);
17 btn1=(Button)findViewById(R.id.myButton1);
18 btn1.setOnClickListener(newOnClickListener(){
19 publicvoidonClick(View v){
20 ScaleAngle--;
21 if(ScaleAngle<-60){
22 ScaleAngle=-60;
23 }
24 intnewWidth=widthOrig*ScaleTimes;
25 intnewHeight=heightOrig*ScaleTimes;
26 floatscaleWidth=((float)newWidth)/widthOrig;
27 floatscaleHeight=((float)newHeight)/heightOrig;
28 Matrix matrix=newMatrix();
29 matrix.postScale(scaleWidth, scaleHeight);
30 matrix.setRotate(5*ScaleAngle);
31 Bitmap resizeBitmap=Bitmap.createBitmap(bmp,0,0, widthOrig, heightOrig, matrix,true);
32 BitmapDrawable myNewBitmapDrawable=newBitmapDrawable(resizeBitmap);
33 mImageView.setImageDrawable(myNewBitmapDrawable);
34 }
35 });
36 btn2=(Button)findViewById(R.id.myButton2);
37 btn2.setOnClickListener(newOnClickListener(){
38 publicvoidonClick(View v){
39 ScaleAngle++;
40 if(ScaleAngle>60){
41 ScaleAngle=60;
42 }
43 intnewWidth=widthOrig*ScaleTimes;
44 intnewHeight=heightOrig*ScaleTimes;
45 floatscaleWidth=((float)newWidth)/widthOrig;
46 floatscaleHeight=((float)newHeight)/heightOrig;
47 Matrix matrix=newMatrix();
48 matrix.postScale(scaleWidth, scaleHeight);
49 matrix.setRotate(5*ScaleAngle);
50 Bitmap resizeBitmap=Bitmap.createBitmap(bmp,0,0, widthOrig, heightOrig, matrix,true);
51 BitmapDrawable myNewBitmapDrawable=newBitmapDrawable(resizeBitmap);
52 mImageView.setImageDrawable(myNewBitmapDrawable);
53 }
54 });
55 }

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

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

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

如何实现屏幕的滚动效果,这里有两个关键点,一个是实现OnGestureListener,

以便在触摸事件发生的时候,被回调。包括按下,滚动等等,按照API文档,

需要分两步来实现检测手势行为。

1)创建GestureDetector实例

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

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

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

001 packagecom.j2medev;
002
003 importandroid.app.Activity;
004 importandroid.content.Context;
005 importandroid.content.res.Resources;
006 importandroid.graphics.Bitmap;
007 importandroid.graphics.BitmapFactory;
008 importandroid.graphics.Canvas;
009 importandroid.graphics.Paint;
010 importandroid.os.Bundle;
011 importandroid.view.GestureDetector;
012 importandroid.view.MotionEvent;
013 importandroid.view.View;
014 importandroid.view.ViewGroup;
015 importandroid.view.GestureDetector.OnGestureListener;
016
017 publicclassHorizontalScrollextendsActivityimplementsOnGestureListener {
018 privatestaticfinalintX_MAX =800;
019 privatestaticfinalintY_MAX =600;
020 privateintscrollX =0;
021 privateintscrollY =0;
022
023 MyView main;
024 Bitmap bmp;
025 Bitmap adapt;
026 Resources res;
027 Paint paint;
028 GestureDetector gestureScanner;
029
030 @Override
031 publicvoidonCreate(Bundle savedInstanceState) {
032 super.onCreate(savedInstanceState);
033
034 gestureScanner =newGestureDetector(this);
035 paint =newPaint();
036
037 res = getResources();
038 bmp = BitmapFactory.decodeResource(res, R.drawable.arc);
039 adapt = Bitmap.createBitmap(bmp);
040
041 main =newMyView(this);
042 setContentView(main,newViewGroup.LayoutParams(800,600));
043 }
044
045 @Override
046 publicbooleanonTouchEvent(MotionEvent me) {
047 returngestureScanner.onTouchEvent(me);
048 }
049
050 publicbooleanonScroll(MotionEvent e1, MotionEvent e2,floatdistanceX,
051 floatdistanceY) {
052 main.handleScroll(distanceX, distanceY);
053 returntrue;
054 }
055
056 publicbooleanonDown(MotionEvent e) {
057 returntrue;
058 }
059
060 publicbooleanonFling(MotionEvent e1, MotionEvent e2,floatvelocityX,
061 floatvelocityY) {
062 returntrue;
063 }
064
065 publicvoidonLongPress(MotionEvent e) {
066 }
067
068 publicvoidonShowPress(MotionEvent e) {
069 }
070
071 publicbooleanonSingleTapUp(MotionEvent e) {
072 returntrue;
073 }
074
075 // //////////////////
076 // /////////////////
077 // ////////////////
078
079 classMyViewextendsView {
080 publicMyView(Context context) {
081 super(context);
082 }
083
084 @Override
085 protectedvoidonDraw(Canvas canvas) {
086 canvas.drawBitmap(adapt, -scrollX, -scrollY, paint);
087 }
088
089 publicvoidhandleScroll(floatdistX,floatdistY) {
090 // X-Axis ////////////////////////////////
091
092 if(distX >6.0) {
093 if(scrollX <460) {
094 scrollX +=15;
095 }
096 }elseif(distX < -6.0) {
097 if(scrollX >=15) {
098 scrollX -=15;
099 }
100 }
101 // //////////////////////////////////////////
102
103 // Y-AXIS //////////////////////////////////
104 if(distY >6.0) {
105 if(scrollY <100) {
106 scrollY +=15;
107 }
108 }elseif(distY < -6.0) {
109 if(scrollY >=15) {
110 scrollY -=15;
111 }
112 }
113 // //////////////////////////////////////////
114 //
115 // if ((scrollX <= 480) && (scrollY <= 120)) {
116 // adapt = Bitmap.createBitmap(bmp, scrollX, scrollY, 320, 480);
117 // invalidate();
118 // }
119 invalidate();
120 }
121 }
122 }

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

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

操作图像像素

现在你可以对单独的像素进行处理了。通过使用android.graphics.Bitmap API中的

getPixels,可以加载像素到一个整数数组中。在本文例子中,你将按照一定规则对每一

个像素实现着色。经过这个处理后,所有的像素将被转化为一个范围在0到255的字节码。

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

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

01 privatevoidTintThePicture(intdeg) {
02 int[] pix =newint[picw * pich];
03 mBitmap.getPixels(pix,0, picw,0,0, picw, pich);
04
05 intRY, GY, BY, RYY, GYY, BYY, R, G, B, Y;
06 doubleangle = (3.14159d * (double)deg) /180.0d;
07 intS = (int)(256.0d * Math.sin(angle));
08 intC = (int)(256.0d * Math.cos(angle));
09
10 for(inty =0; y < pich; y++)
11 for(intx =0; x < picw; x++)
12 {
13 intindex = y * picw + x;
14 intr = (pix[index] >>16) &0xff;
15 intg = (pix[index] >>8) &0xff;
16 intb = pix[index] &0xff;
17 RY = (70* r -59* g -11* b) /100;
18 GY = (-30* r +41* g -11* b) /100;
19 BY = (-30* r -59* g +89* b) /100;
20 Y = (30* r +59* g +11* b) /100;
21 RYY = (S * BY + C * RY) /256;
22 BYY = (C * BY - S * RY) /256;
23 GYY = (-51* RYY -19* BYY) /100;
24 R = Y + RYY;
25 R = (R <0) ?0: ((R >255) ?255: R);
26 G = Y + GYY;
27 G = (G <0) ?0: ((G >255) ?255: G);
28 B = Y + BYY;
29 B = (B <0) ?0: ((B >255) ?255: B);
30 pix[index] =0xff000000| (R <<16) | (G <<8) | B;
31 }
32
33 Bitmap bm = Bitmap.createBitmap(picw, pich,false);
34 bm.setPixels(pix,0, picw,0,0, picw, pich);
35
36 // Put the updated bitmap into the main view
37 mIV.setImageBitmap(bm);
38 mIV.invalidate();
39
40 mBitmap = bm;
41 pix =null;
42 }

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

android 图片的放大和缩小

01 publicclassex04_22extendsActivity{
02 privateImageView mImageView;
03 privateButton btn1,btn2;
04 privateTextView mTextView;
05 privateAbsoluteLayout layout1;
06 privateBitmap bmp;
07 privateintid=0;
08 privateintdisplayWidth,displayHeight;
09 privatefloatscaleWidth=1,scaleHeight=1;
10 privatefinalstaticString filename="/data/data/ex04_22.lcs/ex04_22_2.png";
11 @Override
12 publicvoidonCreate(Bundle savedInstanceState) {
13 super.onCreate(savedInstanceState);
14 setContentView(R.layout.main);
15 //取得屏幕分辨率
16 DisplayMetrics dm=newDisplayMetrics();
17 getWindowManager().getDefaultDisplay().getMetrics(dm);
18 displayWidth=dm.widthPixels;
19 displayHeight=dm.heightPixels-80;
20 bmp=BitmapFactory.decodeResource(this.getResources(),R.drawable.ex04_22_1);
21 layout1=(AbsoluteLayout)findViewById(R.id.layout1);
22 mImageView=(ImageView)findViewById(R.id.myImageView);
23 btn1=(Button)findViewById(R.id.myButton1);
24 btn1.setOnClickListener(newOnClickListener(){
25 publicvoidonClick(View v){
26 small();
27 }
28 });
29 btn2=(Button)findViewById(R.id.myButton2);
30 btn2.setOnClickListener(newOnClickListener(){
31 publicvoidonClick(View v){
32 big();
33 }
34 });
35 }
36 privatevoidsmall(){
37 //获得Bitmap的高和宽
38 intbmpWidth=bmp.getWidth();
39 intbmpHeight=bmp.getHeight();
40 //设置缩小比例
41 doublescale=0.8;
42 //计算出这次要缩小的比例
43 scaleWidth=(float)(scaleWidth*scale);
44 scaleHeight=(float)(scaleHeight*scale);
45 //产生resize后的Bitmap对象
46 Matrix matrix=newMatrix();
47 matrix.postScale(scaleWidth, scaleHeight);
48 Bitmap resizeBmp=Bitmap.createBitmap(bmp,0,0, bmpWidth, bmpHeight, matrix,true);
49 if(id==0){
50 layout1.removeView(mImageView);
51 }
52 else{
53 layout1.removeView((ImageView)findViewById(id));
54 }
55 id++;
56 ImageView imageView=newImageView(this);
57 imageView.setId(id);
58 imageView.setImageBitmap(resizeBmp);
59 layout1.addView(imageView);
60 setContentView(layout1);
61 btn2.setEnabled(true);
62 }
63 privatevoidbig(){
64 //获得Bitmap的高和宽
65 intbmpWidth=bmp.getWidth();
66 intbmpHeight=bmp.getHeight();
67 //设置缩小比例
68 doublescale=1.25;
69 //计算出这次要缩小的比例
70 scaleWidth=(float)(scaleWidth*scale);
71 scaleHeight=(float)(scaleHeight*scale);
72 //产生resize后的Bitmap对象
73 Matrix matrix=newMatrix();
74 matrix.postScale(scaleWidth, scaleHeight);
75 Bitmap resizeBmp=Bitmap.createBitmap(bmp,0,0, bmpWidth, bmpHeight, matrix,true);
76 if(id==0){
77 layout1.removeView(mImageView);
78 }
79 else{
80 layout1.removeView((ImageView)findViewById(id));
81 }
82 id++;
83 ImageView imageView=newImageView(this);
84 imageView.setId(id);
85 imageView.setImageBitmap(resizeBmp);
86 layout1.addView(imageView);
87 setContentView(layout1);
88 if(scaleWidth*scale*bmpWidth>displayWidth||scaleHeight*scale*scaleHeight>displayHeight){
89 btn2.setEnabled(false);
90 }
91 }
92 }

xml文件

01 <?xmlversion="1.0"encoding="utf-8"?>
02
03 <AbsoluteLayout
04 android:id="@+id/layout1"
05 android:layout_width="fill_parent"
06 android:layout_height="fill_parent"
07 xmlns:android="http://schemas.android.com/apk/res/android"
08 >
09 <ImageView
10 android:id="@+id/myImageView"
11 android:layout_width="200px"
12
13 android:layout_height="150px"
14 android:src="@drawable/ex04_22_1"
15 android:layout_x="0px"
16 android:layout_y="0px"
17 >
18 </ImageView>
19 <Button
20 android:id="@+id/myButton1"
21
22 android:layout_width="90px"
23 android:layout_height="60px"
24 android:text="缩小"
25 android:textSize="18sp"
26 android:layout_x="20px"
27 android:layout_y="372px"
28
29 >
30 </Button>
31 <Button
32 android:id="@+id/myButton2"
33 android:layout_width="90px"
34 android:layout_height="60px"
35 android:text="放大"
36 android:textSize="18sp"
37
38 android:layout_x="210px"
39 android:layout_y="372px"
40 >
41 </Button>
42 </AbsoluteLayout>

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

android 图片透明度处理代码

查看源码 打印 ?
01 publicstaticBitmap setAlpha(Bitmap sourceImg,intnumber) {
02
03   int[] argb =newint[sourceImg.getWidth() * sourceImg.getHeight()];
04
05   sourceImg.getPixels(argb,0, sourceImg.getWidth(),0,0,sourceImg.getWidth(), sourceImg.getHeight());// 获得图片的ARGB值
06
07   number = number *255/100;
08
09   for(inti =0; i < argb.length; i++) {
10
11   argb = (number <<24) | (argb &0x00FFFFFF);// 修改最高2位的值
12
13   }
14
15   sourceImg = Bitmap.createBitmap(argb, sourceImg.getWidth(), sourceImg.getHeight(), Config.ARGB_8888);
16
17   returnsourceImg;
18
19 }

更多相关文章

  1. android 开启本地相册选择图片并返回显示
  2. Android 异步任务加载图片代码
  3. android 开发上传图片遇到返回 FileNotFoundException
  4. Android ListView(Selector 背景图片 全选 Checkbox等按钮)
  5. Android中的Picasso实现圆角图片
  6. Android 设置图片的四个角 为圆角
  7. Android lint 删除无用图片文件和配置文件
  8. android uiautomator 截取图片
  9. android 图片解码显示流程

随机推荐

  1. 全志A20 Android(安卓)源码编译
  2. Android(安卓)databinding笔记
  3. Android(安卓)近百个项目的源代码,覆盖And
  4. Android(安卓)对话框Activity去除白色边
  5. [android] No resource found that match
  6. AndroidManifest.xml Activity 属性说明
  7. android中Socket的使用
  8. Android中Handler引起的内存泄露
  9. Android(安卓)Interface Definition Lang
  10. Android(安卓)PopWindow使用