如何将2d整数数组转换为8位灰度位图?

时间:2018-11-28 16:14:51

标签: android arrays kotlin bitmap

我需要将一个二维整数数组(包含从0到255的值)转换为8位灰度位图。我正在使用IndexedBitmap库,该库应该支持此功能:

  

此库可用于创建8BPP(每个像素8位)索引   彩色位图,因此占用的存储空间是相同位图的四分之一   尺寸32位位图(如ARGB8888)。

这是我的代码:

fun convertTwoDimensionalArrayToBitmap(inputArray: Array<IntArray>): Bitmap {
    val height = inputArray.size
    val width = inputArray[0].size
    val byteArray = ByteArray(height * width)
    var index = 0
    for (i in 0 until height) {
        for (j in 0 until width) {
            val byte = inputArray[i][j].toByte()
            byteArray[index] = byte
            index++
        }
    }

    val palette = PaletteFactory.getGrayPalette()
    return IndexBitmapFactory.createBitmap(
            byteArray, palette, 0, 0, width, height, false)
}

当我尝试使用它时出现以下错误(在这种情况下,我正在通过256 2d数组传递256):

> 2018-11-28 16:03:46.913
> 23154-23175/com.my.package.test D/IndexBitmap: Raw
> buffer length = 66596 2018-11-28 16:03:46.913
> 23154-23175/com.my.package.test D/Bitmap:
> Bitmap_createFromParcel: Serialized SkColorSpace is larger than
> expected: 256 bytes 2018-11-28 16:03:46.913
> 23154-23175/com.my.package.test W/System.err:
> java.lang.RuntimeException: Failed to unparcel Bitmap 2018-11-28
> 16:03:46.914 23154-23175/com.my.package.test
> W/System.err:     at
> android.graphics.Bitmap$1.createFromParcel(Bitmap.java:1781)
> 2018-11-28 16:03:46.914
> 23154-23175/com.my.package.test W/System.err:     at
> android.graphics.Bitmap$1.createFromParcel(Bitmap.java:1772)
> 2018-11-28 16:03:46.914
> 23154-23175/com.my.package.test W/System.err:     at
> com.badpx.indexbitmap.graphics.IndexBitmapFactory.createBitmap(IndexBitmapFactory.java:97)
> 2018-11-28 16:03:46.914
> 23154-23175/com.my.package.test W/System.err:     at
> com.badpx.indexbitmap.graphics.IndexBitmapFactory.createBitmap(IndexBitmapFactory.java:78)

我使用该库的方式有误吗?在Android上还有其他将2d数组转换为8bit位图的方法吗?

0 个答案:

没有答案