2012-07-03 3 views
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

지금 나는이 코드를 원래 크기를 얻을 수 있지만, 지금 날에서 OutOfMemory주고, 그래서 이미지를 처리 ​​할 수 ​​있습니까?

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 사용 및 코드에서 호출하고 addview

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; 



} 
+0

기기 테스트 중입니까? –

+0

예 .. 내 휴대 전화 –

+0

해상도는 무엇입니까? –

답변

0

inSampleSize이 이미지를 축소을 가정 있다 viewflipper

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 기능 . 그것을 제거하고 options.inScaled = false;

+0

내 코드를 업데이트 해 주셔서 감사합니다. options.inScaled = false; n 이미지가 많은 경우 나에게 메모리를주지 마십시오. –

+0

풀 사이즈로 많은 이미지가있는 것이 정상입니다. 이 사이트에 게시 된 비트 맵을 처리 할 수있는 많은 질문/답변과 효율적인 방법이 있지만 매우 일반적인 문제입니다. – Geobits

+0

ya 전에 inSampleSize 및 내 오류 outofmemory 사라졌지만 전에 동일한 원본 크기 및 imagesample 부스 함께 이미지를 표시하려면 원하는 어떻게 코드? –

0

이 공식 가이드를 추가하려고하면 잘 작동 :

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

은 기본적으로 당신이 필요로하는 것보다 조금 작은 SampleSize을 설정해야합니다. 그런 다음 다음 단계에서 비트 맵을 원하는 크기로 완벽하게 맞 춥니 다.

options.inSampleSize = 8을 설정하려면; 너비 1/8 너비 및 높이 1/8 이미지를로드 할 것을 의미합니다. 그러므로 더 작습니다.

+0

기본적으로 필요한 것보다 약간 작은 SampleSize를 설정해야합니다. 그런 다음 다음 단계에서 비트 맵을 원하는 크기로 완벽하게 맞 춥니 다. - 내가 어떻게 할 수 있니? –

관련 문제