我正在为 Android 编写应用程序。 我需要对从相机拍摄的照片进行一些图像处理。 我使用 Camera.PictureCallback 获取照片,并以字节数组形式获取图片。 问题是我想对照片的每个像素进行操作(一些过滤和其他东西)所以我想,将照片放在字节数组中并不是一个坏主意。但我不知道如何解释这个字节数组中的信息......我知道进行处理的唯一方法是使用 BitmapFactory.decodeByteArray() 然后使用 Bitmap 对象。这是处理大量图像处理的好方法吗? 现在我使用的是这样的东西:
Bitmap mPhotoPicture mPhotoPicture = BitmapFactory.decodeByteArray(imageData, 0 , imageData.length);
mPhotoPicture = mPhotoPicture.copy(Bitmap.Config.RGB_565, true);
感谢任何帮助。
最佳答案
我不确定解码为字节数组是否是在 Android 上执行此操作的最佳方式,但我可以提供我所了解的一般图像处理知识。
如果您使用的是 RGB_565
,这意味着每个像素为 16 位,或其中两个字节。前 5 位是红色,接下来的 6 位是绿色,最后 5 位是蓝色。在 Java 中处理这个问题很棘手。我建议您使用更简单的格式,如 ARGB_8888
,这意味着您有 32 位,或每个像素四个字节,每个字节都有自己的值(alpha、红色、绿色、蓝色)。
要测试,请尝试设置每四个字节,如 [3]
、[7]
、[11]
等,以0. 这应该消除所有特定 channel ,在本例中,所有蓝色。
[2]
、[6]
、[10]
等将是每个像素的所有绿色值。
(请注意,这四个组件的顺序可能相反,因为我不确定字节顺序!所以我可能只是告诉你如何取出 alpha,而不是蓝色……)
关于android - Android 上的图像处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2043019/