0

表示ビットマップ、元の画像 640*960 に問題がありますが、ビットマップで表示するとサイズが 120*240 になります。元のサイズで表示するにはどうすればよいですか?

                BitmapFactory.Options options = new BitmapFactory.Options();
            options.inSampleSize = 8;
            Bitmap bitmap = BitmapFactory.decodeResource(this.getResources(), Imgid[(int)(Math.random()*Imgid.length)], options);

            ImageView iv = (ImageView)findViewById(position)
            iv.setImageBitmap(processingBitmap_Brightness(bitmap));

私は bitmap.getwidth() と getheight() を記録しますが、640*960 は記録しません

このコードで元のサイズを取得できるようになりましたが、メモリ不足になったので、画像を処理できますか?

BitmapFactory.Options options = new BitmapFactory.Options();
    //options.inSampleSize = 4;
    options.inScaled = false;
    ImageView iv = (ImageView)findViewById(position);
    bitmap=BitmapFactory.decodeResource(getResources(), Imgid[(int)(Math.random()*Imgid.length)],options);
    iv.setImageBitmap(processingBitmap_Brightness(bitmap));     
    Log.i("ID4",bitmap.getWidth()+" * "+bitmap.getHeight());

私はxmlでviewflipperを使用してコードで呼び出し、viewflipperでviewを追加しました

for (i = 0; i<5;i++) {
FrameLayout a = new FrameLayout(this);
FrameLayout.LayoutParams lp = new  FrameLayout.LayoutParams(FrameLayout.LayoutParams.FILL_PARENT,   FrameLayout.LayoutParams.FILL_PARENT,Gravity.CENTER); 
a.setLayoutParams(lp);

b = new ImageView(this);
FrameLayout.LayoutParams lpiv = new    FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT,Gravity.CENTER); 
b.setId(i+1);
b.setLayoutParams(lpiv);
a.addView(b);

vf.addView(a);
}

そして私の onFling 関数

    public boolean onFling(MotionEvent e1,MotionEvent e2,float velocityX,float velocityY){

    try {

        if(e1.getX() > e2.getX() && Math.abs(e1.getX() - e2.getX()) > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
            vf.setInAnimation(AnimationUtils.loadAnimation(mContext, R.anim.left_in));
            vf.setOutAnimation(AnimationUtils.loadAnimation(mContext,R.anim.left_out));


            BitmapFactory.Options options = new BitmapFactory.Options();
            //options.inSampleSize = 4;
            options.inScaled = false;
            Bitmap bitmap = BitmapFactory.decodeResource(this.getResources(), Imgid[(int)(Math.random()*Imgid.length)], options);

            ImageView iv = (ImageView)findViewById(position);
            iv.setImageBitmap(processingBitmap_Brightness(bitmap));



                    vf.showPrevious();

        }else if (e1.getX() < e2.getX() && e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {

            vf.setInAnimation(AnimationUtils.loadAnimation(mContext,
                    R.anim.right_in));
            vf.setOutAnimation(AnimationUtils.loadAnimation(mContext,
                    R.anim.right_out));


            BitmapFactory.Options options = new BitmapFactory.Options();
            //options.inSampleSize = 4;
            options.inScaled = false;
            Bitmap bitmap = BitmapFactory.decodeResource(this.getResources(), Imgid[(int)(Math.random()*Imgid.length)], options);

            ImageView iv = (ImageView)findViewById(position);
            iv.setImageBitmap(processingBitmap_Brightness(bitmap));


                    vf.showNext();

        }

    } catch (Exception e) {

        // nothing

    }

    return true;



}
4

2 に答える 2

1

この公式ガイドはうまく機能します:

http://developer.android.com/training/displaying-bitmaps/load-bitmap.html

基本的に、必要よりも少し小さい SampleSize を設定する必要があります。次に、次のステップでビットマップを縮小して、必要な測定値に完全に収まるようにします。

options.inSampleSize = 8 を設定します。は、画像を幅 1/8、高さ 1/8 でロードすることを意味します。したがって、それは小さいです。

于 2012-07-03T05:31:49.663 に答える
0

inSampleSizeは画像を縮小することになっています。それを削除して追加してみてくださいoptions.inScaled = false;

于 2012-07-03T04:48:28.387 に答える