引用: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 = new Matrix();
|
4 |
matrix.postRotate( 180 );
|
5 |
int width = img.getWidth();
|
6 |
int height = 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 |
public class ex04_22 extends Activity{
|
03 |
private ImageView mImageView;
|
04 |
private Button btn1,btn2;
|
05 |
private TextView mTextView;
|
06 |
private AbsoluteLayout layout1;
|
07 |
private int ScaleTimes= 1 ,ScaleAngle= 1 ;
|
09 |
public void onCreate(Bundle savedInstanceState) {
|
10 |
super .onCreate(savedInstanceState);
|
11 |
setContentView(R.layout.main);
|
12 |
mImageView=(ImageView)findViewById(R.id.myImageView);
|
13 |
final Bitmap bmp=BitmapFactory.decodeResource( this .getResources(),R.drawable.ex04_22_1);
|
14 |
final int widthOrig=bmp.getWidth();
|
15 |
final int heightOrig=bmp.getHeight();
|
16 |
mImageView.setImageBitmap(bmp);
|
17 |
btn1=(Button)findViewById(R.id.myButton1);
|
18 |
btn1.setOnClickListener( new OnClickListener(){
|
19 |
public void onClick(View v){
|
24 |
int newWidth=widthOrig*ScaleTimes;
|
25 |
int newHeight=heightOrig*ScaleTimes;
|
26 |
float scaleWidth=(( float )newWidth)/widthOrig;
|
27 |
float scaleHeight=(( float )newHeight)/heightOrig;
|
28 |
Matrix matrix= new Matrix();
|
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= new BitmapDrawable(resizeBitmap);
|
33 |
mImageView.setImageDrawable(myNewBitmapDrawable);
|
36 |
btn2=(Button)findViewById(R.id.myButton2);
|
37 |
btn2.setOnClickListener( new OnClickListener(){
|
38 |
public void onClick(View v){
|
43 |
int newWidth=widthOrig*ScaleTimes;
|
44 |
int newHeight=heightOrig*ScaleTimes;
|
45 |
float scaleWidth=(( float )newWidth)/widthOrig;
|
46 |
float scaleHeight=(( float )newHeight)/heightOrig;
|
47 |
Matrix matrix= new Matrix();
|
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= new BitmapDrawable(resizeBitmap);
|
52 |
mImageView.setImageDrawable(myNewBitmapDrawable);
|
**********************************************************************
实现画面淡入淡出效果可以用 :setAlpha(alpha);
alpha从255,逐渐递减!
**********************************************************************
如何实现屏幕的滚动效果,这里有两个关键点,一个是实现OnGestureListener,
以便在触摸事件发生的时候,被回调。包括按下,滚动等等,按照API文档,
需要分两步来实现检测手势行为。
1)创建GestureDetector实例
2) 在onTouchEvent()方法中调用GestureDetector的onTouchEvent()方法。
另一个关键点是自己实现一个简单的View,来绘制图片。
代码如下所示。由于,我们不需要使用layout定义,所以不需要提供xml文件。
直接在程序里面setContentView()即可。
003 |
import android.app.Activity;
|
004 |
import android.content.Context;
|
005 |
import android.content.res.Resources;
|
006 |
import android.graphics.Bitmap;
|
007 |
import android.graphics.BitmapFactory;
|
008 |
import android.graphics.Canvas;
|
009 |
import android.graphics.Paint;
|
010 |
import android.os.Bundle;
|
011 |
import android.view.GestureDetector;
|
012 |
import android.view.MotionEvent;
|
013 |
import android.view.View;
|
014 |
import android.view.ViewGroup;
|
015 |
import android.view.GestureDetector.OnGestureListener;
|
017 |
public class HorizontalScroll extends Activity implements OnGestureListener {
|
018 |
private static final int X_MAX = 800 ;
|
019 |
private static final int Y_MAX = 600 ;
|
020 |
private int scrollX = 0 ;
|
021 |
private int scrollY = 0 ;
|
028 |
GestureDetector gestureScanner; |
031 |
public void onCreate(Bundle savedInstanceState) {
|
032 |
super .onCreate(savedInstanceState);
|
034 |
gestureScanner = new GestureDetector( this );
|
037 |
res = getResources(); |
038 |
bmp = BitmapFactory.decodeResource(res, R.drawable.arc); |
039 |
adapt = Bitmap.createBitmap(bmp); |
041 |
main = new MyView( this );
|
042 |
setContentView(main, new ViewGroup.LayoutParams( 800 , 600 ));
|
046 |
public boolean onTouchEvent(MotionEvent me) {
|
047 |
return gestureScanner.onTouchEvent(me);
|
050 |
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
|
052 |
main.handleScroll(distanceX, distanceY); |
056 |
public boolean onDown(MotionEvent e) {
|
060 |
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
|
065 |
public void onLongPress(MotionEvent e) {
|
068 |
public void onShowPress(MotionEvent e) {
|
071 |
public boolean onSingleTapUp(MotionEvent e) {
|
079 |
class MyView extends View {
|
080 |
public MyView(Context context) {
|
085 |
protected void onDraw(Canvas canvas) {
|
086 |
canvas.drawBitmap(adapt, -scrollX, -scrollY, paint);
|
089 |
public void handleScroll( float distX, float distY) {
|
096 |
} else if (distX < - 6.0 ) {
|
108 |
} else if (distY < - 6.0 ) {
|
**********************************************************************
教你在谷歌Android平台中处理图片
操作图像像素
现在你可以对单独的像素进行处理了。通过使用android.graphics.Bitmap API中的
getPixels,可以加载像素到一个整数数组中。在本文例子中,你将按照一定规则对每一
个像素实现着色。经过这个处理后,所有的像素将被转化为一个范围在0到255的字节码。
android.graphics.Bitmap API中的setPixels则用来加载这个整数数组到一个图像中。
最后一步是通过ImageView变量mIV来更新屏幕。以下是实现这个染色过程的代码片段。
01 |
private void TintThePicture( int deg) {
|
02 |
int [] pix = new int [picw * pich];
|
03 |
mBitmap.getPixels(pix, 0 , picw, 0 , 0 , picw, pich);
|
05 |
int RY, GY, BY, RYY, GYY, BYY, R, G, B, Y;
|
06 |
double angle = ( 3 .14159d * ( double )deg) / 180 .0d;
|
07 |
int S = ( int )( 256 .0d * Math.sin(angle));
|
08 |
int C = ( int )( 256 .0d * Math.cos(angle));
|
10 |
for ( int y = 0 ; y < pich; y++)
|
11 |
for ( int x = 0 ; x < picw; x++)
|
13 |
int index = y * picw + x;
|
14 |
int r = (pix[index] >> 16 ) & 0xff ;
|
15 |
int g = (pix[index] >> 8 ) & 0xff ;
|
16 |
int b = 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 ;
|
25 |
R = (R < 0 ) ? 0 : ((R > 255 ) ? 255 : R);
|
27 |
G = (G < 0 ) ? 0 : ((G > 255 ) ? 255 : G);
|
29 |
B = (B < 0 ) ? 0 : ((B > 255 ) ? 255 : B);
|
30 |
pix[index] = 0xff000000 | (R << 16 ) | (G << 8 ) | B;
|
33 |
Bitmap bm = Bitmap.createBitmap(picw, pich, false );
|
34 |
bm.setPixels(pix, 0 , picw, 0 , 0 , picw, pich);
|
37 |
mIV.setImageBitmap(bm);
|
**********************************************************************
android 图片的放大和缩小
01 |
public class ex04_22 extends Activity{
|
02 |
private ImageView mImageView;
|
03 |
private Button btn1,btn2;
|
04 |
private TextView mTextView;
|
05 |
private AbsoluteLayout layout1;
|
08 |
private int displayWidth,displayHeight;
|
09 |
private float scaleWidth= 1 ,scaleHeight= 1 ;
|
10 |
private final static String filename= "/data/data/ex04_22.lcs/ex04_22_2.png" ;
|
12 |
public void onCreate(Bundle savedInstanceState) {
|
13 |
super .onCreate(savedInstanceState);
|
14 |
setContentView(R.layout.main); |
16 |
DisplayMetrics dm= new DisplayMetrics();
|
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( new OnClickListener(){
|
25 |
public void onClick(View v){
|
29 |
btn2=(Button)findViewById(R.id.myButton2); |
30 |
btn2.setOnClickListener( new OnClickListener(){
|
31 |
public void onClick(View v){
|
38 |
int bmpWidth=bmp.getWidth();
|
39 |
int bmpHeight=bmp.getHeight();
|
43 |
scaleWidth=( float )(scaleWidth*scale);
|
44 |
scaleHeight=( float )(scaleHeight*scale);
|
46 |
Matrix matrix= new Matrix();
|
47 |
matrix.postScale(scaleWidth, scaleHeight); |
48 |
Bitmap resizeBmp=Bitmap.createBitmap(bmp, 0 , 0 , bmpWidth, bmpHeight, matrix, true );
|
50 |
layout1.removeView(mImageView); |
53 |
layout1.removeView((ImageView)findViewById(id)); |
56 |
ImageView imageView= new ImageView( this );
|
58 |
imageView.setImageBitmap(resizeBmp); |
59 |
layout1.addView(imageView); |
60 |
setContentView(layout1); |
61 |
btn2.setEnabled( true );
|
65 |
int bmpWidth=bmp.getWidth();
|
66 |
int bmpHeight=bmp.getHeight();
|
70 |
scaleWidth=( float )(scaleWidth*scale);
|
71 |
scaleHeight=( float )(scaleHeight*scale);
|
73 |
Matrix matrix= new Matrix();
|
74 |
matrix.postScale(scaleWidth, scaleHeight); |
75 |
Bitmap resizeBmp=Bitmap.createBitmap(bmp, 0 , 0 , bmpWidth, bmpHeight, matrix, true );
|
77 |
layout1.removeView(mImageView); |
80 |
layout1.removeView((ImageView)findViewById(id)); |
83 |
ImageView imageView= new ImageView( this );
|
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 );
|
xml文件
01 |
<? xml version = "1.0" encoding = "utf-8" ?>
|
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"
|
10 |
android:id = "@+id/myImageView"
|
11 |
android:layout_width = "200px"
|
13 |
android:layout_height = "150px"
|
14 |
android:src = "@drawable/ex04_22_1"
|
15 |
android:layout_x = "0px"
|
16 |
android:layout_y = "0px"
|
20 |
android:id = "@+id/myButton1"
|
22 |
android:layout_width = "90px"
|
23 |
android:layout_height = "60px"
|
25 |
android:textSize = "18sp"
|
26 |
android:layout_x = "20px"
|
27 |
android:layout_y = "372px"
|
32 |
android:id = "@+id/myButton2"
|
33 |
android:layout_width = "90px"
|
34 |
android:layout_height = "60px"
|
36 |
android:textSize = "18sp"
|
38 |
android:layout_x = "210px"
|
39 |
android:layout_y = "372px"
|
*********************************************************************
android 图片透明度处理代码
01 |
public static Bitmap setAlpha(Bitmap sourceImg, int number) {
|
03 |
int [] argb = new int [sourceImg.getWidth() * sourceImg.getHeight()];
|
05 |
sourceImg.getPixels(argb, 0 , sourceImg.getWidth(), 0 , 0 ,sourceImg.getWidth(), sourceImg.getHeight());
|
07 |
number = number * 255 / 100 ;
|
09 |
for ( int i = 0 ; i < argb.length; i++) {
|
11 |
argb = (number << 24 ) | (argb & 0x00FFFFFF );
|
15 |
sourceImg = Bitmap.createBitmap(argb, sourceImg.getWidth(), sourceImg.getHeight(), Config.ARGB_8888); |