Android矩阵Matrix裁切setRectToRect拉伸Bitmap替代Bitmap.createScaledBitmap缩放,Kotlin
class MyImageView : AppCompatImageView {private var mSrcBmp: Bitmap? = nullprivate var testIV: ImageView? = nullconstructor(ctx: Context, attrs: AttributeSet) : super(ctx, attrs) {//mSrcBmp是原始图大小,没有缩放和拉伸的。mSrcBmp = (drawable as BitmapDrawable).bitmap}fun setTestImageView(imageView: ImageView) {testIV = imageView}override fun onDraw(canvas: Canvas) {super.onDraw(canvas)val bmp = Bitmap.createBitmap(this.width, this.height, Bitmap.Config.ARGB_8888)val c = Canvas(bmp)c.drawColor(Color.BLUE)c.drawBitmap(mSrcBmp!!, 0f, 0f, null)testIV?.setImageBitmap(bmp)}
}
不加任何缩放,直接绘制原图放在下面的ImageView里面则是:
下图左上角即是未缩放的原图,直接绘制在下面的ImageView里面。
如果想把原始小图拉伸撑满整个ImageView,可以用常规、经典的Bitmap.createScaledBitmap拉伸原始图的宽高为ImageView的宽高实现,也可以基于矩阵Matrix,通过setRectToRect实现同样的拉伸缩放目标:
class MyImageView : AppCompatImageView {private var mSrcBmp: Bitmap? = nullprivate var testIV: ImageView? = nullconstructor(ctx: Context, attrs: AttributeSet) : super(ctx, attrs) {//mSrcBmp是原始图大小,没有缩放和拉伸的。mSrcBmp = (drawable as BitmapDrawable).bitmap}fun setTestImageView(imageView: ImageView) {testIV = imageView}override fun onDraw(canvas: Canvas) {super.onDraw(canvas)val bmp = Bitmap.createBitmap(this.width, this.height, Bitmap.Config.ARGB_8888)val c = Canvas(bmp)c.drawColor(Color.BLUE)val src = RectF(0f, 0f, mSrcBmp?.width!!.toFloat(), mSrcBmp?.height!!.toFloat())val dst = RectF(0f, 0f, this.width.toFloat(), this.height.toFloat())val mx = Matrix()mx.setRectToRect(src, dst, Matrix.ScaleToFit.CENTER)c.drawBitmap(mSrcBmp!!, mx, null)testIV?.setImageBitmap(bmp)}
}
运行如下图:
上下两张图相同。
Android矩阵Matrix变换setRectToRect,Kotlin-CSDN博客文章浏览阅读194次,点赞2次,收藏2次。Android拼接合并图片生成长图代码实现合并两张图片,以第一张图片的宽度为标准,如果被合并的第二张图片宽度和第一张不同,那么就以第一张图片的宽度为准线,对第二张图片进行缩放。Android拼接合并图片生成长图代码实现合并两张图片,以第一张图片的宽度为标准,如果被合并的第二张图片宽度和第一张不同,那么就以第一张图片的宽度为准线,对第二张图片进行缩放。基础上,把剪切的区域从矩形Rect变为圆形的Path,当手指在上面的ImageView移动时候,下面同等大小对应的坐标区域显示“剪切”出来的圆形图。https://blog.csdn.net/zhangphil/article/details/135913218