2016-10-19 3 views
0

私のアプリでは、画像をクリックするとフルスクリーニングを実装しました。プログラムでは、このようにして次のようになります。イメージビュー(カメラで作成されたイメージ)から次のアクティビティにビットマップを渡し、次のアクティビティはそれを受け入れ、イメージビューにビットマップを表示します。私はたくさんのイメージビューを持っており、問題があります。たとえば、カメラで垂直方向に写真を作り、次の写真を水平にすると、プレビュー画像のフルスクリーンイメージが高さに圧縮されます。ビットマップを次のアクティビティに渡し、スケーリングの問題

私は、次の1つのアクティビティからビットマップを渡す方法

 Bitmap bitmap = params[0]; 
     int h = bm.getHeight(); 
     int w = bm.getWidth(); 
     bitmap = bitmap.createScaledBitmap(bitmap,w/2,h/2, true); 
     ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
     bitmap.compress(Bitmap.CompressFormat.PNG, 50, baos); 
     byte[] b = baos.toByteArray(); 

     Intent intent = new Intent(PhotoAdder.this, FullScreenImage.class); 
     intent.putExtra("picture", b); 
     startActivity(intent); 

活動は、ビットマップを受け入れどのように次の:

Bundle extras = getIntent().getExtras(); 
    byte[] b = extras.getByteArray("picture"); 

    Bitmap bmp = BitmapFactory.decodeByteArray(b, 0, b.length); 
    ImageView image = (ImageView) findViewById(R.id.full); 
    image.setImageBitmap(bmp); 

次のアクティビティのImageViewの幅と高さがmatch_parentです。

+0

あなたはすでにh/2でビットマップをスケーリングしています。 –

+0

@Dheerubhai、私は知っていますが、前回書いたように、最後に作った絵に応じて次の活動でイメージのスケールを変えます。 – Bek

+0

イメージのパスを取得する方法は、次のアクティビティに渡して、ビットマップを使用してイメージを再度読み込みます。 – nakul

答えて

0

イメージを拡大縮小するには、1つのパラメータ(高さまたは幅)を修正してもう1つのパラメータをラップする必要があります。アンドロイドはそれを自動的に行います。それに応じて画像の高さと幅を設定します。また、scaletypeも設定します。 さらに、幅が高さよりも大きいかどうかを実行時にチェックすることで、プログラムで幅を一致親として、幅を折り返しとして設定することができます。逆も同様です。

Ankit

0

メモリにビットマップを維持しないようにしてください。
ビットマップを一時ファイルに保存し、ファイルパスを別のアクティビティに渡してみます。

横画面でポートレート画像を表示する場合は、ImageViewのスケールタイプを正しく変更する必要があります。

チェックhttps://stackoverflow.com/a/25069883/2373466

+0

イメージを水平状態で表示するにはイメージを元の状態にしたい垂直状態でも同じです。残念ながら、scaleTypeを変更しても効果がありませんでした。一時ファイル経由でビットマップを渡そうとします。 – Bek

+0

@Bekその後、画像のexif情報を確認し、画像のスケールタイプを変更します。 –

関連する問題