`
liliang1222
  • 浏览: 158596 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

android图片处理

 
阅读更多

通过内置的图片程序来选择图片

Intent intent = new Intent(Intent.ACTION_PICK,

android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

       startActivityForResult(intent, 0);

 

 

 

创建一个空的Bitmap,然后把一个已经存在的Bitmap放进去

/*

* 将原来的bitmap画到新的易变的alteredBitmap对象中

*/

Bitmap alteredBitmap = Bitmap.createBitmap(bmp.getWidth(), bmp.getHeight(), bmp.getConfig());

Canvas canvas = new Canvas(alteredBitmap);

Paint paint = new Paint();

canvas.drawBitmap(bmp, 0, 0, paint);

 

图片缩放和翻转

Matrix matrix = new Matrix();

//matrix.setRotate(15);

matrix.setRotate(15, bmp.getWidth()/2, bmp.getHeight()/2); //从图片中心点开始旋转

canvas.drawBitmap(bmp, matrix, paint);



 

            

matrix.setScale(1.5f, 1);

第一个参数是x轴上的缩放,第二个参数是y轴上的缩放


 

 
 

Translate:图片在x轴或y轴移动

setTranslate方法接收两个参数,分别是xy轴上的移动


matrix.setTranslate(15, 10);



 

              

 

以上的方法都有prepost版本,可以使我们在一次时间序列中执行多于一次的变换

matrix.setScale(1.5f, 1.5f);

matrix.postRotate(15, bmp.getWidth()/2, bmp.getHeight()/2);


 

实现镜面翻转效果

 matrix.setScale(-1, 1);

 matrix.postTranslate(bmp.getWidth(), 0);


matrix.setScale(1, -1);

matrix.postTranslate(0, bmp.getHeight());


 

 

//It is initialized with the same density as the original bitmap.

//变换后的图片与原图片同样大小

Matrix matrix = new Matrix();

matrix.setRotate(15,bmp.getWidth()/2,bmp.getHeight()/2);

Bitmap alteredBitmap = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), matrix, false);

alteredImageView.setImageBitmap(alteredBitmap);

 

package com.liang.imageTest;

import java.io.FileNotFoundException;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.Display;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;

public class ChoosePictureActivity1 extends Activity implements OnClickListener{

	ImageView choseImageView;
	ImageView alteredImageView;
	Button choosePicture;
	
	@Override
	public void onCreate(Bundle savedInstanceState){
		super.onCreate(savedInstanceState);
		
		setContentView(R.layout.choosepicture1);
		
		choseImageView = (ImageView)findViewById(R.id.chosenImageView);
		alteredImageView = (ImageView)findViewById(R.id.alteredImageView);
		
		choosePicture = (Button)findViewById(R.id.choosePictureButton);
		choosePicture.setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {
		Intent intent = new Intent(Intent.ACTION_PICK,
				android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
		startActivityForResult(intent, 0);
	}

	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		super.onActivityResult(requestCode, resultCode, data);
		
		if(resultCode==RESULT_OK){
			Uri imageFileUri = data.getData();
			
			Display currentDisplay = getWindowManager().getDefaultDisplay();
			int dw = currentDisplay.getWidth();
			int dh = currentDisplay.getHeight();
			
			try{
				BitmapFactory.Options options = new BitmapFactory.Options();
				options.inJustDecodeBounds = true;
				
				Bitmap bmp = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageFileUri),
						null,options);
				
				/*
				 * 图片得尺寸比屏幕大小大,按照图片尺寸与屏幕高、宽最大的比例来缩小图片
				 */
				int heightRatio = (int)Math.ceil(options.outHeight/(float)dh);
				int widthRatio = (int)Math.ceil(options.outWidth/(float)dw);
				
				if(heightRatio > 1 && widthRatio > 1){
					if(heightRatio > widthRatio)
						options.inSampleSize = heightRatio;
					else
						options.inSampleSize = widthRatio;
				}
				
				options.inJustDecodeBounds = false;
				bmp = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageFileUri), null, options);
				
				choseImageView.setImageBitmap(bmp);
				/*
				 * 将原来的bitmap画到新的易变的alteredBitmap对象中
				 */
				Bitmap alteredBitmap = Bitmap.createBitmap(bmp.getWidth()*2, bmp.getHeight()*2, bmp.getConfig());
				Canvas canvas = new Canvas(alteredBitmap);
				Paint paint = new Paint();
				/*
				 * 1.
				 */
//				canvas.drawBitmap(bmp, 0, 0, paint);
				/*
				 * 2.旋转 
				 */
				Matrix matrix = new Matrix();
//				matrix.setRotate(15);
//				matrix.setRotate(15, bmp.getWidth()/2, bmp.getHeight()/2);//从图片中心点开始旋转
				/*
				 * 3.缩放
				 */
//				matrix.setScale(1.5f, 1);//x轴1.5倍,y轴1倍
				/*
				 * 3-1.翻转
				 */
//				matrix.setScale(-1, 1);
//				matrix.postTranslate(bmp.getWidth(), 0);
				/*
				 * 3-2.翻转
				 */
//				matrix.setScale(1, -1);
//				matrix.postTranslate(0, bmp.getHeight());
				/*
				 * 4.移动
				 */
//				matrix.setTranslate(15, 10);
				/*
				 * 5.序列
				 */
//				matrix.setScale(1.5f, 1.5f);
//				matrix.postRotate(15, bmp.getWidth()/2, bmp.getHeight()/2);
				
				canvas.drawBitmap(bmp, matrix, paint);
				alteredImageView.setImageBitmap(alteredBitmap);
				/*
				 * 图片与原图片大小一样
				 */
				/*
				Matrix matrix = new Matrix();
				matrix.setRotate(15,bmp.getWidth()/2,bmp.getHeight()/2);
				Bitmap alteredBitmap = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), matrix, false);
				alteredImageView.setImageBitmap(alteredBitmap);
				*/
			}catch(FileNotFoundException e){
				Log.v("ERROR",e.toString());
			}
		}
	}
	
}
 

  • 大小: 8.3 KB
  • 大小: 7.9 KB
  • 大小: 8.8 KB
  • 大小: 7.5 KB
  • 大小: 7.5 KB
  • 大小: 8.2 KB
分享到:
评论

相关推荐

    android图片处理集合demo

    在Android中,实现图片裁剪通常需要自定义一个ImageView,并配合Matrix进行坐标变换。用户可以通过手势操作裁剪框,裁剪后可使用Bitmap.createBitmap方法截取目标区域。 4. 图片滤镜: 应用滤镜可以改变图片的...

    Android图片处理资料

    在Android平台上,图片处理是一个非常重要的领域,涵盖了各种应用场景,如图像显示、编辑、滤镜效果、裁剪、旋转等。这份"Android图片处理资料"很可能是关于Android平台上的图像处理技术的深入探讨,可能包括源码...

    Android图片处理效果

    在Android中,有多种方法可以达到这个目的: 1. **XML Shape Drawable**: 你可以使用`<shape>`标签中的`<corners>`属性来定义图像的圆角。例如: ```xml <shape xmlns:android=...

    Android图片处理源码

    在Android开发中,图片处理是一项常见的任务,涉及到用户界面的美观、用户体验的优化以及资源的高效利用。这个压缩包文件“Android图片处理源码”很可能包含了一些用于Android平台的图片处理库或者示例代码,帮助...

    android图片处理工具

    首先,Android SDK本身提供了基本的图片处理能力,例如Bitmap类,它是Android中处理图像的基础。Bitmap可以用来加载、创建、绘制和操作图像。在处理Bitmap时,我们需要注意内存管理,因为大尺寸的Bitmap可能导致内存...

    全部android图片处理特效

    在Android平台上进行图片处理是一项常见的任务,涉及到许多技术细节和组件。这个压缩包文件"全部android图片处理...在实际应用中,根据具体需求选择合适的方法或工具,结合性能优化,可以打造出优秀的图片处理功能。

    android图片处理总结

    1. **图片加载**:在Android中,Bitmap是用于表示图片的基础类。然而,直接从磁盘或网络加载大图可能会导致内存溢出。因此,我们通常使用图片库如Glide、Picasso或 Fresco,它们提供了高效、流畅的图片加载策略,...

    Android图片处理工具类

    在Android中进行base64图片处理,我们需要两个主要功能:图片转base64和base64字符串转图片。 1. 图片转base64: 这个过程涉及到读取图片文件,将其二进制数据转化为base64编码的字符串。在Java中,我们可以使用`...

    Android图片处理

    3. **图像显示**:Android中的` ImageView `组件用于显示Bitmap。可以通过设置` ScaleType `属性控制图片如何适应ImageView的大小,例如居中、填充、拉伸等。 4. **颜色操作**:通过Bitmap的` setPixel `和` ...

    Android图片处理.pdf

    ### 二、Android中图片库介绍 Android提供了多种库来处理图像,其中包括: - **Bitmap**: Android的核心图像类,用于加载、渲染和操作图像。 - **Drawable**: 一种资源类型,可以表示静态图像、动画图像或其他类型...

    android图片处理技术

    android资源参考代码,关于对图片的处理,用代码动态分割图片,使其形成动画

    android图片处理滤镜

    在Android开发中,图片处理是一项常见的任务,尤其在制作各种社交应用、美图软件或游戏时,滤镜功能是不可或缺的。"android图片处理滤镜"这个主题涉及到的是如何在Android平台上实现对图像进行视觉效果的调整,以...

    Android图片处理demo

    在Android中,图片的加载也常常涉及异步处理。为了确保用户界面不被阻塞,开发者通常会使用AsyncTask、Handler、Loader 或现代的协程(如Kotlin的coroutines)来实现后台加载。这将使图片在后台解码,并在准备好后...

    android图片处理(压缩,保存,截屏,view转化为bitmap)相关函数 ImageUtils

    android图片处理(压缩,保存,截屏,view转化为bitmap)相关函数 ImageUtils

    Android图片处理及不规则裁剪.zip

    首先,Android中的图片处理主要依赖于以下几大库: 1. **Android SDK自带的Bitmap类**:Bitmap是Android中处理图像的基本类,可以用来创建、解码、绘制和操作图像。 2. ** Glide、Picasso或Fresco**:这些都是流行的...

    Android图片处理工具类BitmapUtils

    Android中的Bitmap对象占用的是Dalvik堆内存,而非Java堆内存,因此在处理大量图片时需要特别注意内存管理,避免内存溢出(OOM)的发生。 9. **缓存策略**: 在实际应用中,BitmapUtils可能会集成缓存机制,如LRU...

    android 图片处理

    1. **Bitmap类**:在Android中,Bitmap是最基础的图片处理类,用于存储和显示图像。了解其内存管理(如BitmapFactory.Options)和复用策略(如Bitmap.createBitmap和recycle方法)非常重要,因为不正确的使用可能...

    android 图片处理工具

    加载本地图片,优化图片加载,避免内存移除

Global site tag (gtag.js) - Google Analytics