我想从ImageView
中获取Bitmap。我使用了以下代码,但它抛出了ArrayIndexOutOfBoundExcpetion
异常。如何解决这个问题?
bitmap.getPixels(mImagePixels, 0, bitmap.getWidth(), 0, 0, bitmap.getWidth(), bitmap.getHeight()); int pixel = 0; for (int i = 0; i < DIM_IMG_SIZE_WIDTH; ++i) { for (int j = 0; j < DIM_IMG_SIZE_HEIGHT; ++j) { final int val = mImagePixels[pixel++]; mImgData.putFloat(convertToGreyScale(val)); } } } private float convertToGreyScale(int color) { return (((color >> 16) & 0xFF) + ((color >> 8) & 0xFF) + (color & 0xFF)) / 3.0f / 255.0f; } java.lang.ArrayIndexOutOfBoundsException at android.graphics.Bitmap.checkPixelsAccess(Bitmap.java:1824) at android.graphics.Bitmap.getPixels(Bitmap.java:1765) at com.drprajapati.android.plantclassification.ml.Classifier.convertBitmapToByteBuffer(Classifier.java:69) at com.drprajapati.android.plantclassification.ml.Classifier.classify(Classifier.java:53) at com.drprajapati.android.plantclassification.MainActivity$1.onClick(MainActivity.java:58) at android.view.View.performClick(View.java:6671) at android.view.View.performClickInternal(View.java:6640) at android.view.View.access$3100(View.java:791) at android.view.View$PerformClick.run(View.java:26173) at android.os.Handler.handleCallback(Handler.java:873) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:193) at android.app.ActivityThread.main(ActivityThread.java:6912) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:537) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
回答:
可以尝试以下方法:
BitmapDrawable drawable = (BitmapDrawable) imageView.getDrawable();Bitmap bitmap = drawable.getBitmap();