如何获取图像像素并将其保存在int数组中?

时间:2013-08-05 11:26:50

标签: android

我正在尝试获取图像像素并将其保存在int数组中,但是当我检查数组值时,有时用0填充它,有时用奇怪的值填充(所有数组都有相同的值)。

iv = (ImageView) findViewById (R.id.uploadImage);
iv.buildDrawingCache();
bmap = iv.getDrawingCache();
bmap.getPixels(pix, 0, width, 0, 0, width, hieght);

StringBuilder builder = new StringBuilder();

for(int i :pix) {
    builder.append("   " + i + "    ");
}
Toast.makeText(this, builder, Toast.LENGTH_LONG).show();

3 个答案:

答案 0 :(得分:1)

试试这个:

int[] pixels = new int[yourBitmap.getHeight() * yourBitmap.getWidth()];
yourBitmap.getPixels(pixels, 0, myBitmap.getWidth(), 0, 0, yourBitmap.getWidth(), yourBitmap.getHeight());

答案 1 :(得分:0)

我在这里看到一些可能的问题:

  • setDrawingCacheEnabled()未被称为

    为此,您只需在使用缓存之前调用setDrawingCacheEnabled(true)。完成后确保将其设置为false,否则ImageView将无法渲染(至少在非硬件加速设备上)

  • widthheight可能不正确

    我不知道你在哪里获得这些值,但你应该使用getWidth()getHeight()。如果你想将它设置为不同的值,那很好,但是你需要从原始位图创建一个缩放的位图。否则,无法保证您获得的位图与您认为的大小相同。

  • pix可能是错误的尺寸

    与最后一点携手并进。一旦有了准确的高度和宽度值,就需要确保数组的大小合适。 pix = new int[height * width]对此很好。

答案 2 :(得分:-1)

第三个参数不应该是宽度。 第三个参数称为stride:像素[]中要在行之间跳过的条目数(必须是> =位图的宽度)。

尝试 bmap.getPixels(pix, 0, width-1, 0, 0, width, hieght);