2015-03-30 2 views
-2

Я пытаюсь открыть изображение из галереи и разместить на нем случайный прямоугольник. Но когда я нажимаю кнопку, чтобы открыть галерею, возникает следующее исключение.java.lang.IllegalArgumentException: ширина и высота должны быть> 0

java.lang.IllegalArgumentException: ширина и высота должна быть> 0

public class MainActivity extends Activity implements OnClickListener { 
TextView textView; 
ImageView image1; 
Button get_image, save_image, read_image; 
String selectedImagePath; 
int SELECT_PICTURE = 1; 
String DB_NAME = "test.db"; 
String TABLE_NAME = "mytable"; 
String pts_table="ptstable"; 
Bitmap bmp; 
Intent intent; 
Canvas cnvs; 
Uri selectedImageUri; 
Random r; 
int x,y; 
Paint paint; 



@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    r=new Random(); 

    image1 = (ImageView) findViewById(R.id.imageView1); 
    //image2 = (ImageView) findViewById(R.id.imageView2); 
    textView = (TextView) findViewById(R.id.textView1); 

    get_image = (Button) findViewById(R.id.get_image); 
    get_image.setOnClickListener(this); 

    save_image = (Button) findViewById(R.id.save_image); 
    save_image.setOnClickListener(this); 

    read_image = (Button) findViewById(R.id.read_image); 
    read_image.setOnClickListener(this); 

} 

public void onClick(View v) { 

    int id = v.getId(); 
    switch (id) { 

    case R.id.get_image: 

     intent = new Intent(); 
     intent.setType("image/*"); 
     intent.setAction(Intent.ACTION_GET_CONTENT); 
     startActivityForResult(
       Intent.createChooser(intent, "Select Picture"), 
     SELECT_PICTURE); 
     break; 
    } 

} 

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (resultCode == RESULT_OK) { 
     if (requestCode == SELECT_PICTURE && data!=null) { 

      selectedImageUri = data.getData(); 
      selectedImagePath = getPath(selectedImageUri); 
      System.out.println("Image Path : " + selectedImagePath); 

      bmp=Bitmap.createBitmap(image1.getHeight(),image1.getWidth(),Bitmap.Config.RGB_565); 
      cnvs=new Canvas(bmp); 
      paint=new Paint(); 
      paint.setColor(Color.RED); 
      cnvs.drawBitmap(BitmapFactory.decodeFile(selectedImagePath), 0,0,null); 
      cnvs.drawRect(50, 50, 100, 100, paint); 
      image1.setImageBitmap(bmp); 

      //image1.setImageURI(selectedImageUri); 
     } 
    } 
} 

@SuppressWarnings("deprecation") 
public String getPath(Uri uri) { 
    String[] projection = { MediaStore.Images.Media.DATA }; 
    Cursor cursor = managedQuery(uri, projection, null, null, null); 
    int column_index = cursor 
      .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
    cursor.moveToFirst(); 
    return cursor.getString(column_index); 
} 

}

Это происходит внутри onActivityResult() в

bmp=Bitmap.createBitmap(img.getHeight(),img.getWidth(),Bitmap.Config.RGB_565); 

Может кто-нибудь, пожалуйста, помогите мне? Заранее спасибо

+0

'img.getHeight()' и 'img.getWidth()' возвращаются '0' – Blackbelt

+0

Да. Но я не знаю, как инициализировать новый растровый рисунок, отличный от этого – Vignesh

ответ

0

Мне кажется, вам просто нужно добавить код защиты для проверки того, доступны ли возвратные данные для вашего следующего действия, но не используйте его немедленно.

Как-то из-за разных устройств Android данные о возврате не всегда правильные в вашем уме.

0

Используйте это:

Uri selectedImageUri = data.getData(); 
String tempPath = getPath(selectedImageUri, getActivity()); 
Bitmap bm; 
BitmapFactory.Options btmapOptions = new BitmapFactory.Options(); 
bm = BitmapFactory.decodeFile(tempPath, btmapOptions); 
img.setImageBitmap(bm); 
uploadImagePath = tempPath; 

Надеется, что это поможет вам ..

Смежные вопросы