android图像过滤大图像

时间:2012-07-12 09:01:17

标签: android

我正在创建一个应用程序,它将从SD卡中取出大图像然后将它们变成黑白并将它们保存到SD卡。我无法直接读取大图像。所以需要使用流。任何人都可以提供给我有了解决方案。 PS:我尝试了很多方法来找到这个问题的答案,但一直没能。 提前感谢你

1 个答案:

答案 0 :(得分:1)

使用RandomAccessFileread/write模式访问该文件:

RandomAccessFile file = new RandomAccessFile("yourimage", "rw");

你可以用public int read (byte[] buffer)读取数据块,修改数据缓冲区以使像素的颜色只有黑色和白色,做一个public void seek (long offset)返回你偏移的地方开始阅读和public void write (byte[] buffer)黑色和像素。

编辑:

好吧,实际上我认为从文件读取不是解决方案,因为android不允许获取图像的原始字节。您可以使用BitmapRegionDecoder来阅读图像的smull块:

BitmapRegionDecoder decoder = BitmapRegionDecoder.newInstance(myStream, false);
Bitmap bitmapregion = decoder.decodeRegion(new Rect(left, top, right, bottom), null);

而不是使用ColorMatrix来创建黑白图像。如果你可以链接aginst libjpeg,那么直接获取原始位图字节并将其转换为黑白。最简单的方法是使用avarge方法。你一次读3个字节(R,G,B)。然后采取avarage:

unsigned char R;
unsigned char B;
unsigned char G;
int color = (R+G+B)/3; 
if (color > THRESHOLD) return 255;
return 0;