2011-10-27 14 views
0

私は画像処理アプリケーションを持っています。画像をキャプチャするアプリケーションの部分を使って画像を撮ると、画像は最終的に画面に大きく表示されます。これは、ハードウェアの画面サイズを使用してカメラパラメータを指定したためです。電話機のカメラ(アプリケーションのカメラではない)から取得した画像を読み込もうとすると、画像が画面上で大きすぎます。また、バイトの観点からは大きすぎることもあります。私はどのように私のアプリケーションがそれらを使用できるようにギャラリーの画像をサイズ変更または圧縮することができますか?ありがとう画像処理アプリのためのギャラリーの画像のサイズ変更。 android

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(); 
     } 

     if(mbitmap == null){ 
      Log.e(TAG,"mbitmap is null"); 
     }else{ 
      Log.e(TAG,"mbitmap is not null"); 
     } 

public class DisplayUndistortedBitmapFromGallery extends View{ 





    public DisplayUndistortedBitmapFromGallery(Context context) { 
     super(context); 

    } 





    public DisplayUndistortedBitmapFromGallery(Context context, AttributeSet attr) { 
     super(context,attr); 
     Log.e(TAG, "++++++++++ inside dubfgview constructor"); 





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

     if(bm == null){ 
      Log.e(TAG, "bm = null"); 
     }else{ 
      Log.e(TAG, "bm = not null"); 
     } 


     bgr = bm.copy(bm.getConfig(), true); 

答えて

1

私はあなたの質問を正しく理解するには2つの問題があります。 1つは、ImageViewが画面に合わせて画像を拡大するのではなく、もう1つはビットマップに余分なRAMが必要であるということです。

最初の問題を解決するには、画像の拡大/縮小の方法を画像ビューに伝えます。これはあなたのImageViewの境界があまり大きくないことを確認し、問題が解決しない場合は

imgView.setScaleType(ImageView.ScaleType.INSERT_SCALE_TYPE); 

Here is a list of the different scale types.

:単純に以下を実行します。 ImageViewのサイズを特定のものにハードコーディングし、その問題が解決するかどうか確認してください。

2番目の問題は、修正が非常に簡単です。 BitmapFactoryにロードされた画像をダウンサンプリングするように指示するだけです。次に例を示します。もっと長い説明のために

int inSample = 4; // specifies how many 1/N samples to keep, in this case 1/4 off all samples are kept 

opts = new BitmapFactory.Options(); 
opts.inSampleSize = inSample; 

Bitmap b = BitmapFactory.decodeResource(c.getResources(), imgResId, opts); 

は、この質問に対する私の答えを参照してください。uはコードスニペットを見ることができるようにAndroid GalleryView Recycling

+0

がhiそこに、私は私のポストを更新しました。 – turtleboy

+0

こんにちは、私はカスタムビュークラスではなく、イメージビューを持っていません。これはあなたが提供しているヘルプに違いをもたらしますか? – turtleboy

+0

@turtleboyは 'imgView.setScaleType()'メソッドに関してのみです。他のものは同じままです。 – slayton