2012-07-03 2 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()); 

я использовал viewflipper в XML и вызвать его в коде, и addview в 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

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

yes..in my devies –

+0

Какова его резолюция? –

ответ

0

inSampleSize является предполагается уменьшить изображение , Попробуйте удалить, что и добавление options.inScaled = false;

+0

ok спасибо, я обновляю свой код с options.inScaled = false; n дайте мне outofmemory, если у меня много изображений –

+0

Это нормально с большим количеством изображений в натуральную величину. Существует множество вопросов/ответов и эффективных способов обработки растровых изображений, размещенных на этом сайте, это очень распространенная проблема. – Geobits

+0

yah до того, как я использовал inSampleSize, и моя ошибка outofmemory исчезла, но если я хочу отображать изображение с тем же оригинальным размером и с помощью камеры с изображениями, как это сделать? –

0

В этом официальное руководство прекрасно работает:

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

В принципе вы должны установить немного меньше SampleSize, чем вам нужно. Затем в следующем шаге масштабируйте битмап, чтобы он идеально соответствовал требуемым мерам.

для установки options.inSampleSize = 8; означает, что вы хотите загрузить изображение 1/8 ширины и 1/8 высоты. Поэтому он меньше.

+0

В основном вам нужно установить немного меньший SampleSize, чем вам нужно. Затем в следующем шаге масштабируйте битмап, чтобы он идеально соответствовал требуемым мерам. -> Как я могу это сделать? –

Смежные вопросы