0

我想写一个简单的处理函数。

它应该像这样运行:

  • 加载 Jpeg
  • 将其转换为位图
  • 将位图保存为字节数组
  • 过程
  • 数据转换回位图显示图像。

公共类 MainActivity 扩展 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 回答