1. Bitmap的剪切
通常是用到了Bitmap类的createBitmap方法的几个重载方法:
public static Bitmap createBitmap (Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter)
该方法结合Matrix(矩阵)来实现Bitmap的剪切,很多人对这个方法的剪切过程比较模糊,经过我的测试,该方法剪切图片其实是分为两个步骤的。第一步先对源图像从(x,y)位置截取宽为width,高为height的图像缓存起来。第二步对这个缓存图像进行matrix变换生成新的Bitmap作为返回值。这里一定要注意,由于第一步的剪切原理,x,y,width,height必须满足 x+width<=source.getWidth(), h+height<=source.getHeight();否则会抛出异常。
public static Bitmap createBitmap (Bitmap source, int x, int y, int width, int height)该方法和上面的方法类似 ,只不过去掉了Matrix变换。本人觉的 若只是单纯的剪切图像还是用这个比较靠谱因为若是把图像剪切和图像的矩阵变换混在一起 往往会得不到想要的效果。
2. Bitmap的拉伸
Bitmap的拉伸最有效的方法就是:
Bitmap mBitmap = Bitmap.createScaledBitmap(bmp, mScreenWidth, mScreenHeight, true);
该方法是以源图像的左上角为中心将源图像拉伸后生成一个宽为 mScreenWidth,高度为mScreenHeight的新图像作为返回值。游戏开发中为了适应不同屏幕尺寸的手机,通常都会将游戏背景按比例拉伸来适配相应的屏幕尺寸,这里就是用到了该方法。需要注意的一点是该方法不是按比例拉伸的,为了拉伸后的图像不变型 ,通常需要事先计算好按比例拉伸好后的宽高。
图片拉伸还有另一种方法:
ImageView imgvLogo = findViewById(R.id.imgv_Logo);
imgvLogo.setScaleType(ImageView.ScaleType.CENTER);
即将图像作为ImageView的背景 ,然后通过设置ImageView的scaleType属性来拉伸图像。这种用法的优点是不用创建新的对象节省内存,缺点是灵活性差。这里顺带介绍下scaleType用到的几个枚举值:
fitXY : 拉伸图片(不按比例)以填充View的宽高
fitStart : 按比例拉伸图片,拉伸后图片的高度为View的高度,且显示在View的左边 fitCenter :按比例拉伸图片,拉伸后图片的高度为View的高度,且显示在View的中间。
fitEnd :按比例拉伸图片,拉伸后图片的高度为View的高度,且显示在View的右边 center : 按原图大小显示图片,但图片宽高大于View的宽高时,截图图片中间部分 显示
centerCrop: 按比例放大原图直至等于某边View的宽高显示。
centerInside :当原图宽高小于或等于View的宽高时,按原图大小居中显示;反之将 原图缩放至View的宽高居中显示。
3. 细心的同学其实已经注意到了,上述图像的剪切与拉伸都创建了一个新的Bitmap 对象,如果开发中需要对很多个图片做拉伸或者剪切,使用上述方法就会对系统内存造成极大的浪费。那么有什么方法可以避免这种情况呢? 答案就是 在绘图过程中对图像进行剪切或拉伸。
这里的绘图中剪切与拉伸图像本质上是绘制源图像的部分区域而已,用到的方法是:
public void drawBitmap (Bitmap bitmap, Rect src, Rect dst, Paint paint) ;
这个方法是Canvas类的方法, src 是原始图像的部分矩形区域, dst是对原始图像做了剪切或或其他操作(matrix变换)后的图像矩形区域。这里并没有生成新的对象,只是绘制了源图像的部分区域。
还有一种绘制图像的方法用于图像的Matrix变化,同样也不会生成新的对象:
public void drawBitmap (Bitmap bitmap, Matrix matrix, Paint paint);
这个也是Canvas类的方法,源图像的变化操作都保存在matrix里,绘制图像时会先对源图像进行相应的变化然后在绘制再画布上。关于图像的Matrix变换比较复杂,我会在后续的文章中详细介绍。
分享到:
相关推荐
在Android开发中,Bitmap是用于表示图像数据的基本对象,它是一种内存中的图片表示形式。而当我们需要在应用程序中展示带有圆角的图片时,通常会用到Bitmap的处理技巧。本篇文章将深入探讨如何在Android中对Bitmap...
在Android开发中,有时我们需要将Bitmap对象转换成不同的图片格式,比如BMP。BMP(Bitmap File Format)是一种常见的位图文件格式,但它并不像JPEG或PNG那样被Android SDK直接支持。本文将详细介绍如何在Android中将...
本篇文章将深入探讨如何在Android中进行Bitmap与String之间的转换,以及这些转换在实际应用中的场景。 首先,我们要理解Bitmap与String转换的原理。Bitmap是Android系统中用来表示图像的类,它包含了图像的所有像素...
Bitmap、File与Uri 1、将一个文件路径path转换成File String path ; File file = new File(path) 2、讲一个Uri转换成一个path 以选择一张图片为例: String path = FileTools.getRealPathFromUri(content...
在Android开发中,Bitmap是处理图像的基本类,用于在内存中表示位图图像。当我们需要对图片进行裁剪、缩放或进行其他操作时,Bitmap提供了丰富的功能。本篇文章将详细探讨如何在Android环境下利用Bitmap来切割图片。...
Android不支持将Bitmap转换成单色的Bmp图片,所以参考Bmp格式说明,自己写了一个转换类。亲测有效!!!
在Android开发中,Canvas是用于在屏幕上绘制图形和图像的核心组件。`drawBitmap()`方法是Canvas的一个关键函数,用于在Canvas上绘制Bitmap图像。本文将深入解析`drawBitmap()`方法的参数及其用法,并通过实例来说明...
Android Bitmap.getPixels的正确理解演示源码,参考文章《Android Bitmap入门:getPixels的正确理解》
在 Android 中,我们可以使用 Bitmap 类来处理 bitmap 图片,该类提供了多种方法来处理 bitmap 图片,例如 getPixels() 方法可以获取 bitmap 图片的像素颜色值,setPixels() 方法可以设置 bitmap 图片的像素颜色值。...
在Android开发中,Drawable和Bitmap是两种常用的图像资源类型,它们各有特点且在不同场景下有不同的优势。了解和掌握它们之间的相互转换对于优化性能和提高用户体验至关重要。本篇将详细介绍如何在Android中进行...
在Android开发中,Bitmap是用于表示图像数据的核心类,它在UI显示和图像处理中扮演着重要角色。然而,由于Bitmap对象通常占用大量的内存,不当的处理可能导致内存溢出(Out Of Memory)问题,因此对Bitmap进行高效...
在Android开发中,Bitmap是用于表示图像数据的基本类,它在UI设计和图像处理中扮演着重要角色。本文将深入探讨如何使用Bitmap实现各种特效处理,包括黑白特效、底片特效、浮雕特效、模糊特效、锐化特效以及怀旧特效...
在Android开发中,Bitmap是用于图像处理的基本对象,它存储并表示了图像的数据。而Matrix则是Android图形系统中的一个关键类,它允许我们对图像进行各种变换操作,如旋转、缩放、平移和倾斜等。这个教程将深入探讨...
以上就是Android中Bitmap的一些常见用法,包括创建、转换、保存、缩放以及与ImageView的配合使用。在处理大量图片时,注意优化内存使用,避免OutOfMemoryError。合理运用上述方法可以有效地管理Bitmap资源,提高应用...
在Android中处理24位深度的Bitmap文件,涉及到内存管理、解码以及显示等多个环节,这里我们将详细探讨这些知识点。 1. **内存管理**:由于24位深度的Bitmap文件占用内存较大,处理不当可能导致内存溢出。Android...
软件开发网在此之前给大家介绍过图片加载框架Glide的基本用法介绍,大家可以先参考一下,本篇内容更加深入的分析了Glide获取图片Path、Bitmap用法,以及实现的代码分析。 1. 获取Bitmap: 1)在图片下载缓存好之后...
Android 中的 Bitmap 是一种特殊的类,它不能被直接创建,而只能通过 BitmapFactory 来获取。BitmapFactory 提供了多种方法来从不同的图像来源中获取 Bitmap,下面是其中的一些: 1. 从资源文件中获取 Bitmap 可以...
在Android开发中,Bitmap是用于处理图像的基本类,它代表了一个位图图像。有时我们需要将Bitmap对象保存到本地,例如用户拍摄的照片或者加载的网络图片,以便后续使用或分享。本篇文章将深入探讨如何在Android中将...
在本文中,我们将深入探讨如何在Android中剪切Bitmap,以及如何对其进行封装以适应不同的项目需求。 首先,理解Bitmap的基本概念是非常重要的。Bitmap对象代表了像素数据,它包含了图像的颜色信息和尺寸。在Android...
一个基于android平台Bitmap 工具类,一个基于android平台Bitmap 工具类,一个基于android平台Bitmap 工具类,一个基于android平台Bitmap 工具类,一个基于android平台Bitmap 工具类,一个基于android平台Bitmap 工具...