通过使用此代码,我们可以旋转图像:
public static Bitmap RotateBitmap(Bitmap source, float angle) {
Matrix matrix = new Matrix();
matrix.postRotate(angle);
return Bitmap.createBitmap(source, 0, 0, source.getWidth(), source.getHeight(), matrix, true);
}
但是我们如何水平或垂直翻转图像呢?
答案 0 :(得分:40)
鉴于cx,cy
是图像的中心:
翻转x:
matrix.postScale(-1, 1, cx, cy);
翻转y:
matrix.postScale(1, -1, cx, cy);
答案 1 :(得分:3)
Kotlin的短暂延期
private fun Bitmap.flip(x: Float, y: Float, cx: Float, cy: Float): Bitmap {
val matrix = Matrix().apply { postScale(x, y, cx, cy) }
return Bitmap.createBitmap(this, 0, 0, width, height, matrix, true)
}
用法:
对于水平翻转: -
val cx = bitmap.width / 2f
val cy = bitmap.height / 2f
val flippedBitmap = bitmap.flip(-1f, 1f, cx, cy)
ivMainImage.setImageBitmap(flippedBitmap)
垂直翻转: -
val cx = bitmap.width / 2f
val cy = bitmap.height / 2f
val flippedBitmap = bitmap.flip(1f, -1f, cx, cy)
ivMainImage.setImageBitmap(flippedBitmap)
答案 2 :(得分:1)
对于Kotlin,
fun Bitmap.flip(): Bitmap {
val matrix = Matrix().apply { postScale(-1f, 1f, width/2f, width/2f) }
return Bitmap.createBitmap(this, 0, 0, width, height, matrix, true)
}
答案 3 :(得分:0)
位图bms的水平和垂直翻转(源)。
Matrix matrix = new Matrix();
// for horizontal flip
matrix.setScale(-1, 1);
matrix.postTranslate( bms.getWidth(),0);
// for vertical flip
matrix.setScale( 1,-1);
matrix.postTranslate( 0, bms.getHeight());
Bitmap bm = Bitmap.createBitmap( bms, 0, 0, bms.getWidth(), bms.getHeight(), matrix, true);
答案 4 :(得分:0)
只需使用以下代码
private fun setVerticalFlip() {
if (binding.imgReal.scaleX == 1.0f) {
binding.imgReal.scaleX = -1.0f
} else {
binding.imgReal.scaleX = 1.0f
}
}
private fun setHorizontalFlip() {
if (binding.imgReal.scaleY == 1.0f) {
binding.imgReal.scaleY = -1.0f
} else {
binding.imgReal.scaleY = 1.0f
}
}
答案 5 :(得分:-1)
关于你使用的矩阵。要围绕x轴翻转,请使用[[-1,0],[0,1]]。对于y轴,使用[[1,0],[0,-1]]。这里重要的是行列式的绝对值是1,因此它不会成比例。并且 - 基本上反转给定轴周围的位置。