将大位图拆分为android中的位图列表

问题描述 投票:0回答:3

我有一个大位图 - 有时高度为 2000 有时为 4000 等等。这可以将这个大位图除以 1500 并保存到数组中吗?

例如,如果我有高度为 2300 的位图,我想要有两个位图的数组:一个为 1500 高度,第二个为 800。

android kotlin bitmap android-bitmap
3个回答
1
投票

您可以使用

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)

1
投票

是的,您可以使用

Bitmap.createBitmap(bmp, offsetX, offsetY, width, height);
创建位图的“切片”,从特定的 x 和 y 偏移量开始,并具有特定的宽度和高度。

我把数学留给你。


0
投票

除了 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)
            )
        }
    }

也许对某人有用

© www.soinside.com 2019 - 2024. All rights reserved.