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

Android 如何获取图像像素并将其保存在int数组中?,android,Android,我试图获取图像像素并将其保存在int数组中,但当我检查数组值时,有时会用0填充,有时用奇怪的值填充(所有数组都有相同的值) 试试这个: int[] pixels = new int[yourBitmap.getHeight() * yourBitmap.getWidth()]; yourBitmap.getPixels(pixels, 0, myBitmap.getWidth(), 0, 0, yourBitmap.getWidth(), yourBitmap.getHeight()); 第三

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

试试这个:

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

第三个参数不应该是宽度。 第三个参数称为跨距:行之间要跳过的项目数(以像素[]为单位)(必须大于等于位图的宽度)

试一试
bmap.getPixels(像素,0,宽度-1,0,0,宽度,高度)

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

  • 未调用setDrawingCacheEnabled()

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

  • 宽度
    高度
    可能不正确

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

  • pix
    的大小可能不正确

    和最后一点手拉手。一旦获得了准确的高度和宽度值,就需要确保数组大小正确
    pix=newint[height*width]
    可以这样做


  • 在大多数情况下,这是一个糟糕的建议。对于典型位图,请参阅文档:
    对于正常的压缩结果,只需传递步长值的宽度。
    此外,您说它必须是
    >=位图的宽度
    ,这是真的,但您的代码说的是
    宽度-1
    ,这是无效的。
    int[] pixels = new int[yourBitmap.getHeight() * yourBitmap.getWidth()];
    yourBitmap.getPixels(pixels, 0, myBitmap.getWidth(), 0, 0, yourBitmap.getWidth(), yourBitmap.getHeight());