Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

java.lang.IllegalArgumentException: y must be < bitmap.height()

I have this method to compare to images that are in xhdpi but giving me this error java.lang.IllegalArgumentException: y must be < bitmap.height() here is code :

 private boolean CompareImages(ImageView im1, ImageView im2){

            boolean bool = false;
            int check = 0, v1, v2, v3, ev1, ev2, ev3;
            Bitmap bitmap1 = ((BitmapDrawable)im1.getDrawable()).getBitmap();
            Bitmap bitmap2 = ((BitmapDrawable)im2.getDrawable()).getBitmap();


            for(int j = 50; j < 160; j = j + 50){
                int pixel = bitmap1.getPixel(j,j);
                int pixel2 = bitmap2.getPixel(j,j);

                int redValue = Color.red(pixel);
                int blueValue = Color.blue(pixel);
                int greenValue = Color.green(pixel);

                v1 = (redValue + greenValue + blueValue)/3;

                int redValue1 = Color.red(pixel2);
                int blueValue2 = Color.blue(pixel2);
                int greenValue2 = Color.green(pixel2);

                ev1 = (redValue1 + greenValue2 + blueValue2)/3;

                if(v1 == ev1){
                    bool = true;
                } else{
                    bool = false;
                }
            }

            return bool;
}

here logcat:

03-31 10:53:45.192: E/AndroidRuntime(807): FATAL EXCEPTION: main
03-31 11:29:33.352: E/AndroidRuntime(1574): FATAL EXCEPTION: main
03-31 11:29:33.352: E/AndroidRuntime(1574): java.lang.IllegalStateException: Could not execute method of the activity
03-31 11:29:33.352: E/AndroidRuntime(1574):     at android.view.View$1.onClick(View.java:3599)
03-31 11:29:33.352: E/AndroidRuntime(1574):     at android.view.View.performClick(View.java:4204)
03-31 11:29:33.352: E/AndroidRuntime(1574):     at android.view.View$PerformClick.run(View.java:17355)
03-31 11:29:33.352: E/AndroidRuntime(1574):     at android.os.Handler.handleCallback(Handler.java:725)
03-31 11:29:33.352: E/AndroidRuntime(1574):     at android.os.Handler.dispatchMessage(Handler.java:92)
03-31 11:29:33.352: E/AndroidRuntime(1574):     at android.os.Looper.loop(Looper.java:137)
03-31 11:29:33.352: E/AndroidRuntime(1574):     at android.app.ActivityThread.main(ActivityThread.java:5041)
03-31 11:29:33.352: E/AndroidRuntime(1574):     at java.lang.reflect.Method.invokeNative(Native Method)
03-31 11:29:33.352: E/AndroidRuntime(1574):     at java.lang.reflect.Method.invoke(Method.java:511)
03-31 11:29:33.352: E/AndroidRuntime(1574):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
03-31 11:29:33.352: E/AndroidRuntime(1574):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
03-31 11:29:33.352: E/AndroidRuntime(1574):     at dalvik.system.NativeStart.main(Native Method)
03-31 11:29:33.352: E/AndroidRuntime(1574): Caused by: java.lang.reflect.InvocationTargetException
03-31 11:29:33.352: E/AndroidRuntime(1574):     at java.lang.reflect.Method.invokeNative(Native Method)
03-31 11:29:33.352: E/AndroidRuntime(1574):     at java.lang.reflect.Method.invoke(Method.java:511)
03-31 11:29:33.352: E/AndroidRuntime(1574):     at android.view.View$1.onClick(View.java:3594)
03-31 11:29:33.352: E/AndroidRuntime(1574):     ... 11 more
03-31 11:29:33.352: E/AndroidRuntime(1574): Caused by: java.lang.IllegalArgumentException: y must be < bitmap.height()
03-31 11:29:33.352: E/AndroidRuntime(1574):     at android.graphics.Bitmap.checkPixelAccess(Bitmap.java:1158)
03-31 11:29:33.352: E/AndroidRuntime(1574):     at android.graphics.Bitmap.getPixel(Bitmap.java:1107)
03-31 11:29:33.352: E/AndroidRuntime(1574):     at com.example.gusetheplace.ConductQuiz2.CompareImages(ConductQuiz2.java:794)
03-31 11:29:33.352: E/AndroidRuntime(1574):     at com.example.gusetheplace.ConductQuiz2.onClick_rb4(ConductQuiz2.java:630)
03-31 11:29:33.352: E/AndroidRuntime(1574):     ... 14 more
like image 251
Bibi Tahira Avatar asked Mar 30 '13 12:03

Bibi Tahira


1 Answers

You're are iterating over int j = 50; j < 160; j = j + 50, without checking the real size of the images.

You should use Bitmap.getHeight() and Bitmap.getWidth() in order to call Bitmap.getPixel(x,y) with valid coordinates.

like image 100
alexcasalboni Avatar answered Nov 26 '22 05:11

alexcasalboni