0

簡単な処理関数を書きたかったのです。

次のように実行する必要があります。

  • JPEG を読み込む
  • ビットマップに変換します
  • ビットマップをバイト配列として保存
  • 処理する
  • データはビットマップ表示イメージに変換されます。

public class MainActivity extends Activity {

ImageView imgView;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    imgView = (ImageView) findViewById(R.id.imageView1);

    AssetFileDescriptor asf;
    String filename = Environment.getExternalStorageDirectory() + "/Test/"
            + "DSC00751.JPG";
    Bitmap map = BitmapFactory.decodeFile(filename);
    ByteArrayOutputStream bout = new ByteArrayOutputStream();

    // Convert image so it can be stored in byteArray
    map.compress(CompressFormat.JPEG, 100, bout);
    byte[] array = bout.toByteArray();

    // Process image.
    for (int i = 0; i < array.length; i++) {
        if (array[i] < 0) {
            array[i] = (byte) 200;
        }
    }

    // Convert result and display
    Bitmap bmp = BitmapFactory.decodeByteArray(array, 0, array.length);
    imgView.setImageBitmap(bmp);
    Toast.makeText(getApplicationContext(), "done", Toast.LENGTH_SHORT).show();
}

その見返りに白い画面が表示されます。私の処理コードがどのように見えても。前に foreach(byte b : array) を使ってみたのですが、これはいつも元の画像を返してしまいました。

私は何を間違っていますか?

4

1 に答える 1

4
 // Process image.
    for (int i = 0; i < array.length; i++) {
        if (array[i] < 0) {
            array[i] = (byte) 200;
        }
    }

このコードでは、画像バイトを変更しています!! だから白く見えるんです!! ほかに何か?


とにかく、画像を処理する必要がある場合は、次のようにする必要があります。

    Bitmap bitmap =...;
    int[] pixels = new int[bitmap.getWidth() * bitmap.getHeight()];

    bitmap.getPixels(pixels, 0, bitmap.getWidth(), 0, 0, bitmap.getWidth(), bitmap.getHeight());

これで、画像のピクセル配列が得られました (int[])

于 2012-10-27T02:21:50.633 に答える