我有一个大位图 - 有时高度为 2000 有时为 4000 等等。这可以将这个大位图除以 1500 并保存到数组中吗?
例如,如果我有高度为 2300 的位图,我想要有两个位图的数组:一个为 1500 高度,第二个为 800。
createBitmap()
从原始 Bitmap
创建位图块。
下面的函数接受位图和所需的块大小(在您的情况下为 1500)。 如果宽度大于高度,则垂直分割位图,否则水平分割。
fun getBitmaps(bitmap: Bitmap, maxSize: Int): List<Bitmap> {
val width = bitmap.width
val height = bitmap.height
val nChunks = ceil(max(width, height) / maxSize.toDouble())
val bitmaps: MutableList<Bitmap> = ArrayList()
var start = 0
for (i in 1..nChunks.toInt()) {
bitmaps.add(
if (width >= height)
Bitmap.createBitmap(bitmap, start, 0, width / maxSize, height)
else
Bitmap.createBitmap(bitmap, 0, start, width, height / maxSize)
)
start += maxSize
}
return bitmaps
}
用途:
getBitmaps(myBitmap, 1500)
是的,您可以使用
Bitmap.createBitmap(bmp, offsetX, offsetY, width, height);
创建位图的“切片”,从特定的 x 和 y 偏移量开始,并具有特定的宽度和高度。
我把数学留给你。
除了 Zain 的一些编辑回答之外,我还能够将位图分割为 8 块,高度为 200px(这对我的项目来说没问题),具有原始宽度。
也不要使用块和数学的东西:
private fun getBitmaps(bitmap: Bitmap, maxSize: Int): List<Bitmap> {
val width = bitmap.width
val height = bitmap.height
val bitmaps: MutableList<Bitmap> = ArrayList()
var start = 0
for (i in 1..8) {
bitmaps.add(
Bitmap.createBitmap(bitmap, 0, start, width, (height / 8))
)
if (start == 1400) break
start += 200
}
Log.e("TAG", "getBitmaps: $start")
return bitmaps
}
在撰写中它看起来像:
Column(
modifier = Modifier.fillMaxHeight(),
verticalArrangement = Arrangement.SpaceAround
) {
for (n in 0..7){
Image(
bitmap = getBitmaps(bitmap, 8)[n].asImageBitmap(),
contentDescription = null,
modifier = Modifier.wrapContentSize().weight(1f)
)
}
}
也许对某人有用