Vì vậy, sau khi xem (và sử dụng) các câu trả lời khác, dường như tất cả chúng đều xử lý ColorDrawable
và PaintDrawable
rất tệ. (Đặc biệt là trên kẹo mút) dường như Shader
s đã được điều chỉnh nên các khối màu không được xử lý chính xác.
Tôi đang sử dụng mã sau đây:
public static Bitmap drawableToBitmap(Drawable drawable) {
if (drawable instanceof BitmapDrawable) {
return ((BitmapDrawable) drawable).getBitmap();
}
// We ask for the bounds if they have been set as they would be most
// correct, then we check we are > 0
final int width = !drawable.getBounds().isEmpty() ?
drawable.getBounds().width() : drawable.getIntrinsicWidth();
final int height = !drawable.getBounds().isEmpty() ?
drawable.getBounds().height() : drawable.getIntrinsicHeight();
// Now we check we are > 0
final Bitmap bitmap = Bitmap.createBitmap(width <= 0 ? 1 : width, height <= 0 ? 1 : height,
Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
drawable.draw(canvas);
return bitmap;
}
Không giống như những người khác, nếu bạn gọi setBounds
vào Drawable
trước khi yêu cầu biến nó thành bitmap, nó sẽ vẽ bitmap ở kích thước chính xác!