0

SDカードから大きな画像を取り出して白黒にしてSDカードに保存するアプリケーションを作成しています。大きな画像を直接読み取ることができないので、ストリームを使用する必要があります。誰でも解決策を教えてください。 。PS:私はこの問題の答えを見つけるために多くのことを試みましたが、できませんでした。よろしくお願いします

4

1 に答える 1

1

次のモードRandomAccessFileでファイルにアクセスするには、を使用します。read/write

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

public int read(byte [] buffer)を使用してデータのチャンクを読み取ることができるよりも、ピクセルの色を黒だけにするためにデータバッファーを変更し、public void seek(long offset)を実行して読み取りを開始するオフセットとパブリックボイド書き込み(byte []バッファ)黒とピクセル。

編集:

わかりました。Androidでは画像の生のバイトを取得できないため、実際にはファイルからの読み取りは解決策ではないと思います。BitmapRegionDecoderを使用して、画像のスマルチャンクを読み取ることができます。

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)を読み取ります。次に、平均を取ります。

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 に答える