我需要将一个二维整数数组(包含从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位图的方法吗?