2015-05-01 13 views
5

Wiem, że są już wątki na tym pytanie, ale rozwiązania wydają się używać metod z klasy Matrix, które nie wydają się już działać. Nawet po imporcie metod nie można rozwiązać. Zasadniczo próbuję obrócić mapę bitową o 90 stopni, ponieważ wychodzi ona na boki, gdy robię zdjęcie w pionie. Oto mój kod na aktywność:Jak obrócić mapę bitową w systemie Android?

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.camera); 
     this.imageView = (ImageView)this.findViewById(R.id.imageView1); 
     Button photoButton = (Button) this.findViewById(R.id.button1); 
     photoButton.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); 
       File file = new File(Environment.getExternalStorageDirectory()+File.separator + "image.jpg"); 
       intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file)); 
       startActivityForResult(intent, CAPTURE_IMAGE_FULLSIZE_ACTIVITY_REQUEST_CODE); 

      } 
     }); 
    } 

    protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    { 
     //Check that request code matches ours: 
     if (requestCode == CAPTURE_IMAGE_FULLSIZE_ACTIVITY_REQUEST_CODE) 
     { 
      //Get our saved file into a bitmap object: 
      File file = new File(Environment.getExternalStorageDirectory()+File.separator + "image.jpg"); 
      Bitmap bitmap = decodeSampledBitmapFromFile(file.getAbsolutePath(), 1000, 700); 

      Intent intent = new Intent(this, EditActivity.class); 

      ByteArrayOutputStream bs = new ByteArrayOutputStream(); 

      bitmap.compress(Bitmap.CompressFormat.PNG, 50, bs); 
      intent.putExtra("byteArray", bs.toByteArray()); 

      startActivity(intent); 



     } 
    } 
+0

sprawdź https://blahti.wordpress.com/2014/02/03/android-rotate-scale-bitmap/ –

Odpowiedz

8

spróbuj tego:

public static Bitmap RotateBitmap(Bitmap source, float angle) 
{ 
     Matrix matrix = new Matrix(); 
     matrix.postRotate(angle); 
     return Bitmap.createBitmap(source, 0, 0, source.getWidth(), source.getHeight(), matrix, true); 
} 

tu proszę zdać bitmapę lub w kącie, co chcesz pokazać swoją bitmapę jak 90 180 etc.It zmieni ekran mapy bitowej przy użyciu metoda postRotate() klasy Matrix i ponownie stworzyć bitmapę i przywrócić Ci

+0

Czy możesz proszę [edytuj] swoją odpowiedź, aby wyjaśnić, dlaczego ten kod odpowiada na pytanie? Odpowiedzi tylko na kod są zniechęcane (http://meta.stackexchange.com/questions/148272), ponieważ nie uczą rozwiązania. – DavidPostill

+0

Dzięki @DavidPostill –

+0

Dziękuję, że to zadziałało! –

0

Możesz dodać TextView do układu i ustaw bitmapę do niego

ImageView yourView = (ImageView)findViewById(imageviewid); 
Bitmap bitmap = decodeSampledBitmapFromFile(file.getAbsolutePath(), 1000, 700); 
yourView.setImageBitmap(bitmap); 

Prawdopodobnie możesz użyć RotateAnimation w widoku (obrazie ustawionym na bitmapę), który chcesz obrócić, i nie zapomnij ustawić animacji na fillAfter=true i duration=0.

<?xml version="1.0" encoding="utf-8"?> 
<rotate 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:fromDegrees="90" 
    android:toDegrees="180" 
    android:pivotX="50%" 
    android:pivotY="50%" 
    android:duration="0" 
    android:startOffset="0" 
/> 

Teraz wszystko, co potrzebne jest, aby napompować animacji do widoku

Animation rotation = AnimationUtils.loadAnimation(this, R.anim.rotation); 
yourView.startAnimation(rotation); 

Albo można po prostu zrobić to yourView.setRotation(angle) z API >= 11.

+0

@ThanhLeTran Czy możesz skrytykować moją odpowiedź, jeśli to nie działa? – MChaker

Powiązane problemy