从原始位图创建裁剪的位图



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

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

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

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

例如,要获取名为 img 的 100x100 位图的中心 50x50 像素,您可以使用:

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

我的建议:

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 都放在零意味着从左上角开始。

你去吧

https://github.com/lorensiuswlt/AndroidImageCrop

  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);
}

最新更新