ใน Android เนื่องจากความหลากหลายของโทรศัพท์มือถือที่มีพิกเซลที่แตกต่างกันสำหรับรูปภาพจะมีความแตกต่างในการแสดงโทรศัพท์มือถือที่แตกต่างกันเนื่องจากพิกเซลที่แตกต่างกัน
มีความต้องการในการเติมทั้งหน้าจอด้วยความกว้างของรูปภาพและแสดง
สิ่งที่เรามักจะทำเพื่อประมวลผลภาพในสองวิธีต่อไปนี้
กำหนดแอตทริบิวต์ layout_parent = "match_parent" และ layout_parent = "WRAP_CONTENT" ผ่าน <AmageView> และใช้แอตทริบิวต์ ScaleType ของ <AmageView> สำหรับการปรับขนาด
- scaleType = "fitxy": เมื่อตั้งค่าเป็นคุณสมบัตินี้มันจะทำให้ภาพยืดในแนวนอนทำให้ภาพผิดรูปและหากมีแบบอักษรบนภาพแล้วนี่จะเป็นสิ่งที่ไม่ดี
- scaleType = "centercrop": ควรปรับขนาดในอัตราส่วนเดียวกัน แต่มันน่าอายมากมันยังไม่ทำงาน เมื่อประมวลผลภาพขนาดของภาพจะได้รับก่อนจากนั้นความกว้างและความสูงของภาพจะถูกกำหนดก่อนที่จะปรับขนาด ด้วยวิธีนี้หลังจากช่วงของภาพถูกกำหนดจุดกึ่งกลางของภาพจะถูกปรับขนาดเท่า ๆ กันจนกว่าความกว้างจะเติมเต็มหน้าจออย่างสมบูรณ์ นี่เป็นเรื่องน่าอายมากส่วนบนและล่างของภาพจะถูกตัดออกดังนั้นภาพจึงไม่ปรากฏขึ้นอย่างเต็มที่และยังไม่ใช่สิ่งที่เราต้องการ
วิธีการของฉันคือการรับภาพหลังจากปรับขนาดในรหัสแล้วเพิ่มภาพโดยการตั้งค่า backgroud ซึ่งแก้ปัญหา จากนั้นรหัสด้านบน:
// รับความละเอียดของภาพรับความกว้าง DisplayMetrics DM = ใหม่ DisplayMetrics (); getWindowManager (). getDefaultDisplay (). getMetrics (DM); int mscreenwidth = dm.widthpixels; // รับความละเอียดหน้าจอความกว้าง int mscreenheight = dm.heightpixels; // โหลดภาพบิตแมปบิตแมป = bitmapfactory.decoderesource (getResources (), r.drawable.bank_help); int bitmapwidth = bitmap.getWidth (); int bitmapheight = bitmap.getheight (); // รับอัตราส่วนความกว้างของภาพลอย num = mscreenwidth /(ลอย) bitmapwidth; เมทริกซ์เมทริกซ์ = เมทริกซ์ใหม่ (); matrix.postscale (num, num); // สร้างบิตแมปบิตแมปบิตแมป resizeBitMap = bitmap.createBitMap (บิตแมป, 0, 0, bitmapwidth, bitmapheight, เมทริกซ์, จริง);
รหัสข้างต้นแบ่งออกเป็นขั้นตอนต่อไปนี้
1. รับความละเอียดหน้าจอ
2. รับภาพและวัดความกว้างและความสูงของภาพ
3. รับอัตราส่วนซูมที่สอดคล้องกันผ่านความกว้างของหน้าจอ/ความกว้างของภาพ
4. สร้างวัตถุเมทริกซ์และกำหนดสเกล (PS: สิ่งนี้ดีมากและวัตถุยังใช้ในการปรับเปลี่ยนเป็นสีไล่ระดับสีด้านหน้า)
5. สร้างภาพผ่านวิธี Bitmap.CreateTebitMap () (PS: พารามิเตอร์สุดท้ายจะต้องส่งผ่านจริงหากผ่านเท็จภาพที่ถูกซูมจะไม่แสดงอย่างชัดเจน)
ข้างต้นเป็นการแนะนำการดำเนินการที่เกี่ยวข้องกับการประมวลผลภาพ Java ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคน