Android:调整图像的一部分并调整其大小

时间:2010-07-21 04:01:23

标签: android image matrix bitmap imageview

鉴于图像,我希望能够仅缩放该图像的一部分。比如,我想扩展图像的一半,这样就占据了整个空间。

这怎么可能?

ImageView fitXY能否正常工作,因为我认为它只适用于整个原始图像。

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LinearLayout linearLayout = new LinearLayout(this); 

           Bitmap bitmap = BitmapFactory.decodeResource(getResources(),       R.drawable.icon);   


            int width = bitmap.getWidth();   

             int height = bitmap.getHeight();   

            int newWidth = 640;   

            int newHeight = 480;   


             float scaleWidth = ((float) newWidth) / width;   

            float scaleHeight = ((float) newHeight) / height;   


            Matrix matrix = new Matrix();   

            matrix.postScale(scaleWidth, scaleHeight);   

             // create the new Bitmap object   

             Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 50, 50, width,   

                     height, matrix, true);   

             BitmapDrawable bmd = new BitmapDrawable(resizedBitmap);   



             ImageView imageView = new ImageView(this);   

             imageView.setImageDrawable(bmd);   

             imageView.setScaleType(ScaleType.CENTER);   



             linearLayout.addView(imageView, new LinearLayout.LayoutParams(   

                     LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));   

             setContentView(linearLayout);   
  } 
} 

这仅适用于在createBitmap中,源中第一个像素的X和Y坐标为0.意味着,我无法拍摄图像的子集。只能缩放整个图像。但是createBitmap意味着对图像进行子集化。

在日志中,当参数不为0时,我得到以下异常:java.lang.IllegalArgumentException:x + width必须是< = bitmap.width()

请帮忙

2 个答案:

答案 0 :(得分:2)

首先,您必须使用

创建一个包含要缩放的部分的新位图
createBitmap() //pass the source bitmap, req height and width

现在从结果位图中,您必须使用

创建缩放位图
createScaledbitmap() //pass the result bitmap , req width, height

exapmle:

Bitmap originalBitmap = BitmapFactory.decodeResource(res, id);
Bitmap partImage = originalBitmap.createBitmap(width, height, config);
Bitmap scaledImage = partImage.createScaledBitmap(partImage, dstWidth, dstHeight, filter);

答案 1 :(得分:1)

所以我不得不解决几个错别字,但这个例子对我来说做得很好。http://www.anddev.org/resize_and_rotate_image_-_example-t621.html 错别字:

int width = bitmapOrg.width();
int height = bitmapOrg.height();

成为:

int width = bitmapOrg.getWidth();
int height = bitmapOrg.getHeight();

否则,当我再次尝试SDK 7时工作