2

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

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

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

4

4 回答 4

2

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

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

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

于 2012-06-12T14:53:40.327 回答
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 都设为零意味着从左上角开始。

于 2012-06-12T14:51:58.020 回答
0

干得好

https://github.com/lorensiuswlt/AndroidImageCrop

于 2012-06-12T14:40:38.327 回答
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);

}
于 2013-03-14T07:14:43.577 回答