从位图获取像素,以错误的顺序显示它们

时间:2014-07-27 18:08:43

标签: android image bitmap pixels

我刚刚编写了一些代码来抓取图像,将其像素存储到数组中并再次显示每个像素,以便最终显示抓取的图像。

我拍了下面的照片: enter image description here

我选择使用32x32 png图像作为示例。

这是我的输出:

enter image description here

正如您可能看到的,结果的像素远远多于32x32。

以下是我的代码的外观:

首先,创建一个应该获取图像所有像素信息的数组:

private Bitmap b = BitmapFactory.decodeResource(getResources(), R.drawable.test);
private int w = b.getWidth;
private int h = b.getHeight;
private int pixels = w*h;

然后我使用一种方法将位图的像素存储到数组中:

b.getPixels(pixels, 0, w, 0, 0, w, h);

我认为应该是它,现在我可以将像素绘制到我的视图中:

public void onDraw(Canvas canvas) {
  super.onDraw(canvas);
  Paint p = new Paint();
  for(int i = 0; i < w; i++) {
    for(int j = 0; j < h; j++) {
      p.setColor(Color.parseColor(String.format("#%06X", (0xFFFFFF & pixelImage.pixels[i+i*j]))));
      canvas.drawRect(i, j, i+1, j+1, paint);
    }
  }
}

我不知道我的错误在哪里,也许有人可以帮助我?

1 个答案:

答案 0 :(得分:0)

你的算法错了,经常有点重要。 String.format没有理由进入它,我甚至不确定你去哪里。并且drawRect不是这样做的方式。尝试:

  for(int i = 0; i < w; i++) {
    for(int j = 0; j < h; j++) {
      p.setColor(pixels[i*bmp.getWidth()+j]);
      canvas.drawPoint(j, i, paint);
    }
  }