Tham số bộ lọc để tạoScaledBitmap làm gì?


210

Tuyên bố android.graphics.Bitmap.createScaledBitmap

public static Bitmap createScaledBitmap
  (Bitmap src, int dstWidth, int dstHeight, boolean filter)

Tuy nhiên, tài liệu không giải thích bất kỳ tham số nào. Tất cả chúng đều khá rõ ràng ngoại trừ boolean filter. Có ai biết nó làm gì không?

Câu trả lời:


86

Việc tìm hiểu nhanh qua mã nguồn SKIA chỉ ra rằng (ít nhất là theo mặc định) cờ LỌC khiến nó thực hiện phép nội suy song tuyến tính đơn giản. Kiểm tra Wikipedia hoặc tài liệu tham khảo đồ họa yêu thích của bạn để xem hậu quả mong đợi là gì. Theo truyền thống, bạn muốn thực hiện phép nội suy song tuyến hoặc nhị phân khi tăng kích thước hình ảnh và tính trung bình diện tích khi thu nhỏ hình ảnh. Tôi có ấn tượng (mặc dù tôi rất vui khi được sửa) rằng Android / Skia thực hiện việc lấy mẫu đơn giản khi thu nhỏ mà không lọc, do đó bạn có thể nhận được kết quả tốt hơn từ việc lọc ngay cả khi thu nhỏ. (Có một phương pháp thay thế để thu nhỏ kích thước chất lượng cao bằng phép nội suy, liên quan đến việc thực hiện một loạt giảm tỷ lệ 50%. Xem http://today.java.net/pub/a/today/2007/04/03/perils-of- hình ảnh-gotcaledinstance.html để biết chi tiết.)


5
Nó làm gì nếu bạn vượt qua nó sai? Người hàng xóm gần nhất?
clahey

Ngoài ra, bạn có biết trung bình khu vực đó có làm trung bình nếu bạn vượt qua bộ lọc = true không?
clahey

Bạn nên thêm một hình ảnh để cảm nhận sự khác biệt là gì, thay vì tham khảo các nguồn bên ngoài. Liên kết chết, nguồn biến mất.
Maarten

253

Để mở rộng về câu trả lời của Karan: Theo nguyên tắc chung bạn sẽ không thấy bất kỳ sự khác biệt nếu bạn đang nhân rộng hình ảnh của bạn xuống , nhưng bạn sẽ nếu bạn đang nhân rộng nó lên .

Vượt qua filter = falsesẽ dẫn đến một hình ảnh khối, pixellated.

Vượt qua filter = truesẽ cho bạn các cạnh mượt mà hơn.

Tuy nhiên, như EIYeante đã chỉ ra trong các bình luận, bạn vẫn có thể thấy một sự khác biệt. Đây là hình ảnh ví dụ của họ.


6
@Mirko - nah, không sao đâu: điều này sẽ mang lại cho tôi huy hiệu Dân túy bất cứ lúc nào. :)
teedyay

@ElYeante - bạn có một ví dụ không? Một số hình ảnh đầu vào và đầu ra sẽ là tuyệt vời. Cảm ơn.
teedyay

8
@teedyay xem ví dụ này: dl.dropboxusercontent.com/u/18446310/ Khăn Ảnh gốc có độ phân giải 1232x2048. Tôi đang thực hiện một chương trình lừa đảo nặng nề với mã này: bm = MediaStore.Images.Media.getBitmap(this.getContentResolver(), intent.getData()); resizedBitmap = Bitmap.createScaledBitmap(bm, 150, 150, true); resizedBitmap.compress(Bitmap.CompressFormat.JPEG, 95, out);Tôi chỉ thay đổi tham số bộ lọc.
ElYeante

2
lá cờ này là sai lệch. Làm thế nào chúng ta có thể giảm mẫu với làm mịn trước khi lấy mẫu lại để ngăn ngừa khử răng cưa?
Sam

1
Liên kết đã bị hỏng @teedyay
Sagar

2

Bộ lọc sẽ đặt FILTER_BITMAP_FLAG để vẽ ảnh hưởng đến việc lấy mẫu bitmap khi chúng được chuyển đổi dựa trên giá trị mà bạn cung cấp.


2
Nó có ảnh hưởng gì đến việc lấy mẫu bitmap?
clahey

Tôi không biết nhiều về lấy mẫu bitmap, bạn có thể kiểm tra trang wiki sau để biết chi tiết. vi.wikipedia.org/wiki/Resampling_%28bitmap%29
Karan

"ảnh hưởng đến việc lấy mẫu bitmap" chính xác là gì? Đó là một hiệu ứng tốt hay xấu?
William Denniss

@Willian Denniss: Kiểm tra nhận xét trên. Tôi không biết chi tiết và tôi chưa thử điều này.
Karan

0

Đến bữa tiệc muộn một chút, nhưng tôi nghĩ một số hình ảnh mẫu có thể làm rõ vấn đề.

API của Android không chỉ định loại bộ lọc nào sẽ được áp dụng, vì vậy tôi đoán câu hỏi là: bạn có muốn các pixel của mình giữ nguyên như vậy không (như bạn muốn trong nghệ thuật 8 bit) hoặc có thể áp dụng chuyển đổi cho làm cho hình ảnh trở nên ngon miệng hơn (như bạn muốn trong ảnh).

Có một câu hỏi tổng quát hơn về việc và cách lọc trên superuser .

Jeff Atwood nói:

Nói chung, bạn muốn có một hiệu ứng làm sắc nét nhẹ khi làm cho một hình ảnh lớn hơn thành một hình ảnh nhỏ hơn và một hiệu ứng làm mờ nhẹ khi làm cho một hình ảnh nhỏ hơn thành một hình ảnh lớn hơn.

bộ lọc hình ảnh so sánh

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.