IllegalArgumentException in Bitmap.getPixels()

柔情痞子 提交于 2019-12-21 17:46:11

问题


I'd like to copy the data from a Bitmap into an int[] using getPixels(), this is my current code:

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

for(int i = 0; i < myBitmap.getHeight() * myBitmap.getWidth(); i++) {
    Log.e(TAG, "pixel"+i+"" +pixels[i]);
}

But it's throwing an exception:

05-04 20:24:08.281: ERROR/AndroidRuntime(5700): Uncaught handler: thread main exiting due to uncaught exception
05-04 20:24:08.296: ERROR/AndroidRuntime(5700): java.lang.IllegalArgumentException: y + height must be <= bitmap.height()
05-04 20:24:08.296: ERROR/AndroidRuntime(5700):     at android.graphics.Bitmap.checkPixelsAccess(Bitmap.java:818)
05-04 20:24:08.296: ERROR/AndroidRuntime(5700):     at android.graphics.Bitmap.getPixels(Bitmap.java:771)
05-04 20:24:08.296: ERROR/AndroidRuntime(5700):     at com.tecmark.Jjilapp$TouchView.onDraw(Jjilapp.java:206)

Any ideas? I just specified the y param as 0.


回答1:


You have your width and hight switched.

myBitmap.getPixels(pixels, 0, myBitmap.getWidth(), 0, 0, myBitmap.getHeight(), myBitmap.getWidth());

vs

public void getPixels (int[] pixels, int offset, int stride, int x, int y, int width, int height) http://developer.android.com/reference/android/graphics/Bitmap.html#getPixels(int[], int, int, int, int, int, int)




回答2:


I think there's a typo in this code. Try this:

myBitmap.getPixels(pixels, 0, myBitmap.getWidth(), 0, 0,
   myBitmap.getWidth(), myBitmap.getHeight());


来源:https://stackoverflow.com/questions/5888831/illegalargumentexception-in-bitmap-getpixels

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!