0

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

4

1 回答 1

1

使用 aRandomAccessFile在模式下访问文件read/write

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

比您可以使用public int read (byte[] buffer)读取一大块数据,修改数据缓冲区以获得仅黑色和白色的像素颜色,执行public void seek (long offset)以返回您开始读取的偏移量和公共无效写入(字节 [] 缓冲区)黑色和像素。

编辑:

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

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

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

unsigned char R;
unsigned char B;
unsigned char G;
int color = (R+G+B)/3; 
if (color > THRESHOLD) return 255;
return 0;
于 2012-07-12T09:22:35.407 回答