android - 如何在扩展中修改源变量“this”
问题描述
我正在尝试为旋转位图做一个扩展,它接缝的唯一方法是创建一个新的位图并在 Bitmap.createBitmap(...) 中旋转它。
我的问题是我不希望函数返回任何值,只需修改自身。
这是可行的吗?
到目前为止的代码:
fun Bitmap.adjustToNaturalOrientation(image_absolute_path: String) {
val exifInterface = ExifInterface(image_absolute_path)
val orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL)
when (orientation) {
ExifInterface.ORIENTATION_ROTATE_90 -> rotate( 90f)
ExifInterface.ORIENTATION_ROTATE_180 -> rotate( 180f)
ExifInterface.ORIENTATION_ROTATE_270 -> rotate(270f)
ExifInterface.ORIENTATION_FLIP_HORIZONTAL -> flip(true, false)
ExifInterface.ORIENTATION_FLIP_VERTICAL -> flip( false, true)
}
}
fun Bitmap.rotate(degrees: Float): Bitmap {
val matrix = Matrix()
matrix.postRotate(degrees)
return Bitmap.createBitmap(this, 0, 0, this.width, this.height, matrix, true) // Returns a new bitmap.
}
fun Bitmap.flip(flipHorizontal: Boolean, flipVertical: Boolean) {
val matrix = Matrix()
matrix.preScale(if(flipHorizontal) -1f else 1f, if(flipVertical) -1f else 1f)
this = Bitmap.createBitmap(this, 0, 0, this.width, this.height, matrix, true)// Does not compile
}
我想要翻转的功能,没有返回值。
在我的主要活动中,我只想写:
mBitmap.adjustToNaturalOrientation(src)
解决方案
你不能这样做,无论如何这也不是一个好的风格。您应该考虑返回一个新实例:
mBitmap = mBitmap.adjustToNaturalOrientation(src)
fun Bitmap.adjustToNaturalOrientation(image_absolute_path: String): Bitmap
fun Bitmap.flip(flipHorizontal: Boolean, flipVertical: Boolean): BitMap {
val matrix = Matrix()
matrix.preScale(if(flipHorizontal) -1f else 1f, if(flipVertical) -1f else 1f)
return Bitmap.createBitmap(this, 0, 0, this.width, this.height, matrix, true)
}
推荐阅读
- android - Android Studio 项目无法识别基本主题 Base.Theme
- html - 使用 flex-grow: 1 使网格项目使用剩余空间,如 flex 项目
- php - 安装 Sonata Dashboard 包
- c - valgrind 在 struct sockaddr_nl 上进行比较
- r - R中的快速矩阵计算
- excel - 计算偏移行中不同值之间的单元格数
- c - TCP服务器不等待客户端响应?
- amazon-web-services - yii2-elasticsearch 2.1 不适用于 AWS elasticsearch
- kodi - xbmc/video/VideoInfoScanner:无法检索音乐视频
- spring-integration-http - Spring Integration:连接失败与错误响应代码 retryadvice()