Câu hỏi Làm thế nào để cắt một hình ảnh trong Android? [bản sao]


Có thể trùng lặp:
Làm thế nào để cắt hình ảnh được phân tích cú pháp trong Android? 

Tôi có một hình ảnh trong thư mục res / drawable và tôi muốn cắt (ví dụ: cắt ra một phần của hình ảnh) hình ảnh khi tải nó vào một ImageView. Tuy nhiên tôi không chắc chắn làm thế nào để làm điều này, bất cứ đề nghị?


34
2017-10-02 15:20


gốc


Câu trả lời câu hỏi được liên kết không trả lời cách cắt, hãy đọc nó. - m0skit0
Thư viện tốt nhất mà tôi tìm thấy để cắt hình ảnh là Android-Hình ảnh-Cropper. Xem này câu trả lời. - Soon Santos


Các câu trả lời:


Từ Bitmap.createBitmap: "Trả về một bitmap bất biến từ tập hợp con được chỉ định của bitmap nguồn. Bitmap mới có thể là cùng một đối tượng như nguồn, hoặc một bản sao có thể đã được tạo. Nó được khởi tạo với mật độ giống như bitmap gốc."

Vượt qua nó một bitmap, và xác định hình chữ nhật mà từ đó bitmap mới sẽ được tạo ra.

// Take 10 pixels off the bottom of a Bitmap
Bitmap croppedBmp = Bitmap.createBitmap(originalBmp, 0, 0, originalBmp.getWidth(), originalBmp.getHeight()-10);

37
2017-10-24 06:43



Đối với tôi, nó chỉ hoạt động nếu tôi đã làm originalBmp.getWidth()-1. Có vẻ như tất cả các kích thước cây trồng phải rơi hoàn toàn bên trong bản gốc nếu không bản gốc được trả về. - Jannie Theunissen


Trình quản lý liên hệ Android EditContactActivity sử dụng Intent("com.android.camera.action.CROP")

Đây là mã mẫu:

Intent intent = new Intent("com.android.camera.action.CROP");
// this will open all images in the Galery
intent.setDataAndType(photoUri, "image/*");
intent.putExtra("crop", "true");
// this defines the aspect ration
intent.putExtra("aspectX", aspectY);
intent.putExtra("aspectY", aspectX);
// this defines the output bitmap size
intent.putExtra("outputX", sizeX);
intent.putExtra("outputY", xizeY);
// true to return a Bitmap, false to directly save the cropped iamge
intent.putExtra("return-data", false);
//save output image in uri
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);

13
2017-12-06 10:41



Nếu tôi có một hình ảnh tại SD Card / myimage.jpg, Làm thế nào tôi có thể đặt URI vào ý định CROP? I E. Tôi muốn cắt một khu vực của hình ảnh SD Card / myimage.jpg. - Nguyen Minh Binh
#Nguyen, có bạn những gì bạn nhận xét. - Abdul Wahab
bạn đã từng *... - Abdul Wahab
@ rds, tôi có thể cắt hình ảnh bằng cách sử dụng mã trên, nhưng hoạt động cắt máy ảnh vẫn chạy bên ngoài ứng dụng của tôi, cách hoàn thành mục đích đó, khi người dùng nhấn lưu hoặc hủy trong mục đích cắt - Abdul Wahab
Tất nhiên nó chạy bên ngoài ứng dụng của bạn. Đọc Intent: 1. Nó chạy trong ứng dụng xử lý com.android.camera.action.CROP. 2. Đầu ra được lưu trong uri mà bạn chỉ định. Điều cuối cùng: Bắt đầu hoạt động này với startActivityForResult để biết liệu người dùng đã nhấn OK hay Hủy. - rds


Thử cái này:

ImageView ivPeakOver=(ImageView) findViewById(R.id.yourImageViewID);

Bitmap bmp=BitmapFactory.decodeResource(getResources(), R.drawable.yourImageID);
int width=(int)(bmp.getWidth()*peakPercent/100);
int height=bmp.getHeight();

Bitmap resizedbitmap=Bitmap.createBitmap(bmp,0,0, width, height);
ivPeakOver.setImageBitmap(resizedbitmap);

Từ Tài liệu:

static Bitmap    createBitmap(Bitmap source, int x, int y, int width, int height)

Trả về bitmap bất biến từ tập con được chỉ định của bitmap nguồn.


7
2018-05-13 17:31



Tốt đẹp! Vẫn còn ngớ ngẩn, nó không thể được thực hiện với một thuộc tính đơn giản trên ImageView mặc dù, nhưng tôi đoán điều này sẽ đủ hiệu quả. - Olof Hedman


Nếu bạn muốn cắt ngang hình ảnh bên ngoài, bạn nên kiểm tra thuộc tính ScaleType cho ImageView: http://developer.android.com/reference/android/widget/ImageView.ScaleType.html

Đặc biệt, bạn sẽ quan tâm đến tùy chọn "centerCrop". Nó cắt ra một phần của hình ảnh lớn hơn kích thước được xác định.

Dưới đây là một ví dụ về việc thực hiện điều này trong bố cục XML:

<ImageView  android:id="@+id/title_logo"
            android:src="@drawable/logo"
            android:scaleType="centerCrop" android:padding="4dip"/>

6
2017-10-02 15:44



nó ngớ ngẩn đến nỗi họ không thêm nhiều lựa chọn cây trồng nữa, sau đó là cây trồng trung tâm ... - Olof Hedman


 int targetWidth = 100;
 int targetHeight = 100;
 RectF rectf = new RectF(0, 0, 100, 100);//was missing before update
 Bitmap targetBitmap = Bitmap.createBitmap(
 targetWidth, targetHeight,Bitmap.Config.ARGB_8888);
 Canvas canvas = new Canvas(targetBitmap);
 Path path = new Path();
 path.addRect(rectf, Path.Direction.CW);
 canvas.clipPath(path);
 canvas.drawBitmap(
 sourceBitmap,
 new Rect(0, 0, sourceBitmap.getWidth(), sourceBitmap.getHeight()),
 new Rect(0, 0, targetWidth, targetHeight),
 null);
 ImageView imageView = (ImageView)findViewById(R.id.my_image_view);
 imageView.setImageBitmap(targetBitmap);

4
2017-10-02 18:10



Bạn thiết lập đường dẫn đến rectf "rect", nhưng không định nghĩa nó. Làm thế nào để bạn tính toán kích thước của clipping rect để đúng clip trung tâm của bitmap? I E. không kẹp từ góc ra. - MarkPowell
Cách tiếp cận để sử dụng Bitmap.createBitmap có hình ảnh nguồn sẽ hiệu quả hơn rất nhiều trừ khi bạn cần chỉnh sửa bitmap thêm. Vì nó tạo ra một bitmap không thay đổi, nó không phải tạo một bản sao. (trừ khi nguồn có thể thay đổi) - Olof Hedman
rectf là gì? xin hãy trả lời - MD TAHMID HOSSAIN
Mã này hoạt động cho hình ảnh tỷ lệ không dành cho cây trồng! - Mayur R. Amipara
coderzheaven.com/2011/03/15/crop-an-image-in-android - Swapnil