【问题标题】:How to resize Image in Android?如何在 Android 中调整图像大小?
【发布时间】:2012-05-11 22:07:49
【问题描述】:

我正在创建一个应用程序并想设置一个画廊视图。我不希望画廊视图中的图像是全尺寸的。如何在 Android 中调整图像大小?

【问题讨论】:

  • 如果图片你想缩小尺寸还是只想显示小?

标签: android bitmap


【解决方案1】:

试试:

Bitmap yourBitmap;
Bitmap resized = Bitmap.createScaledBitmap(yourBitmap, newWidth, newHeight, true);

或:

resized = Bitmap.createScaledBitmap(yourBitmap,(int)(yourBitmap.getWidth()*0.8), (int)(yourBitmap.getHeight()*0.8), true);

【讨论】:

    【解决方案2】:
    public Bitmap resizeBitmap(String photoPath, int targetW, int targetH) {
        BitmapFactory.Options bmOptions = new BitmapFactory.Options();
        bmOptions.inJustDecodeBounds = true;
        BitmapFactory.decodeFile(photoPath, bmOptions);
        int photoW = bmOptions.outWidth;
        int photoH = bmOptions.outHeight;
    
        int scaleFactor = 1;
        if ((targetW > 0) || (targetH > 0)) {
                scaleFactor = Math.min(photoW/targetW, photoH/targetH);        
        }
    
        bmOptions.inJustDecodeBounds = false;
        bmOptions.inSampleSize = scaleFactor;
        bmOptions.inPurgeable = true; //Deprecated API 21
    
        return BitmapFactory.decodeFile(photoPath, bmOptions);            
    }
    

    【讨论】:

      【解决方案3】:

      捕获图像并调整其大小。

      Bitmap image2 = (Bitmap) data.getExtras().get("data");
      img.setImageBitmap(image2);
      String incident_ID = IncidentFormActivity.incident_id;
      
      imagepath="/sdcard/RDMS/"+incident_ID+ x + ".PNG";
      File file = new File(imagepath);
          try {
              double xFactor = 0;
              double width = Double.valueOf(image2.getWidth());
              Log.v("WIDTH", String.valueOf(width));
              double height = Double.valueOf(image2.getHeight());
              Log.v("height", String.valueOf(height));
              if(width>height){
              xFactor = 841/width;
          }
          else{
              xFactor = 595/width;
          }
      
      
      Log.v("Nheight", String.valueOf(width*xFactor));
      Log.v("Nweight", String.valueOf(height*xFactor));
      int Nheight = (int) ((xFactor*height));
      int NWidth =(int) (xFactor * width) ; 
      
      bm = Bitmap.createScaledBitmap( image2,NWidth, Nheight, true);
      file.createNewFile();
      FileOutputStream ostream = new FileOutputStream(file);
      bm.compress(CompressFormat.PNG, 100, ostream);
      ostream.close(); 
      

      【讨论】:

        【解决方案4】:

        您可以使用 Matrix 调整相机图像的大小 ....

        BitmapFactory.Options options=new BitmapFactory.Options();
        InputStream is = getContentResolver().openInputStream(currImageURI);
        bm = BitmapFactory.decodeStream(is,null,options);
        int Height = bm.getHeight();
        int Width = bm.getWidth();
        int newHeight = 300;
        int newWidth = 300;
        float scaleWidth = ((float) newWidth) / Width;
        float scaleHeight = ((float) newHeight) / Height;
        Matrix matrix = new Matrix();
        matrix.postScale(scaleWidth, scaleHeight);
        Bitmap resizedBitmap = Bitmap.createBitmap(bm, 0, 0,Width, Height, matrix, true);
        BitmapDrawable bmd = new BitmapDrawable(resizedBitmap);
        

        【讨论】:

          【解决方案5】:
          bm = Bitmap.createScaledBitmap(bitmapSource, width, height, true);
          

          :)

          【讨论】:

            【解决方案6】:

            //照片为位图图片

            Bitmap btm00 = Utils.getResizedBitmap(photo, 200, 200);
            
             setimage.setImageBitmap(btm00);
            
              And in Utils class :
            
            public static Bitmap getResizedBitmap(Bitmap bm, int newHeight, int newWidth) {
                int width = bm.getWidth();
                int height = bm.getHeight();
                float scaleWidth = ((float) newWidth) / width;
                float scaleHeight = ((float) newHeight) / height;
                Matrix matrix = new Matrix();
                // RESIZE THE BIT MAP
                matrix.postScale(scaleWidth, scaleHeight);
                // RECREATE THE NEW BITMAP
                Bitmap resizedBitmap = Bitmap.createBitmap(bm, 0, 0, width, height,
                        matrix, false);
                return resizedBitmap;
            }
            

            【讨论】:

              【解决方案7】:
              BitmapFactory.Options options=new BitmapFactory.Options();
              options.inSampleSize=2; //try to decrease decoded image 
              Bitmap bitmap=BitmapFactory.decodeStream(is, null, options); 
              bitmap.compress(Bitmap.CompressFormat.JPEG, 70, fos); //compressed bitmap to file 
              

              【讨论】:

                【解决方案8】:

                以下是通过保持相同的纵横比来调整位图大小的功能。在这里,我还写了一篇关于该主题的详细博客文章来解释这种方法。 Resize a Bitmap by Keeping the Same Aspect Ratio.

                   public static Bitmap resizeBitmap(Bitmap source, int maxLength) {
                       try {
                           if (source.getHeight() >= source.getWidth()) {
                               int targetHeight = maxLength;
                               if (source.getHeight() <= targetHeight) { // if image already smaller than the required height
                                   return source;
                               }
                
                               double aspectRatio = (double) source.getWidth() / (double) source.getHeight();
                               int targetWidth = (int) (targetHeight * aspectRatio);
                
                               Bitmap result = Bitmap.createScaledBitmap(source, targetWidth, targetHeight, false);
                               if (result != source) {
                               }
                               return result;
                           } else {
                               int targetWidth = maxLength;
                
                               if (source.getWidth() <= targetWidth) { // if image already smaller than the required height
                                   return source;
                               }
                
                               double aspectRatio = ((double) source.getHeight()) / ((double) source.getWidth());
                               int targetHeight = (int) (targetWidth * aspectRatio);
                
                               Bitmap result = Bitmap.createScaledBitmap(source, targetWidth, targetHeight, false);
                               if (result != source) {
                               }
                               return result;
                
                           }
                       }
                       catch (Exception e)
                       {
                           return source;
                       }
                   }
                

                【讨论】:

                  【解决方案9】:
                  resized = Bitmap.createScaledBitmap(yourImageBitmap,(int)(yourImageBitmap.getWidth()*0.9), (int)(yourBitmap.getHeight()*0.9), true);
                  

                  【讨论】:

                    【解决方案10】:
                    BitmapFactory.Options options=new BitmapFactory.Options();
                                options.inSampleSize = 10;
                                FixBitmap = BitmapFactory.decodeFile(ImagePath, options);
                                //FixBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.gv);
                    
                               byteArrayOutputStream = new ByteArrayOutputStream();
                               FixBitmap.compress(Bitmap.CompressFormat.JPEG, 80, byteArrayOutputStream); //compress to 50% of original image quality
                               byteArray = byteArrayOutputStream.toByteArray();
                    
                               ConvertImage = Base64.encodeToString(byteArray, Base64.DEFAULT);
                    

                    【讨论】:

                      猜你喜欢
                      • 2023-04-03
                      • 1970-01-01
                      • 2017-12-20
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2013-10-21
                      • 1970-01-01
                      • 2015-06-04
                      相关资源
                      最近更新 更多