Bitmap快速入手之具体操作(缩放、旋转、扭转)

您所在的位置:网站首页 旋转180度上下左右都会变吗 Bitmap快速入手之具体操作(缩放、旋转、扭转)

Bitmap快速入手之具体操作(缩放、旋转、扭转)

2024-07-03 10:25| 来源: 网络整理| 查看: 265

前言:

Bitmap就是位图,使用像素矩阵来表示图片的一种形式。使用API可以很轻松地对Bitmap文件进行各种封装后数学运算来达到修改的目的。在Android中,常见的类有Bitmap,Matrix及其提供的方法。Bitmap用于存放媒体资源文件,Matrix用于进行矩阵运算。两者综合可以完成很复杂的图片操作。

一:Bitmap的创建 使用BitmapFactory.decodeResource()来创建使用Bitmap.createBitmap()来创建

两者均可创建Bitmap,不同的是,BitmapFactory.decodeResource()可根据已存在的资源文件进行创建(R.drwable.xxx),Bitmap.createBitmap()则根据一个已存在的Bitmap对象创建。示例如下:

BitmapFactory.decodeResource()Bitmap.createBitmap()Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.benz);Bitmap bitmap1 = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, false);

BitmapFactory.decodeResource()各参数意义如下:

第一个为资源来源,如无特殊需要填写getResources()即可;第二个为资源文件。

Bitmap.createBitmap()各参数意义如下:

第一个为一个已存在的Bitmap对象实例;第二、三个为源对象的左上角坐标(Android系统中坐标原点在左上角,x坐标正轴为向右,y坐标正轴为向下);第四、五个为源对象的宽和高;第六个为矩阵变换数据,即Matrix对象;第七个为是否要使用过滤器对象。 二:Matrix的使用

该对象的创建非常简单,如下:

Matrix matrix = new Matrix();

Matrix对象的意义在于其提供的各种方法,常见如下: (注意“预操作”即方法开头为pre的解释)

setScale():设置缩放比例setSkew():设置旋转方向。顺时针旋转角度为正,逆时针为负;setRotate():设置扭转。可在水平和竖直两个方向扭转;preScale():设置缩放比例,与setScale()不同的是,其是“预操作”,不会对上一步做出撤销;preSkew():设置旋转方向。顺时针旋转角度为正,逆时针为负。其为“预操作”;preRotate():设置扭转。可在水平和竖直两个方向扭转。其为“预操作”。 三:操作类的实现 1:缩放 private void setImageViewEnlarge(){ Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.benz); Matrix matrix = new Matrix(); matrix.setScale(1.5f, 1.5f); Bitmap bitmap1 = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, false); imageView.setImageBitmap(bitmap1); } 2:旋转 private void setImageViewRevolve(){ Matrix matrix = new Matrix(); matrix.preRotate(90f); Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.benz); Bitmap bitmap1 = Bitmap.createBitmap(bitmap, 0, 0 , bitmap.getWidth(), bitmap.getHeight(), matrix, false); imageView.setImageBitmap(bitmap1); } 3:扭转

仅在水平方向扭转

private void setImageViewWryX(){ Matrix matrix = new Matrix(); matrix.preSkew(1f, 0f); Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.benz); Bitmap bitmap1 = Bitmap.createBitmap(bitmap, 0, 0 , bitmap.getWidth(), bitmap.getHeight(), matrix, false); imageView.setImageBitmap(bitmap1); }

在水平和竖直方向同时扭转

private void setImageViewWryY(){ Matrix matrix = new Matrix(); matrix.preSkew(0.5f, 0.5f); Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.benz); Bitmap bitmap1 = Bitmap.createBitmap(bitmap, 0, 0 , bitmap.getWidth(), bitmap.getHeight(), matrix, false); imageView.setImageBitmap(bitmap1); }

若是不太理解,下面为全部代码:

public class MainActivity extends AppCompatActivity implements View.OnClickListener{ private ImageView imageView; private Button buttonEnlarge; private Button buttonRevolve; private Button buttonWryX; private Button buttonWryY; private void intView(){ imageView = (ImageView) findViewById(R.id.image_view); buttonEnlarge = (Button) findViewById(R.id.button_enlarge); buttonRevolve = (Button) findViewById(R.id.button_revolve); buttonWryX = (Button) findViewById(R.id.button_wry_x); buttonWryY = (Button) findViewById(R.id.button_wry_y); } private void setListener(){ buttonEnlarge.setOnClickListener(this); buttonRevolve.setOnClickListener(this); buttonWryX.setOnClickListener(this); buttonWryY.setOnClickListener(this); } private void setImageViewEnlarge(){ Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.benz); Matrix matrix = new Matrix(); matrix.setScale(1.5f, 1.5f); Bitmap bitmap1 = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, false); imageView.setImageBitmap(bitmap1); } private void setImageViewRevolve(){ Matrix matrix = new Matrix(); matrix.preRotate(90f); Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.benz); Bitmap bitmap1 = Bitmap.createBitmap(bitmap, 0, 0 , bitmap.getWidth(), bitmap.getHeight(), matrix, false); imageView.setImageBitmap(bitmap1); } private void setImageViewWryX(){ Matrix matrix = new Matrix(); matrix.preSkew(1f, 0f); Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.benz); Bitmap bitmap1 = Bitmap.createBitmap(bitmap, 0, 0 , bitmap.getWidth(), bitmap.getHeight(), matrix, false); imageView.setImageBitmap(bitmap1); } private void setImageViewWryY(){ Matrix matrix = new Matrix(); matrix.preSkew(0.5f, 0.5f); Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.benz); Bitmap bitmap1 = Bitmap.createBitmap(bitmap, 0, 0 , bitmap.getWidth(), bitmap.getHeight(), matrix, false); imageView.setImageBitmap(bitmap1); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); intView(); setListener(); } /** * Called when a view has been clicked. * * @param v The view that was clicked. */ @Override public void onClick(View v) { switch (v.getId()){ case R.id.button_enlarge: setImageViewEnlarge(); break; case R.id.button_revolve: setImageViewRevolve(); break; case R.id.button_wry_x: setImageViewWryX(); break; case R.id.button_wry_y: setImageViewWryY(); break; default: break; } } } 4.效果图:

原图: 在这里插入图片描述 放大 在这里插入图片描述 扭转: 在这里插入图片描述 在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3