มันเป็นฤดูหนาวและเวลาของปีก็เริ่มที่จะเริ่มเย็น (และสำหรับผ้าโพกศีรษะสีสันสดใสเพื่อเริ่มปรากฏ ... เร็ว ๆ นี้) ลองเขียนโค้ดเพื่อทำให้ภาพประจำตัวและภาพอื่น ๆ ตรึงลงเพื่อให้เข้ากับธีม!
อินพุต
อินพุตสำหรับการส่งไปที่ความท้าทายนี้ควรเป็นภาพ (ภาพที่จะทำให้แข็ง) และตัวเลข (เกณฑ์ซึ่งจะอธิบายในภายหลัง)
คุณสามารถใส่รูปภาพในภาษาที่คุณรองรับ (พา ธ ไฟล์หรือ URL เป็นอาร์กิวเมนต์นำมาจากคลิปบอร์ดลากและวางรูปภาพ ฯลฯ ) และในรูปแบบใด ๆ ที่แสดงไว้ที่นี่ซึ่งแสดงสีใน RGB (คุณ สามารถรองรับ / ต้องการ RGBA แทนได้หากคุณต้องการ แต่นี่ไม่ใช่ข้อกำหนด)
คุณสามารถป้อนหมายเลขในแบบที่คุณต้องการได้เช่นกัน (อาร์กิวเมนต์บรรทัดคำสั่ง, STDIN, กล่องโต้ตอบอินพุต ฯลฯ ) ยกเว้นการเข้ารหัสฮาร์ดโค้ดลงในโปรแกรมของคุณ (เช่นn=10
) หากคุณใช้เส้นทางของไฟล์ / URL สำหรับภาพจะต้องมีการป้อนข้อมูลในลักษณะนี้เช่นกัน
เอาท์พุต
โปรแกรมจะต้องประมวลผลภาพตามคำอธิบายด้านล่างแล้วส่งออกในลักษณะใด ๆ ที่คุณต้องการ (ไปยังไฟล์ที่แสดงบนหน้าจอวางไว้บนคลิปบอร์ด ฯลฯ )
ลักษณะ
การส่งควรประมวลผลภาพด้วยสามขั้นตอนต่อไปนี้ n
หมายถึงหมายเลขที่โปรแกรมของคุณได้รับเป็นอินพุตพร้อมกับรูปภาพ
ใช้รัศมีเบลอ
n
กับภาพที่ป้อนโดยแทนที่ค่า R, G และ B ของแต่ละพิกเซลด้วยค่าเฉลี่ย R, G และ B ของพิกเซลทั้งหมดภายในระยะแมนฮัตตันของn
พิกเซลโดยไม่สนใจพิกัดนอกขอบเขตทั้งหมด (เช่นพิกเซลทั้งหมดที่ผลรวมของความแตกต่างใน X และความแตกต่างใน Y น้อยกว่าหรือเท่ากับn
)(หมายเหตุ: ฉันใช้ภาพเบลอแบบเกาส์สำหรับภาพด้านบนเพราะมีฟังก์ชั่นในตัวเพื่อความสะดวกดังนั้นภาพของคุณอาจดูแตกต่างออกไปเล็กน้อย)
ตั้งค่าแต่ละพิกเซลเป็นพิกเซลสุ่มภายในระยะทาง
n/2
พิกเซล ("ระยะทาง" ถูกกำหนดเช่นเดียวกับในขั้นตอนก่อนหน้า)สิ่งนี้ควรทำโดยวนลูปผ่านภาพและตั้งค่าแต่ละพิกเซลเป็นพิกเซลสุ่มในช่วงนี้ดังนั้นบางพิกเซลอาจหายไปทั้งหมดและบางส่วนอาจซ้ำกัน
การเปลี่ยนแปลงทั้งหมดจะต้องใช้พร้อมกัน กล่าวอีกนัยหนึ่งใช้ค่าเก่าของพิกเซล (หลังขั้นตอนที่ 1 แต่ก่อนหน้าขั้นตอนนี้) ไม่ใช่ค่าใหม่หลังจากตั้งค่าเป็นพิกเซลแบบสุ่ม
คูณค่า RGB "สีน้ำเงิน" ของแต่ละพิกเซล 1.5 เท่ากำหนดที่ 255 (หรือค่าสูงสุดสำหรับวงพิกเซลเท่าไหร่) และปัดเศษลง
กฎระเบียบ
คุณสามารถใช้ไลบรารีรูปภาพ / ฟังก์ชั่นที่เกี่ยวข้องกับการประมวลผลภาพที่สร้างขึ้นในภาษาของคุณ อย่างไรก็ตามคุณไม่สามารถใช้ฟังก์ชั่นใด ๆ ที่ดำเนินการหนึ่งในสามภารกิจหลักที่กล่าวถึงในคำอธิบาย ตัวอย่างเช่นคุณไม่สามารถใช้
blur
ฟังก์ชั่นได้ แต่getPixel
ฟังก์ชั่นใช้ได้นี่คือโค้ดกอล์ฟดังนั้นโค้ดที่สั้นที่สุดในหน่วยไบต์ชนะ!
dx <= n && dy <= n
การเป็นตัวแทนของระยะทางแมนฮัตตันที่ถูกต้องเป็นจริงหรือไม่?