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