พารามิเตอร์ตัวกรองเพื่อ createScaledBitmap ทำอะไรได้บ้าง


210

การประกาศของandroid.graphics.Bitmap.createScaledBitmapคือ

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

อย่างไรก็ตามเอกสารไม่ได้อธิบายพารามิเตอร์ใด ๆ boolean filterทั้งหมดของพวกเขาจะสวยชัดเจนยกเว้น ไม่มีใครรู้ว่ามันทำอะไร?

คำตอบ:


86

การขุดอย่างรวดเร็วผ่านซอร์สโค้ด SKIA บ่งชี้ว่า (อย่างน้อยตามค่าเริ่มต้น) การตั้งค่าสถานะ FILTER ทำให้การแก้ไข bilinear ตรงไปตรงมา ตรวจสอบ Wikipedia หรือภาพกราฟิกอ้างอิงที่คุณชื่นชอบเพื่อดูผลลัพธ์ที่คาดหวัง ตามเนื้อผ้าคุณต้องการทำการแก้ไขทวิภาคหรือ bicubic เมื่อขยายขนาดรูปภาพและค่าเฉลี่ยพื้นที่เมื่อลดขนาดรูปภาพ ฉันได้รับความประทับใจ (แม้ว่าฉันจะดีใจที่ได้รับการแก้ไข) ว่า Android / Skia ทำการสุ่มอย่างง่าย ๆ เมื่อลดขนาดโดยไม่ต้องกรองดังนั้นคุณจึงมีแนวโน้มที่จะได้รับผลลัพธ์ที่ดีขึ้นจากการกรองแม้ในขณะที่ลดขนาด (มีวิธีอื่นสำหรับรับการลดขนาดคุณภาพสูงด้วยการแก้ไขที่เกี่ยวข้องกับการลดขนาดชุด 50% ดูhttp://today.java.net/pub/a/today/2007/04/03/perils-of- ภาพ getscaledinstance.html สำหรับรายละเอียด)


5
มันจะทำอย่างไรถ้าคุณส่งมันผิด? เพื่อนบ้านที่ใกล้ที่สุด?
clahey

นอกจากนี้คุณรู้หรือไม่ว่ามันกำลังทำการเฉลี่ยพื้นที่ถ้าคุณผ่านตัวกรอง = จริง
clahey

คุณควรเพิ่มภาพเพื่อให้เข้าใจถึงความแตกต่างคืออะไรแทนที่จะอ้างอิงแหล่งภายนอก ลิงค์ตายแหล่งที่มาหายไป
Maarten

253

หากต้องการขยายคำตอบของ Karan: ตามกฎทั่วไปคุณจะไม่เห็นความแตกต่างถ้าคุณลดขนาดรูปภาพของคุณลงแต่คุณจะทำได้ถ้าคุณขยายขนาดขึ้นขึ้น

ผ่าน filter = falseจะส่งผลให้รูปภาพที่มีการจัดเรียงเป็นพิกเซล

ผ่าน filter = trueจะทำให้ขอบของคุณราบรื่นยิ่งขึ้น

อย่างไรก็ตาม EIYeante ชี้ให้เห็นในความคิดเห็นคุณอาจยังเห็นความแตกต่าง นี่คือภาพตัวอย่างของพวกเขา


6
@Mirko - ไม่เป็นไร: นี่น่าจะทำให้ฉันได้รับตรา Populist ทุกนาที :)
teedyay

@ElYeante - คุณมีตัวอย่างหรือไม่ ภาพอินพุตและเอาท์พุตบางภาพอาจยอดเยี่ยมมาก ขอบคุณ
teedyay

8
@teedyay ดูตัวอย่างนี้: dl.dropboxusercontent.com/u/18446310/… ภาพต้นฉบับมีความละเอียด 1232x2048 ฉันกำลังทำ donwscaling มากด้วยรหัสนี้: bm = MediaStore.Images.Media.getBitmap(this.getContentResolver(), intent.getData()); resizedBitmap = Bitmap.createScaledBitmap(bm, 150, 150, true); resizedBitmap.compress(Bitmap.CompressFormat.JPEG, 95, out);ฉันแค่เปลี่ยนพารามิเตอร์ตัวกรอง
ElYeante

2
ธงนี้ทำให้เข้าใจผิด เราจะลดขนาดการปรับให้เรียบก่อนที่จะทำการสุ่มตัวอย่างใหม่เพื่อป้องกันการลบรอยหยัก
Sam

1
ลิงก์เสีย @teedyay
ซาก้า

2

ตัวกรองจะตั้งค่าFILTER_BITMAP_FLAGสำหรับการทาสีซึ่งมีผลต่อการสุ่มตัวอย่างบิตแมปเมื่อพวกเขาถูกเปลี่ยนตามค่าที่คุณให้


2
ผลกระทบอะไรที่มีต่อการสุ่มตัวอย่างบิตแมป
clahey

ฉันไม่รู้มากเกี่ยวกับการสุ่มตัวอย่างบิตแมปคุณสามารถตรวจสอบหน้าวิกิต่อไปนี้เพื่อดูรายละเอียด en.wikipedia.org/wiki/Resampling_%28bitmap%29
Karan

"ส่งผลกระทบต่อการสุ่มตัวอย่างบิตแมป" ในสิ่งที่แน่นอน มันเป็นผลดีหรือไม่ดี?
William Denniss

@Willian Denniss: ตรวจสอบความคิดเห็นด้านบน ฉันยังไม่ทราบรายละเอียดและยังไม่ได้ลอง
Karan

0

สายไปงานเลี้ยง แต่ฉันคิดว่าภาพตัวอย่างบางอย่างอาจชี้แจงปัญหา

API ของ Android ไม่ได้ระบุชนิดของตัวกรองที่จะนำมาใช้ดังนั้นฉันคิดว่าคำถามคือ: คุณต้องการให้พิกเซลของคุณยังคงอยู่เหมือนเดิม (ตามที่คุณต้องการในรูปแบบ 8 บิต) หรือไม่ ทำให้ภาพน่ารับประทานยิ่งขึ้น (ตามที่คุณต้องการในรูปถ่าย)

มีคำถามทั่วไปเพิ่มเติมเกี่ยวกับวิธีการกรองsuperuser superuser

Jeff Atwood กล่าว

โดยทั่วไปแล้วคุณต้องการเอฟเฟ็กต์การปรับความคมชัดเล็กน้อยเมื่อสร้างภาพที่มีขนาดใหญ่ขึ้นให้เป็นภาพที่มีขนาดเล็กลง

ตัวกรองภาพเปรียบเทียบ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.