我正在尝试获取图像像素并将其保存在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();
答案 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将无法渲染(至少在非硬件加速设备上)
width
和height
可能不正确
我不知道你在哪里获得这些值,但你应该使用getWidth()
和getHeight()
。如果你想将它设置为不同的值,那很好,但是你需要从原始位图创建一个缩放的位图。否则,无法保证您获得的位图与您认为的大小相同。
pix
可能是错误的尺寸
与最后一点携手并进。一旦有了准确的高度和宽度值,就需要确保数组的大小合适。 pix = new int[height * width]
对此很好。
答案 2 :(得分:-1)
第三个参数不应该是宽度。 第三个参数称为stride:像素[]中要在行之间跳过的条目数(必须是> =位图的宽度)。
尝试
bmap.getPixels(pix, 0, width-1, 0, 0, width, hieght);