2011-12-15 13 views
1

最初のファイルは、ユーザーがギャラリーから写真を選択し、それを処理するアクティビティに送信することを許可します。問題は、画像が電話の画面には大きすぎるため、画像の上隅が表示されるように(拡大されたように)表示されることです。ギャラリーの画像サイズを変更するにはどうすればよいですか?

Button useGallery = (Button)findViewById(R.id.loadfromgallery); 
     useGallery.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 

       Intent photoPickerIntent = new Intent(Intent.ACTION_PICK); 
       photoPickerIntent.setType("image/*"); 
       startActivityForResult(photoPickerIntent, SELECT_PHOTO); 
      }}) ; 

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) { 
     super.onActivityResult(requestCode, resultCode, imageReturnedIntent); 

     switch(requestCode) { 
     case SELECT_PHOTO: 
      if(resultCode == RESULT_OK){ 
       Uri selectedImage = imageReturnedIntent.getData(); 
       InputStream imageStream = null; 
       try { 
        imageStream = getContentResolver().openInputStream(selectedImage); 
       } catch (FileNotFoundException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
       Bitmap yourSelectedImage = BitmapFactory.decodeStream(imageStream); 
       Intent intent = new Intent(mContext, DisplayUndistortedBitmapFromGalleryActivity.class); 
       intent.setData(selectedImage); 
       startActivity(intent); 

       if(yourSelectedImage != null){ 
       Log.e(TAG,"pic ok"); 
       }else{ 
        Log.e(TAG,"pic not ok"); 
       } 
      } 
     } 

。 2番目のファイルは、インテントから画像データを受け取り、ビットマップが派生したURIに配置するアクティビティです。

public class DisplayUndistortedBitmapFromGalleryActivity extends Activity { 

    private static final String TAG = "*********DUBFGActivity"; 
    private Context mContext = this; 
    Uri uri; 
    private Bitmap mbitmap = null; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
       WindowManager.LayoutParams.FLAG_FULLSCREEN); 


     uri = getIntent().getData(); 
     if(uri != null){ 
      Log.e(TAG, "uri ok"); 
     }else { 
      Log.e(TAG, "uri not ok"); 
     } 


     try { 
       mbitmap = Media.getBitmap(getContentResolver(), uri); 
      //setMbitmap(bitmap); 
     } catch (FileNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

アクティビティのカスタムビューである3番目のファイルがあります。下の行は、ビットマップをアクティビティから取得して表示します。画面にフィットするようにビットマップを縮小する方法はありますか?ありがとう。

Bitmap bm = ((DisplayUndistortedBitmapFromGalleryActivity)getContext()).getMbitmap(); 

答えて

1

ここで私は通常、ビットマップのサイズを変更して、最も簡単な方法です。

public class bitmaptest extends Activity { 
@Override 
public void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 
    LinearLayout linLayout = new LinearLayout(this); 

    // load the origial BitMap (500 x 500 px) 
    Bitmap bitmapOrg = BitmapFactory.decodeResource(getResources(), 
      R.drawable.android); 

    int width = bitmapOrg.width(); 
    int height = bitmapOrg.height(); 
    int newWidth = 200; 
    int newHeight = 200; 

    // calculate the scale - in this case = 0.4f 
    float scaleWidth = ((float) newWidth)/width; 
    float scaleHeight = ((float) newHeight)/height; 

    // createa matrix for the manipulation 
    Matrix matrix = new Matrix(); 
    // resize the bit map 
    matrix.postScale(scaleWidth, scaleHeight); 
    // rotate the Bitmap 


    // recreate the new Bitmap 
    Bitmap resizedBitmap = Bitmap.createBitmap(bitmapOrg, 0, 0, 
         width, height, matrix, true); 

    // make a Drawable from Bitmap to allow to set the BitMap 
    // to the ImageView, ImageButton or what ever 
    BitmapDrawable bmd = new BitmapDrawable 

編集:ここでは

は別のオプションです。

int targetWidth = bitmapOrg.getWidth() - 15; //change this to control the size 
    int targetHeight = bitmapOrg.getHeight() - 15 ; 
    Matrix matrix = new Matrix(); 
    matrix.postScale(1f, 1f); 
    Bitmap resizedBitmap = Bitmap.createBitmap(bmp, 0, 0, targetWidth, targetHeight, matrix, true); 
+0

私はImageViewではなくcustomViewを使用しています。私はビットマップを取得するために、アクティビティで次のコード行を使用しています。 mbitmap = Media.getBitmap(getContentResolver()、uri);私はちょうどそれをダウンサイズする必要がありますが、私は見つけることができないとビットマップまたはビットマップファクトリクラスでuriを使用してこれを行う方法 – turtleboy

+0

ちょっと、おかげで、完璧:) – turtleboy

+0

問題はありません! =)。 –

関連する問題