从原始位图创建裁剪位图

时间:2012-06-12 14:32:52

标签: android bitmap

在我的Android应用程序中,我有一个Bitmap,我想创建另一个从这个位图裁剪出来的位图。换句话说,我想从原始位图中获取特定部分。

我正在使用Bitmap.createBitmap(Bitmap source, int x, int y, int width, int height) 但是我得到的图像似乎被放大了。

可能是什么原因,我该如何纠正? 请帮忙

4 个答案:

答案 0 :(得分:1)

我的建议:

r = this.getContext().getResources();
Drawable copyFrom= r.getDrawable(R.drawable.OriginalPNG);
Bitmap b1 = Bitmap.createBitmap(IMAGES_WIDTH, IMAGES_HEIGHT,Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(b1);


copyFrom.setBounds(0, 0, IMAGES_WIDTH, IMAGES_HEIGHT);
copyFrom.draw(canvas);

Bitmap copyTo;  

copyTo = Bitmap.createBitmap(copyFrom, x, y, W, H);

其中IMAGES_WIDTH和IMAGES_HEIGHT是原始PNG和W的尺寸,H是要复制的区域的尺寸。 x和y指定原始PNG上从哪里开始复制的点。将x,y都设为零意味着从左上角开始。

答案 1 :(得分:1)

Bitmap.createBitmap(Bitmap source,int x,int y,int width,int height)绝对是正确的方法。我怀疑你只是错误地使用了这些参数。

E.g。要获得名为img的100x100位图的中心50x50像素,您可以使用:

Bitmap.createBitmap(img,25,25,50,50);

答案 2 :(得分:0)

答案 3 :(得分:0)

  Rect re=new Rect(350, 150, 350, 150);



    public void takePicture(final String fileName) {
    Log.i(TAG, "Tacking picture");
    PictureCallback callback = new PictureCallback() {

        private String mPictureFileName = fileName;

        @Override
        public void onPictureTaken(byte[] data, Camera camera) {
            Log.i(TAG, "Saving a bitmap to file");
            Bitmap picture = BitmapFactory.decodeByteArray(data, 0, data.length);
           Bitmap finalBitmap = Bitmap.createBitmap(picture, 850, 500, 960, 720);

            try {


                FileOutputStream out = new FileOutputStream(mPictureFileName);
                finalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
                finalBitmap.recycle();
                mCamera.startPreview();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    };

    mCamera.takePicture(null, null, callback);

}