2015-11-06 2 views
0

Il y a un certain nombre de sujets et de problèmes similaires ici et je suis this. Mais j'ai une erreur.L'image capturée montre toujours le paysage et setRotate ne peut pas être résolu

Mon code

@Override 

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

    super.onActivityResult(requestCode, resultCode, data); 

    if (resultCode == RESULT_OK) { 
     if (requestCode == 1) { 
      //h=0; 
      File f = new File(Environment.getExternalStorageDirectory().toString()); 
      for (File temp : f.listFiles()) { 
       if (temp.getName().equals("temp.jpg")) { 
        f = temp; 
        File photo = new File(Environment.getExternalStorageDirectory(), "temp.jpg"); 
        //pic = photo; 
        break; 
       } 
      } 

      try { 
       Bitmap bitmap; 
       BitmapFactory.Options bitmapOptions = new BitmapFactory.Options(); 
       bitmapOptions.inJustDecodeBounds = false; 
       bitmapOptions.inPreferredConfig = Bitmap.Config.RGB_565; 
       bitmapOptions.inDither = true; 
       bitmap = BitmapFactory.decodeFile(f.getAbsolutePath(), bitmapOptions); 
       Global.img = bitmap; 

       b.setImageBitmap(bitmap); 
       String path = android.os.Environment.getExternalStorageDirectory() + File.separator + "Phoenix" + File.separator + "default"; 
       //p = path; 
       f.delete(); 
       OutputStream outFile = null; 
       File file = new File(path, String.valueOf(System.currentTimeMillis()) + ".jpg"); 
       try { 

        outFile = new FileOutputStream(file); 
        bitmap.compress(Bitmap.CompressFormat.JPEG, 85, outFile); 
        //pic=file; 
        outFile.flush(); 
        outFile.close(); 


       } catch (FileNotFoundException e) { 
        e.printStackTrace(); 

       } catch (IOException e) { 
        e.printStackTrace(); 

       } catch (Exception e) { 
        e.printStackTrace(); 
       } 

      } catch (Exception e) { 
       e.printStackTrace(); 

      } 

     } else if (requestCode == 2) { 

      Uri selectedImage = data.getData(); 
      // h=1; 
      //imgui = selectedImage; 
      String[] filePath = {MediaStore.Images.Media.DATA}; 
      Cursor c = getContentResolver().query(selectedImage, filePath, null, null, null); 
      c.moveToFirst(); 
      int columnIndex = c.getColumnIndex(filePath[0]); 
      String picturePath = c.getString(columnIndex); 
      c.close(); 
      Bitmap thumbnail = (BitmapFactory.decodeFile(picturePath)); 
      Log.w("path of image ******", picturePath + ""); 
      b.setImageBitmap(thumbnail); 
     } 


    } 
    else 
    { 
     finish(); 
    } 

} 

Après suivre le tutoriel, j'ai changé mon code pour

try { 
      Bitmap bitmap; 
      BitmapFactory.Options bitmapOptions = new BitmapFactory.Options(); 
      bitmapOptions.inJustDecodeBounds = false; 
      bitmapOptions.inPreferredConfig = Bitmap.Config.RGB_565; 
      bitmapOptions.inDither = true; 
      bitmap = BitmapFactory.decodeFile(f.getAbsolutePath(), bitmapOptions); 
       BitmapFactory.Options opts = new BitmapFactory.Options(); 
       Bitmap bm = BitmapFactory.decodeFile(f.getAbsolutePath(), opts); 
       ExifInterface exif = new ExifInterface(f.getAbsolutePath()); 
       String orientString = exif.getAttribute(ExifInterface.TAG_ORIENTATION); 
       int orientation = orientString != null ? Integer.parseInt(orientString) : ExifInterface.ORIENTATION_NORMAL; 
       int rotationAngle = 0; 
       if (orientation == ExifInterface.ORIENTATION_ROTATE_90) rotationAngle = 90; 
       if (orientation == ExifInterface.ORIENTATION_ROTATE_180) rotationAngle = 180; 
       if (orientation == ExifInterface.ORIENTATION_ROTATE_270) rotationAngle = 270; 
       Matrix matrix = new Matrix(); 
       matrix.setRotate(rotationAngle, (float) bm.getWidth()/2, (float) bm.getHeight()/2); 
       Bitmap rotatedBitmap = Bitmap.createBitmap(bm, 0, 0, bitmapOptions.outWidth, bitmapOptions.outHeight, matrix, true); 
       Global.img = bitmap; 
       b.setImageBitmap(bitmap); 
       String path = android.os.Environment 
          .getExternalStorageDirectory() 
          + File.separator 
          + "Phoenix" + File.separator + "default"; 
        //p = path; 

        f.delete(); 

        OutputStream outFile = null; 

        File file = new File(path, String.valueOf(System.currentTimeMillis()) + ".jpg"); 
  1. setRotate dans matrix.setRotate ne peut pas être résolu.
  2. je reçois une ligne rouge sous (bm, 0, 0, bitmapOptions.outWidth, bitmapOptions.outHeight, matrix, true); (ne peut pas résolu méthode CreateBitmap)

********* Modifier *********

Après importer android.graphics.Matrix au lieu de android.opengl.Matrix, l'application s'est écrasée.

erreur LogCat

Process: com.example.project.project, PID: 13045 
    java.lang.OutOfMemoryError 
      at android.graphics.Bitmap.nativeCreate(Native Method) 
      at android.graphics.Bitmap.createBitmap(Bitmap.java:928) 
      at android.graphics.Bitmap.createBitmap(Bitmap.java:901) 
      at android.graphics.Bitmap.createBitmap(Bitmap.java:833) 
      at com.example.project.project.ImageFitScreen.onActivityResult(ImageFitScreen.java:236) 
      at android.app.Activity.dispatchActivityResult(Activity.java:5643) 

Ceci est la ligne 236

Bitmap rotatedBitmap = Bitmap.createBitmap(bm, 0, 0, bitmapOptions.outWidth, bitmapOptions.outHeight, matrix, true); 

Répondre

1

Modification de cette image bitmap rotatedBitmap = Bitmap.createBitmap (bm, 0, 0, bm.getWidth(), bm.getHeight(), matrice, true);

+0

Je reçois toujours la même erreur. Entre, la variable 'rotatedBitmap' n'est jamais utilisée. Je suis le tutoriel, mais il n'a pas montré où devrait affecter le 'rotatedBitmap' –

+0

si vous voulez résoudre votre problème de rotation, vous devez utiliser RotatedBitmap que vous avez assigné dans le code – Nisarg

+0

Que dois-je écrire ensuite? Comment utiliser? –

0

Je suppose que vous avez importé la classe mauvaise Matrix, vous devez importer android.graphics.Matrix, non android.opengl.Matrix , veuillez vérifier.