Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何将短[]转换为int[]以创建灰度位图?_Android_Image Processing_Type Conversion - Fatal编程技术网

Android 如何将短[]转换为int[]以创建灰度位图?

Android 如何将短[]转换为int[]以创建灰度位图?,android,image-processing,type-conversion,Android,Image Processing,Type Conversion,我正在尝试对位图图像运行去噪算法,该函数返回一个短[],因此我尝试将其转换为int[],以生成位图,结果如下: 我希望它是灰度的,而不是。。好。。粉红色有什么想法吗?位图的像素使用ARGB_8888、RGB_565、ARGB_4444或ALPHA_8进行编码。因此,您返回的短值必须恰好对应于其中一种格式中看起来略带粉红色的值 如果需要灰度位图,则只能有0-256范围内的值(如果使用ARGB_8888,则最大珍贵颜色分量为8位)。因此,您需要将short映射到该范围内的值,然后为每个RGB组件复

我正在尝试对位图图像运行去噪算法,该函数返回一个短[],因此我尝试将其转换为int[],以生成位图,结果如下:


我希望它是灰度的,而不是。。好。。粉红色有什么想法吗?

位图的像素使用ARGB_8888、RGB_565、ARGB_4444或ALPHA_8进行编码。因此,您返回的短值必须恰好对应于其中一种格式中看起来略带粉红色的值


如果需要灰度位图,则只能有0-256范围内的值(如果使用ARGB_8888,则最大珍贵颜色分量为8位)。因此,您需要将short映射到该范围内的值,然后为每个RGB组件复制该值

您可以使用强度作为alpha通道,而不是在每个RGB通道中复制8位强度。在这个方案中,0对应于透明(背景色),255对应于完全不透明(黑色,或者任何你想要的颜色——甚至粉色)。这个想法类似于Jason LeBrun的建议:取每个值的高阶8位,左移24位,然后按位或使用您想要用于全强度的颜色(或者不使用任何颜色,如果您想要黑色表示全强度)。

我不知所措。。我相信我的值在12位范围内,但我不确定如何获得好的灰度——我尝试用0xfff标准化,然后强制转换为int*256,但这只会使所有内容都变成黄色。我也很确定这个位图是ARGB,但是我知道的不多。好的,通过取上面的8位,将12位值规格化为8位值:
val=0xFF&(val>>4)
然后在每个RGB位置复制该8位值,只需将A设置为255,所以:
0xFF000000+(val我会使用逐位
运算符(
|
)与
+
0XFF000000
相反,它是一个负数,不能与RGB组件正确相加。您的方法是正确的。我想我还有一些其他类型转换问题需要在这一步之前进一步处理。谢谢。是的,这样做的好处是您也可以使用ALPHA_8 BitmapConfig,w这将减少位图的内存需求。一旦我发现了我还没有发现的其他错误,我将尝试这个方法。我想我在代码前面的代码中遇到了一些类型转换问题,从float到short再到back,我们会看到的。谢谢。