2010-01-11 98 views
5

我正在为Android编写应用程序。 我需要对从相机拍摄的照片进行一些图像处理。 我使用Camera.PictureCallback来获取照片,并获取字节数组中的图片。 问题是我想对照片的每个像素(一些过滤和其他东西)进行操作,所以我猜,在字节数组中的照片不是一个坏主意。但我不知道如何解释此字节数组中的信息......我知道进行处理的唯一方法是使用BitmapFactory.decodeByteArray(),然后使用Bitmap对象。这是处理大量图像处理的好方法吗? 现在我用的东西是这样的:Android上的图像处理

位图mPhotoPicture mPhotoPicture = BitmapFactory.decodeByteArray(为imageData,0,imageData.length);

mPhotoPicture = mPhotoPicture.copy(Bitmap.Config.RGB_565,true);

我很感激任何帮助。

回答

7

我不确定解码为字节数组是否是在Android上执行此操作的最佳方式,但我可以提供有关图像处理的一般信息。

如果您使用的是RGB_565,那意味着每个像素都是16位或两个字节。前5位是红色,后6位是绿色,后5位是蓝色。在Java中处理这个问题很棘手。我建议你使用像ARGB_8888这样更简单的格式,这意味着你有32位或每个像素4字节,每个字节都是它自己的值(alpha,red,green,blue)。

要测试,尝试设置每第四个字节,像[3][7][11]等,为0。这应该拿出所有的特定渠道,在这种情况下,所有的蓝色。

[2][6],[10]等等都是每个像素的全部绿色值。

(注意,这四个组件可能走向相反的顺序,因为我不知道字节排列顺序!所以我可能只是告诉你如何取出α,而不是蓝色的...)

+0

感谢这个有用的信息。现在我从文档中知道,我只能以这些格式拍摄照片照片:PixelFormat.YCbCr_420_SP(NV21),PixelFormat.RGB_565或PixelFormat.JPEG 所以我想,我尝试编写RGB_565编码。 – Kubeczek 2010-01-12 12:03:45

+0

对。请按照该格式进行编辑,或者在编辑之前找到一种转换方法。 – 2010-01-12 23:08:04