欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android Studio 给定二维数组float[][]和给定阈值,利用setPixels生成二值化(黑白)bitmap

程序员文章站 2022-10-03 17:08:24
直接上代码。//输入的数据类型可以根据需要更改 public static Bitmap ConvertToBinaryBitmap(float[][] data,float threshold){ //长宽根据实际更改,也可能是反过来的 //比如width=data[0].length; height=data.length; int width = data.length; int height = data[0].length;...

输入:
二维数组 float[][],以及给定的阈值 threshold
处理:
将数组中大于给定阈值的像素设为白色,小于阈值的设为黑色
输出:
二值化后的 bitmap

//我是在安卓上运行的,导入如下库
import android.graphics.Bitmap;

函数部分:

//输入的数据类型可以根据需要更改
    public static Bitmap ConvertToBinaryBitmap(float[][] data,float threshold){
        int width = data[0].length;
        int height = data.length;

        //创建初始图像
        Bitmap result = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);

        //bitmap赋值
        int[] pixs = new int[width * height];
        
        for(int i=0;i<height;i++){
            for(int j=0;j<width;j++){
                int x = i*width+j;
                //大于阈值,设置为白色
                if(data[i][j]>threshold){
                    int r = ((pixs[x] >> 16) & 0xff)|0xff;
                    int g = ((pixs[x] >> 8) & 0xff)|0xff;
                    int b =( pixs[x] & 0xff)|0xff;
                    pixs[x] = 0xff000000 | (r << 16) | (g << 8) | b;
                } 
                //小于阈值,设置为黑色
                else {
                    pixs[x] = 0xff000000;
                }
            }
        }
        //写入图像
        result.setPixels(pixs,0,width,0,0,width,height);
        return result;
    }

附加知识:
对于一个二维数组 float[][] test = new float[a][b]
其中a代表行数,也就是数组的高度;b代表列数,是数组的宽度。
且有以下关系满足:
test.length=a
test[0].length=b

本文地址:https://blog.csdn.net/bxdzyhx/article/details/107385815

相关标签: java