{"id":44019,"date":"2020-04-06T20:13:26","date_gmt":"2020-04-06T11:13:26","guid":{"rendered":"https:\/\/www.charlezz.com\/?p=44019"},"modified":"2020-08-25T14:04:31","modified_gmt":"2020-08-25T05:04:31","slug":"%ec%95%88%eb%93%9c%eb%a1%9c%ec%9d%b4%eb%93%9c%ec%97%90%ec%84%9c-blur%ed%9a%a8%ea%b3%bc-%ea%b5%ac%ed%98%84%ed%95%98%ea%b8%b0-boxblur","status":"publish","type":"post","link":"https:\/\/charlezz.com\/?p=44019","title":{"rendered":"\uc548\ub4dc\ub85c\uc774\ub4dc\uc5d0\uc11c blur\ud6a8\uacfc \uad6c\ud604\ud558\uae30 : Box Blur"},"content":{"rendered":"<h1>\uc548\ub4dc\ub85c\uc774\ub4dc\uc5d0\uc11c blur\ud6a8\uacfc \uad6c\ud604\ud558\uae30<\/h1>\n<p><a href=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2020\/04\/photo-1497864979123-ef3595423b92.jpeg\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2020\/04\/photo-1497864979123-ef3595423b92-1024x683.jpeg\" alt=\"\" width=\"750\" height=\"500\" class=\"aligncenter size-large wp-image-44020\" srcset=\"https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/04\/photo-1497864979123-ef3595423b92-1024x683.jpeg 1024w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/04\/photo-1497864979123-ef3595423b92-300x200.jpeg 300w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/04\/photo-1497864979123-ef3595423b92-768x512.jpeg 768w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/04\/photo-1497864979123-ef3595423b92-360x240.jpeg 360w\" sizes=\"(max-width: 750px) 100vw, 750px\" \/><\/a><\/p>\n<p>\uc548\ub4dc\ub85c\uc774\ub4dc SDK\uc5d0\uc11c\ub294 Blur\uc5d0 \uad00\ud55c API\ub97c \uc81c\uacf5\ud558\uace0 \uc788\uc9c0 \uc54a\uae30 \ub54c\ubb38\uc5d0 \uc77c\ubc18\uc801\uc73c\ub85c <a href=\"https:\/\/medium.com\/mindorks\/android-top-blur-effects-libraries-f53b0201203c\">\ub77c\uc774\ube0c\ub7ec\ub9ac<\/a>\ub97c \uc0ac\uc6a9\ud558\uc5ec \uad6c\ud604\ud558\uac8c \ub41c\ub2e4.\u00a0<\/p>\n<p>Blur \ud6a8\uacfc\ub97c \uad6c\ud604\ud558\uae30 \uc704\ud574\uc11c\ub294 \uc774\ubbf8\uc9c0\ub97c \uad6c\uc131\ud558\ub294 \ud53d\uc140\uc5d0 \ub300\ud574\uc11c \uba3c\uc800 \uc54c\uc544\uc57c \ud55c\ub2e4.<\/p>\n<h3>\ud53d\uc140(Pixel)\uc774\ub780?<\/h3>\n<p>\ud53d\uc140\uc740 \ud654\uc18c\ub77c\uace0\ub3c4 \ud558\uba70 \ud654\uba74 \ub610\ub294 \uc774\ubbf8\uc9c0\ub97c \uad6c\uc131\ud558\ub294 \uac00\uc7a5 \uae30\ubcf8\uc774 \ub418\ub294 \ub2e8\uc704\ub2e4.<\/p>\n<div id=\"attachment_44021\" style=\"width: 382px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2020\/04\/Pixel-example.png\"><img aria-describedby=\"caption-attachment-44021\" decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2020\/04\/Pixel-example.png\" alt=\"\" width=\"372\" height=\"175\" class=\"wp-image-44021 size-full\" srcset=\"https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/04\/Pixel-example.png 372w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/04\/Pixel-example-300x141.png 300w\" sizes=\"(max-width: 372px) 100vw, 372px\" \/><\/a><\/p>\n<p id=\"caption-attachment-44021\" class=\"wp-caption-text\">[\uadf8\ub9bc1] \ud53d\uc140\ub85c \uad6c\uc131\ub418\ub294 \uc774\ubbf8\uc9c0<\/p>\n<\/div>\n<p>\uc5b4\ub5a0\ud55c \uc774\ubbf8\uc9c0\ub97c \ud06c\uac8c \ud655\ub300 \ud588\uc744 \ub54c \uc791\uc740 \uc810 \ub610\ub294 \uc0ac\uaca9\ud615\uc73c\ub85c \uad6c\uc131\ub418\uc5b4\uc788\ub294 \uac83\uc744 \ubcfc \uc218 \uc788\ub294\ub370 \uadf8\uac83\uc774 \ubc14\ub85c \ud53d\uc140\uc774\ub2e4. \ub9cc\uc57d HD\uc0ac\uc774\uc988\uc778 1280 * 720 \uc0ac\uc774\uc988\ub97c \uac16\ub294 \uc774\ubbf8\uc9c0\uac00 \uc874\uc7ac\ud55c\ub2e4\uba74, \uadf8 \uc774\ubbf8\uc9c0\ub294 921600\uac1c\uc758 \ud53d\uc140\ub85c \uad6c\uc131\ub418\uc5b4\uc788\ub294 \uc774\ubbf8\uc9c0\ub2e4.<\/p>\n<p>\ud53d\uc140\uc744 \ud45c\ud604\ud558\ub294 \ubc29\uc2dd\uc740 \ub2e4\uc591\ud558\uc9c0\ub9cc \uc77c\ubc18\uc801\uc73c\ub85c\ub294 ARGB_8888 \ubc29\uc2dd\uc744 \uc0ac\uc6a9\ud55c\ub2e4.<br \/>\nARGB_8888\uc5d0\uc11c ARGB\ub294 Alpha(\ud22c\uba85), Red(\ube68\uac15), Green(\ub179\uc0c9), Blue(\ud30c\ub791)\uc758 \uac01 \ub450\uc74c\uc790\ub97c \ub530\uc628 \uac83\uc774\uba70, 8888\uc740 \uac01 \uc0c9\uc758 bit\uc218\ub97c \uc758\ubbf8\ud55c\ub2e4.<\/p>\n<div id=\"attachment_44022\" style=\"width: 760px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2020\/04\/argb.png\"><img aria-describedby=\"caption-attachment-44022\" decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2020\/04\/argb-1024x118.png\" alt=\"\" width=\"750\" height=\"86\" class=\"wp-image-44022 size-large\" srcset=\"https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/04\/argb-1024x118.png 1024w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/04\/argb-300x35.png 300w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/04\/argb-768x89.png 768w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/04\/argb.png 1142w\" sizes=\"(max-width: 750px) 100vw, 750px\" \/><\/a><\/p>\n<p id=\"caption-attachment-44022\" class=\"wp-caption-text\">[\uadf8\ub9bc2] \ud53d\uc140\uc758 \uad6c\uc131\uc694\uc18c<\/p>\n<\/div>\n<p>8bit = 1Byte \uc774\ubbc0\ub85c \ud55c \ud53d\uc140\uc744 \ud45c\ud604\ud558\uae30 \uc704\ud574\uc11c\ub294 8bit*4 = 4Bytes\uc758 \uba54\ubaa8\ub9ac \uacf5\uac04\uc774 \ud544\uc694\ud558\ub2e4. \uc815\uc218\ud615 int\uac00 4Bytes \uc774\ubbc0\ub85c \ud55c \ud53d\uc140\uc744 \ud45c\ud604\ud558\ub294\ub370 \ud558\ub098\uc758 int \uc790\ub8cc\ud615 \uba54\ubaa8\ub9ac\uac00 \ud560\ub2f9\ub418\uc5b4\uc57c \ud55c\ub2e4. 1280*720 \uc0ac\uc774\uc988\ub97c \uac16\ub294 \ube44\ud2b8\ub9f5 \uc774\ubbf8\uc9c0\ub97c \uba54\ubaa8\ub9ac\uc5d0 \ub85c\ub4dc\ud558\ub824\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \uc0ac\uc774\uc988\uc758 \uba54\ubaa8\ub9ac\uac00 \ud544\uc694\ud558\ub2e4.\u00a0<\/p>\n<pre class=\"lang: decode:true\">\uac00\ub85c \ud53d\uc140 \uc218 * \uc138\ub85c \ud53d\uc140 \uc218 * \ud558\ub098\uc758 \ud53d\uc140 \uc0ac\uc774\uc988\r\n= 1280 * 720 * 4Bytes = 3686400Bytes = 3600kB = 3.51MB<\/pre>\n<p>\uc0c9\uc758 \uc0bc\uc6d0\uc0c9\uc778 \ube68\uac15, \ub178\ub791, \ud30c\ub791\uc740 \uac01\uac01 1Byte\ub85c \ud45c\ud604 \ub418\uba70, 1Byte\ub294 0~255\uae4c\uc9c0 256\uac00\uc9c0\uc758 \uacbd\uc6b0\uc758 \uc218\ub97c \uac16\uae30 \ub54c\ubb38\uc5d0 256^3 = 16777216\uac00\uc9c0\uc758 \uc0c9\uc0c1 \uc870\ud569\uc774 \uac00\ub2a5\ud558\ub2e4. \uc774\ub97c 24bits \ud2b8\ub8e8\uceec\ub7ec\ub77c\uace0\ub3c4 \ud55c\ub2e4.<\/p>\n<h4>\uc0c9\uc0c1\uac12 \ubd84\ub9ac\ud558\uae30<\/h4>\n<p>\ub2e4\uc74c\uacfc \uac19\uc740 \uac12\uc744 \uac16\ub294 \ud53d\uc140\uc774 \uc788\ub2e4\uace0 \uac00\uc815\ud558\uc790.<\/p>\n<pre class=\"lang: decode:true\">11111111 11110000 00001111 10101010\u00a0<\/pre>\n<p>\uadf8\ub9bc2\ub97c \ucc38\uc870\ud588\uc744 \ub54c \ub2e4\uc74c\uacfc \uac19\uc774 \ud53d\uc140\uc758 \uad6c\uc131\uc694\uc18c\ub97c \ubd84\ub9ac\ud560 \uc218 \uc788\ub2e4.<\/p>\n<p><strong>\ud22c\uba85 = 11111111<\/strong><br \/>\n<strong>\ube68\uac15 = 11110000<\/strong><br \/>\n<strong>\ub179\uc0c9 = 00001111<\/strong><br \/>\n<strong>\ud30c\ub791 = 10101010<\/strong><\/p>\n<p>\uc774\ub97c \ucf54\ub4dc\ub85c \ubd84\ub9ac\ud558\uae30 \uc704\ud574\uc11c\ub294 \ube44\ud2b8 \uc5f0\uc0b0\uc790\ub97c \uc0ac\uc6a9\ud55c\ub2e4<\/p>\n<pre class=\"lang:null decode:true lang:\">val pixel:Int = ... \/\/11111111 11110000 00001111 10101010\r\n\r\nval alpha:Int = pixel ushr 24\r\nval red = pixel ushr 16 and 0xFF\r\nval green:Int = pixel ushr 8 and 0xFF\r\nval blue:Int = pixel and 0xFF\r\n<\/pre>\n<p>\uc55e\uc758 \ucf54\ub4dc\uc5d0 \ub300\ud55c \ubd80\uc5f0\uc124\uba85\uc744 \ud558\uc790\uba74,<\/p>\n<p>\ud22c\uba85\ub3c4 \uac12\ub9cc \uc5bb\uae30 \uc704\ud574\uc11c RGB \uc131\ubd84\uc740 \ubaa8\ub450 \uc81c\uac70 \ud574\uc57c\ud55c\ub2e4. \uadf8\ub7ec\ubbc0\ub85c \ud53d\uc140\uac12\uc744 \uc624\ub978\ucabd\uc73c\ub85c 24\ubc88 \ube44\ud2b8 \uc26c\ud504\ud305\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ud22c\uba85\ub3c4 \uac12\uc744 \uc5bb\uc744 \uc218 \uc788\ub2e4.<\/p>\n<pre class=\"lang:null decode:true lang:\">11111111 11110000 00001111 10101010 \/\/\ud53d\uc140\r\n01111111 11111000 00000111 11010101 \/\/1\ubc88\uc9f8, \uc624\ub978\ucabd\uc73c\ub85c \ube44\ud2b8 \uc26c\ud504\ud305\r\n00111111 11111100 00000011 11101010 \/\/2\ubc88\uc9f8, \uc624\ub978\ucabd\uc73c\ub85c \ube44\ud2b8 \uc26c\ud504\ud305\r\n00011111 11111110 00000001 11110101 \/\/3\ubc88\uc9f8, \uc624\ub978\ucabd\uc73c\ub85c \ube44\ud2b8 \uc26c\ud504\ud305\r\n...\r\n00000000 00000000 00000000 11111111 \/\/24\ubc88\uc9f8, \uc624\ub978\ucabd\uc73c\ub85c \ube44\ud2b8 \uc26c\ud504\ud305\ud55c \uacb0\uacfc<\/pre>\n<p>\ube68\uac04\uc0c9\uc5d0 \ud574\ub2f9\ud558\ub294 11110000\ub9cc\u00a0 \ubd84\ub9ac\ud558\uae30 \uc704\ud574 \uc624\ub978\ucabd\uc73c\ub85c 16\ubc88 \ube44\ud2b8 \uc26c\ud504\ud305\uc744 \ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \uacb0\uacfc\ub97c \uc5bb\ub294\ub2e4.<\/p>\n<pre class=\"lang: decode:true\">00000000 00000000 11111111 11110000 \/\/ \ud53d\uc140\uac12\uc744 16\ubc88 \uc26c\ud504\ud305\ud55c \uacb0\uacfc<\/pre>\n<p>\uc5ec\uae30\uc11c 0xFF\uc640 and\uc5f0\uc0b0\uc790\ub85c \ub9c8\uc2a4\ud0b9\uc744 \ud558\uc5ec \ube68\uac15\uc0c9 \uc131\ubd84\ub9cc \ubc1c\ub77c\ub0b4\uc790. \ucc38\uace0\ub85c 0xFF\ub294 16\uc9c4\uc218\uc774\uba70, 10\uc9c4\uc218\ub85c\ub294 255, 2\uc9c4\uc218\ub85c\ub294 11111111\uc774\ub2e4.<\/p>\n<pre class=\"lang:null decode:true lang:\">00000000 00000000 00000000 11111111 \/\/ 0xFF\r\n00000000 00000000 11111111 11110000 \/\/ \ud53d\uc140\uac12\uc744 16\ubc88 \uc624\ub978\ucabd\uc73c\ub85c \uc26c\ud504\ud305\ud55c \uacb0\uacfc\r\n\u3161\u3161\u3161\u3161\u3161\u3161\u3161\u3161\u3161\u3161\u3161\u3161\u3161\u3161\u3161\u3161\u3161\u3161\u3161\u3161\u3161\u3161\u3161\u3161\u3161\/\/ and\uc5f0\uc0b0\uc790\ub85c \ub9c8\uc2a4\ud0b9\r\n00000000 00000000 00000000 11110000 \/\/ \ube68\uac15\uc0c9 \uc131\ubd84<\/pre>\n<p>\ub179\uc0c9\uacfc \ud30c\ub791\uc0c9\ub3c4 \ub3d9\uc77c\ud55c \ubc29\ubc95\uc73c\ub85c \uc131\ubd84\uc744 \ubd84\ub9ac \ud560 \uc218 \uc788\ub2e4.<\/p>\n<h2>Box Blur \uad6c\ud604\ud558\uae30<\/h2>\n<p>\ubaa8\ub4e0 \uc774\ubbf8\uc9c0\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \ud53d\uc140\ub4e4\ub85c \uad6c\uc131\ub41c\ub2e4.<\/p>\n<div id=\"attachment_44023\" style=\"width: 371px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2020\/04\/0__klxuhghFqIcwp_0.png\"><img aria-describedby=\"caption-attachment-44023\" decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2020\/04\/0__klxuhghFqIcwp_0.png\" alt=\"\" width=\"361\" height=\"360\" class=\"wp-image-44023 size-full\" srcset=\"https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/04\/0__klxuhghFqIcwp_0.png 361w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/04\/0__klxuhghFqIcwp_0-150x150.png 150w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/04\/0__klxuhghFqIcwp_0-300x300.png 300w\" sizes=\"(max-width: 361px) 100vw, 361px\" \/><\/a><\/p>\n<p id=\"caption-attachment-44023\" class=\"wp-caption-text\">[\uadf8\ub9bc3] \ud53d\uc140\ub85c \ud45c\ud604\ub418\ub294 \uc774\ubbf8\uc9c0<\/p>\n<\/div>\n<p>\uc774\ubbf8\uc9c0\uc5d0 \ube14\ub7ec\ud6a8\uacfc\ub97c \uc8fc\uae30 \uc704\ud574\uc11c\ub294 \uac01 \ud53d\uc140\uc758 \uc0c9\uc0c1\uc5d0 \ud574\ub2f9\ud558\ub294 \uac12\ub4e4\uc774 \ubcc0\uacbd\ub418\uc5b4\uc57c \ud55c\ub2e4. Box Blur\ub294 \uc8fc\ubcc0 \uc778\uc811\ud558\ub294 \ud53d\uc140\ub4e4\uc758 \ud3c9\uade0 \uc0c9\uc0c1\uac12\uc73c\ub85c \ubcc0\uacbd\ud558\ub294 \uc54c\uace0\ub9ac\uc998\uc774\ub2e4.<\/p>\n<p>\uc5b4\ub5a0\ud55c \ud53d\uc140(P5)\uc5d0 \ub300\ud574 \ubc18\uacbd(Radius) 1\uc5d0 \ud574\ub2f9\ud558\ub294 \uc8fc\ubcc0 \ud53d\uc140\ub4e4\uc740 \ub2e4\uc74c \uadf8\ub9bc\uacfc \uac19\uc740 \ud615\ud0dc\ub97c \uac00\uc9c8 \uc218 \uc788\ub2e4.<\/p>\n<table style=\"width: 37.3281%; border-collapse: collapse; border-style: solid; border-color: #000000;\" height=\"267\">\n<tbody>\n<tr style=\"border-color: #000000; border-style: solid;\">\n<td style=\"width: 33.3333%; border-style: solid; border-color: #000000; text-align: center;\"><span style=\"font-size: 24pt;\">P1<\/span><\/td>\n<td style=\"width: 33.3333%; border-style: solid; border-color: #000000; text-align: center;\"><span style=\"font-size: 24pt;\">P2<\/span><\/td>\n<td style=\"width: 65.6079%; border-style: solid; border-color: #000000; text-align: center;\"><span style=\"font-size: 24pt;\">P3<\/span><\/td>\n<\/tr>\n<tr style=\"border-color: #000000; border-style: solid;\">\n<td style=\"width: 33.3333%; border-style: solid; border-color: #000000; text-align: center;\"><span style=\"font-size: 24pt;\">P4<\/span><\/td>\n<td style=\"width: 33.3333%; border-style: solid; border-color: #000000; text-align: center;\"><span style=\"font-size: 24pt;\">P5<\/span><\/td>\n<td style=\"width: 65.6079%; border-style: solid; border-color: #000000; text-align: center;\"><span style=\"font-size: 24pt;\">P6<\/span><\/td>\n<\/tr>\n<tr style=\"border-color: #000000; border-style: solid;\">\n<td style=\"width: 33.3333%; border-style: solid; border-color: #000000; text-align: center;\"><span style=\"font-size: 24pt;\">P7<\/span><\/td>\n<td style=\"width: 33.3333%; border-style: solid; border-color: #000000; text-align: center;\"><span style=\"font-size: 24pt;\">P8<\/span><\/td>\n<td style=\"width: 65.6079%; border-style: solid; border-color: #000000; text-align: center;\"><span style=\"font-size: 24pt;\">P9<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\ud53d\uc140 P5\uc5d0 Blur\ud6a8\uacfc\ub97c \uc801\uc6a9\ud558\uae30 \uc704\ud574\uc11c\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uc5f0\uc0b0\uc744 \ud560 \uc218 \uc788\ub2e4.<\/p>\n<pre class=\"lang: decode:true\">\uc0c8\ub85c\uc6b4 P5 \uac12 = (P1+P2+P3+P4+P5+P6+P7+P8+P9)\/9<\/pre>\n<p>\uc774\ub7ec\ud55c \uc778\uc811\ud53d\uc140\uc5d0 \ub300\ud55c \ud3c9\uade0\uac12\uc744 \ubaa8\ub4e0 \ud53d\uc140\uc5d0 \ub300\ud574 \uc67c\ucabd\uc5d0\uc11c \uc624\ub978\ucabd \ubc29\ud5a5\uc73c\ub85c \uadf8\ub9ac\uace0 \uc704\uc5d0 \ubd80\ud130 \uc544\ub798\ubc29\ud5a5\uc73c\ub85c \ud558\ub098\uc529 \uc801\uc6a9\ud558\uc790.<\/p>\n<div id=\"attachment_44026\" style=\"width: 330px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2020\/04\/1_tmF2yCdsgtCDVf5yYPicdQ.png\"><img aria-describedby=\"caption-attachment-44026\" decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2020\/04\/1_tmF2yCdsgtCDVf5yYPicdQ.png\" alt=\"\" width=\"320\" height=\"317\" class=\"wp-image-44026 size-full\" srcset=\"https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/04\/1_tmF2yCdsgtCDVf5yYPicdQ.png 320w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/04\/1_tmF2yCdsgtCDVf5yYPicdQ-150x150.png 150w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/04\/1_tmF2yCdsgtCDVf5yYPicdQ-300x297.png 300w\" sizes=\"(max-width: 320px) 100vw, 320px\" \/><\/a><\/p>\n<p id=\"caption-attachment-44026\" class=\"wp-caption-text\">[\uadf8\ub9bc4] \uc774\ubbf8\uc9c0\uc5d0 \ube14\ub7ec\ud6a8\uacfc \uc801\uc6a9\ud558\uae30<\/p>\n<\/div>\n<p>\ubaa8\ub4e0 \ud53d\uc140\uac12\uc744 \uc778\uc811\ud53d\uc140\uc758 \ud3c9\uade0\uac12\uc73c\ub85c \uc801\uc6a9\ud558\uace0\ub098\uba74, Blur\ud6a8\uacfc\uac00 \uc801\uc6a9\ub41c \uc0c8\ub85c\uc6b4 \ube44\ud2b8\ub9f5 \uc774\ubbf8\uc9c0\ub97c \uc5bb\uc744 \uc218 \uc788\ub2e4.<\/p>\n<p>\ub9cc\uc57d \ub354 \ud750\ub9bf\ud55c \uc774\ubbf8\uc9c0\ub97c \ub9cc\ub4e4\uace0 \uc2f6\ub2e4\uba74 \uc778\uc811\ud55c \ud53d\uc140 \ubc18\uacbd\uc744 \ub298\ub824\uc11c \uc5f0\uc0b0\ud558\uba74\ub41c\ub2e4.<\/p>\n<table style=\"width: 61.4355%; border-collapse: collapse; border-style: solid; border-color: #000000;\" height=\"395\">\n<tbody>\n<tr>\n<td style=\"width: 20%; border-style: solid; border-color: #000000; text-align: center;\">P1<\/td>\n<td style=\"width: 20%; border-style: solid; border-color: #000000; text-align: center;\">P2<\/td>\n<td style=\"width: 20%; border-style: solid; border-color: #000000; text-align: center;\">P3<\/td>\n<td style=\"width: 20%; border-style: solid; border-color: #000000; text-align: center;\">P4<\/td>\n<td style=\"width: 20%; border-style: solid; border-color: #000000; text-align: center;\">P5<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 20%; border-style: solid; border-color: #000000; text-align: center;\">P6<\/td>\n<td style=\"width: 20%; border-style: solid; border-color: #000000; text-align: center;\">P7<\/td>\n<td style=\"width: 20%; border-style: solid; border-color: #000000; text-align: center;\">P8<\/td>\n<td style=\"width: 20%; border-style: solid; border-color: #000000; text-align: center;\">P9<\/td>\n<td style=\"width: 20%; border-style: solid; border-color: #000000; text-align: center;\">P10<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 20%; border-style: solid; border-color: #000000; text-align: center;\">P11<\/td>\n<td style=\"width: 20%; border-style: solid; border-color: #000000; text-align: center;\">P12<\/td>\n<td style=\"width: 20%; border-style: solid; border-color: #000000; text-align: center;\">P13<\/td>\n<td style=\"width: 20%; border-style: solid; border-color: #000000; text-align: center;\">P14<\/td>\n<td style=\"width: 20%; border-style: solid; border-color: #000000; text-align: center;\">P15<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 20%; border-style: solid; border-color: #000000; text-align: center;\">P16<\/td>\n<td style=\"width: 20%; border-style: solid; border-color: #000000; text-align: center;\">P17<\/td>\n<td style=\"width: 20%; border-style: solid; border-color: #000000; text-align: center;\">P18<\/td>\n<td style=\"width: 20%; border-style: solid; border-color: #000000; text-align: center;\">P19<\/td>\n<td style=\"width: 20%; border-style: solid; border-color: #000000; text-align: center;\">P20<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 20%; border-style: solid; border-color: #000000; text-align: center;\">P21<\/td>\n<td style=\"width: 20%; border-style: solid; border-color: #000000; text-align: center;\">P22<\/td>\n<td style=\"width: 20%; border-style: solid; border-color: #000000; text-align: center;\">P23<\/td>\n<td style=\"width: 20%; border-style: solid; border-color: #000000; text-align: center;\">P24<\/td>\n<td style=\"width: 20%; border-style: solid; border-color: #000000; text-align: center;\">P25<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<pre class=\"lang: decode:true\">\uc0c8\ub85c\uc6b4 P13 \uac12 = (P1+P2+P3+...+P23+P24+p25)\/25<\/pre>\n<p><a href=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2020\/04\/www.charlezz.com-blur-box-blur-0tx-thm5n6kr1gmn7.png\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2020\/04\/www.charlezz.com-blur-box-blur-0tx-thm5n6kr1gmn7-1024x766.png\" alt=\"\" width=\"750\" height=\"561\" class=\"aligncenter wp-image-44489 size-large\" srcset=\"https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/04\/www.charlezz.com-blur-box-blur-0tx-thm5n6kr1gmn7.png 1024w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/04\/www.charlezz.com-blur-box-blur-0tx-thm5n6kr1gmn7-300x224.png 300w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/04\/www.charlezz.com-blur-box-blur-0tx-thm5n6kr1gmn7-768x575.png 768w\" sizes=\"(max-width: 750px) 100vw, 750px\" \/><\/a><\/p>\n<p>BoxBlur\uc758 \ucf54\ub4dc\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n<pre class=\"lang:null decode:true lang: \">class BoxBlur : AbstractBlur {\r\n    override fun blur(image: Bitmap, radius: Int): Bitmap {\r\n        val w = image.width\r\n        val h = image.height\r\n        val currentPixels = IntArray(w * h)\r\n        val newPixels = IntArray(w * h)\r\n        image.getPixels(currentPixels, 0, w, 0, 0, w, h)\r\n        blurProcess(w, h, currentPixels, newPixels, radius)\r\n        return Bitmap.createBitmap(newPixels, w, h, Bitmap.Config.ARGB_8888)\r\n    }\r\n\r\n    private fun blurProcess(\r\n        w: Int,\r\n        h: Int,\r\n        currentPixels: IntArray,\r\n        newPixels: IntArray,\r\n        radius: Int\r\n    ) {\r\n        for (col in 0 until w) {\r\n            for (row in 0 until h) {\r\n                newPixels[row * w + col] = getSurroundAverage(currentPixels, col, row, h, w, radius)\r\n            }\r\n        }\r\n    }\r\n\r\n    private fun getSurroundAverage(\r\n        currentPixels: IntArray,\r\n        col: Int,\r\n        row: Int,\r\n        h: Int,\r\n        w: Int,\r\n        radius: Int\r\n    ): Int {\r\n        val originalPixel = currentPixels[row * w + col]\r\n        val alpha: Int = originalPixel ushr 24\r\n        val originalRed = originalPixel ushr 16 and 0xFF\r\n        val originalGreen = originalPixel ushr 8 and 0xFF\r\n        val originalBlue = originalPixel and 0xFF\r\n\r\n        var sumOfRed = originalRed\r\n        var sumOfGreen = originalGreen\r\n        var sumOfBlue = originalBlue\r\n\r\n        for (y in (row - radius..row + radius)) {\r\n            for (x in col - radius..col + radius) {\r\n                if (y &lt; 0 || y &gt; h - 1 || x &lt; 0 || x &gt; w - 1) {\r\n                    \/\/ \uc774\ubbf8\uc9c0 \uac00\uc7a5\uc790\ub9ac\ub97c \ubc97\uc5b4\ub098\ub294 \uacc4\uc0b0\uc740 originalPixel \uac12\uc744 \ub354\ud55c\ub2e4.\r\n                    sumOfRed += originalRed;\r\n                    sumOfGreen += originalGreen;\r\n                    sumOfBlue += originalBlue\r\n                } else if (y == row &amp;&amp; x == col) {\r\n                    \/\/ originalPixel\uc740 \uc2dc\uc791\ud560 \ub54c \uc774\ubbf8 \ub354 \ud588\uc74c\r\n                } else {\r\n                    val sidePixel = currentPixels[y * w + x]\r\n                    sumOfRed += sidePixel ushr 16 and 0xFF\r\n                    sumOfGreen += sidePixel ushr 8 and 0xFF\r\n                    sumOfBlue += sidePixel and 0xFF\r\n                }\r\n            }\r\n        }\r\n\r\n        val denominator = (radius * 2 + 1) * (radius * 2 + 1)\r\n\r\n        return ((alpha and 0xff) shl 24) or\r\n                ((sumOfRed \/ denominator) and 0xff shl 16) or\r\n                ((sumOfGreen \/ denominator) and 0xff shl 8) or\r\n                ((sumOfBlue \/ denominator) and 0xff)\r\n    }\r\n\r\n    override fun getType() = BlurType.BOX_BLUR\r\n\r\n}<\/pre>\n<p>&nbsp;<\/p>\n<p>\uc9c0\uae08\uae4c\uc9c0 \uac00\uc7a5 \uae30\ubcf8\uc801\uc778 BoxBlur\uc5d0 \ub300\ud574\uc11c \uc54c\uc544 \ubcf4\uc558\ub2e4.\u00a0<\/p>\n<p>Box Blur\ub294 \ub450\uac00\uc9c0 \ubb38\uc81c\uc810\uc774 \uc788\ub2e4.<\/p>\n<p>\uccab\ubc88\uc9f8, radius\uac12\uc5d0 \ube44\ub840\ud558\uc5ec \uc5f0\uc0b0\ub7c9\uc774 \uc99d\uac00\ud558\uae30 \ub54c\ubb38\uc5d0 \uacb0\uacfc\ubb3c\uc744 \uc5bb\ub294\ub370 \uc2dc\uac04\uc774 \uc624\ub798\uac78\ub9b0\ub2e4.<br \/>\n\ub450\ubc88\uc9f8, \uc6d0\ubcf8 \uc774\ubbf8\uc9c0\uc640 \ube44\uad50\ud588\uc744 \ub54c \ud754\ud788 \uacc4\ub2e8\ud604\uc0c1(?)\uc774\ub77c\uace0 \ubd88\ub9ac\ub294 \ud53d\uc140\ud654\uac00 \uc798 \ubcf4\uc778\ub2e4.<\/p>\n<p><a href=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2020\/04\/1_jHyasvl_a0FAqHVguo_mhw.png\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2020\/04\/1_jHyasvl_a0FAqHVguo_mhw.png\" alt=\"\" width=\"518\" height=\"369\" class=\"aligncenter size-full wp-image-44028\" srcset=\"https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/04\/1_jHyasvl_a0FAqHVguo_mhw.png 518w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/04\/1_jHyasvl_a0FAqHVguo_mhw-300x214.png 300w\" sizes=\"(max-width: 518px) 100vw, 518px\" \/><\/a><\/p>\n<h2>\ucd5c\uc801\ud654\ub41c Box Blur \uad6c\ud604\ud558\uae30<\/h2>\n<p>\uc55e\uc5d0\uc11c \uc5b8\uae09\ud55c \ub450\uac00\uc9c0 \ubb38\uc81c\uc810 \uc911 \ud558\ub098\uc778 \uc2dc\uac04 \ubb38\uc81c\ub97c \ud574\uacb0\ud574\ubcf4\uc790.<\/p>\n<p>Box Blur\uc54c\uace0\ub9ac\uc998\uc740 radius\uc758 \ud06c\uae30\uac00 \ucee4\uc9c8 \ub54c \uc5f0\uc0b0\ub7c9\ub3c4 \ube44\ub840\ud558\uc5ec \ucee4\uc9c0\ub294 \ubb38\uc81c\uc810\uc744 \uac00\uc9c0\uace0 \uc788\uc5c8\ub2e4. \uc774\ub97c \ud574\uacb0\ud558\uae30 \uc704\ud574 \ub2e4\uc74c\uacfc \uac19\uc774 \uc778\uc811\ud55c \ud53d\uc140\uc758 \ud3c9\uade0\uac12\uc744 \uad6c\ud558\ub294 \ubc29\ubc95\uc744 \uac1c\uc120\ud574\ubcf4\uc790.<\/p>\n<ol>\n<li>\uc9c0\uc815\ub41c \ubc18\uacbd(radius) \ub0b4\uc5d0\uc11c \uc218\ud3c9\uc73c\ub85c \uc778\uc811\ud55c \ud53d\uc140\uc758 \ud3c9\uade0\uc744 \uacc4\uc0b0\ud558\uae30 \uc704\ud574 \ud589\ub2e8\uc704\ub85c \ud53d\uc140\uc744 \uacc4\uc0b0\ud55c\ub2e4.<\/li>\n<li>\uadf8\ub7f0 \ub2e4\uc74c \uccab\ubc88\uc9f8\uc5d0\uc11c \uc5bb\uc5b4\uc9c4 \uacc4\uc0b0 \uacb0\uacfc\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc5f4 \ub2e8\uc704\ub85c \uc9c0\uc815\ub41c \ubc18\uacbd \ub0b4\uc5d0\uc11c \uc218\uc9c1\uc73c\ub85c \uc778\uc811\ud55c \ud53d\uc140\uc758 \ud3c9\uade0\uc744 \uacc4\uc0b0\ud55c\ub2e4.<\/li>\n<\/ol>\n<table style=\"width: 37.3281%; border-collapse: collapse; border-style: solid; border-color: #000000;\">\n<tbody>\n<tr style=\"border-color: #000000; border-style: solid;\">\n<td style=\"width: 33.3333%; border-style: solid; border-color: #000000; text-align: center;\"><span style=\"font-size: 24pt;\">P1<\/span><\/td>\n<td style=\"width: 33.3333%; border-style: solid; border-color: #000000; text-align: center;\"><span style=\"font-size: 24pt;\">P2<\/span><\/td>\n<td style=\"width: 65.6079%; border-style: solid; border-color: #000000; text-align: center;\"><span style=\"font-size: 24pt;\">P3<\/span><\/td>\n<\/tr>\n<tr style=\"border-color: #000000; border-style: solid;\">\n<td style=\"width: 33.3333%; border-style: solid; border-color: #000000; text-align: center;\"><span style=\"font-size: 24pt;\">P4<\/span><\/td>\n<td style=\"width: 33.3333%; border-style: solid; border-color: #000000; text-align: center;\"><span style=\"font-size: 24pt;\">P5<\/span><\/td>\n<td style=\"width: 65.6079%; border-style: solid; border-color: #000000; text-align: center;\"><span style=\"font-size: 24pt;\">P6<\/span><\/td>\n<\/tr>\n<tr style=\"border-color: #000000; border-style: solid;\">\n<td style=\"width: 33.3333%; border-style: solid; border-color: #000000; text-align: center;\"><span style=\"font-size: 24pt;\">P7<\/span><\/td>\n<td style=\"width: 33.3333%; border-style: solid; border-color: #000000; text-align: center;\"><span style=\"font-size: 24pt;\">P8<\/span><\/td>\n<td style=\"width: 65.6079%; border-style: solid; border-color: #000000; text-align: center;\"><span style=\"font-size: 24pt;\">P9<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\uac1c\uc120\ud55c \ubc29\uc2dd\uc73c\ub85c \ub2e4\uc2dc \uacc4\uc0b0\uc744 \ud574\ubcf4\uc790. Radius\uac00 1\uc774\ub77c\uace0 \uac00\uc815\ud558\uace0 P5\uc5d0 \ub300\ud55c \uc0c8\ub85c\uc6b4 \uac12\uc744 \uad6c\ud55c\ub2e4\uba74 \uc544\ub798\uc640 \uac19\ub2e4.<\/p>\n<pre class=\"lang:null decode:true lang:\">\uc218\ud3c9\uc120\uc0c1\uc5d0\uc11c \uc778\uc811 \ud53d\uc140 \ud3c9\uade0\uac12 \uad6c\ud558\uae30\r\nH1 = P1+P2+P3\r\nH2 = P4+P5+p6\r\nH3 = P7+P8+P9\r\n\r\n\uc218\uc9c1\uc120\uc0c1\uc5d0\uc11c \uc778\uc811 \ud53d\uc140 \ud3c9\uade0\uac12 \uad6c\ud558\uae30\r\n\ucd5c\uc885\uac12 = (H1+H2+H3)\/3\r\n<\/pre>\n<p>\uc774\ub7f0 \ubc29\ubc95 \uc774\uc678\uc5d0\ub3c4 \uc778\uc811 \ud53d\uc140\uc758 \ud3c9\uade0\uc744 \uad6c\ud558\ub294 \ube60\ub978 \ubc29\ubc95\uc774 \uc788\ub2e4. \uc5b4\uca0c\ub4e0 \ud3c9\uade0\uac12\uc744 \uad6c\ud558\uae30 \uc704\ud55c \uc5f0\uc0b0\ud69f\uc218\ub97c \uc904\uc774\uba74 \uc5f0\uc0b0\ub7c9\uc774 \uc801\uc5b4\uc11c \uc18d\ub3c4\ub97c \ub192\uc77c \uc218 \uc788\ub2e4.<\/p>\n<p>\ub2e4\uc74c \ubc29\ubc95\uc740 \uccab\ubc88\uc9f8 \ud53d\uc140\uc744 \ud569\uc0b0\ud558\uace0 \ub450\ubc88\uc9f8 \ud53d\uc140\ubd80\ud130\ub294 \uc55e\ucabd\uc758 \ud53d\uc140\uac12\uc744 \ud558\ub098 \ube7c\uace0 \ub4a4\uc5d0 \ud53d\uc140\uac12\uc744 \ud558\ub098 \ub354\ud558\ub294 \ubc29\uc2dd\uc73c\ub85c \uc5f0\uc0b0\ub7c9\uc744 \uc904\uc778\ub2e4.<\/p>\n<table style=\"width: 100%; border-collapse: collapse; border-style: solid; border-color: #000000;\" height=\"92\">\n<tbody>\n<tr>\n<td style=\"width: 14.2857%; border-style: solid; border-color: #000000; text-align: center;\">P1<\/td>\n<td style=\"width: 14.2857%; border-style: solid; border-color: #000000; text-align: center;\">P2<\/td>\n<td style=\"width: 14.2857%; border-style: solid; border-color: #000000; text-align: center;\">P3<\/td>\n<td style=\"width: 14.2857%; border-style: solid; border-color: #000000; text-align: center;\">P4<\/td>\n<td style=\"width: 14.2857%; border-style: solid; border-color: #000000; text-align: center;\">P5<\/td>\n<td style=\"width: 14.2857%; border-style: solid; border-color: #000000; text-align: center;\">P6<\/td>\n<td style=\"width: 14.2857%; border-style: solid; border-color: #000000; text-align: center;\">P7<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>radius=3\uc77c \ub54c P4\uc5d0 \ub300\ud55c \uc778\uc811 \ud53d\uc140 \ud3c9\uade0\uc744 \uba3c\uc800 \uacc4\uc0b0\ud55c\ub2e4.<br \/>\nP4 \uc778\uc811 \ud53d\uc140 \ud3c9\uade0\uac12 = Avg(P4) = (P1+P2+P3+P4+P5+P6+P7) \/ 7<\/p>\n<table style=\"width: 100.138%; border-collapse: collapse; border-style: solid; border-color: #000000;\" height=\"87\">\n<tbody>\n<tr>\n<td style=\"width: 14.2857%; border-style: solid; border-color: #000000; text-align: center;\">P2<\/td>\n<td style=\"width: 14.2857%; border-style: solid; border-color: #000000; text-align: center;\">P3<\/td>\n<td style=\"width: 14.2857%; border-style: solid; border-color: #000000; text-align: center;\">P4<\/td>\n<td style=\"width: 14.2857%; border-style: solid; border-color: #000000; text-align: center;\">P5<\/td>\n<td style=\"width: 14.2857%; border-style: solid; border-color: #000000; text-align: center;\">P6<\/td>\n<td style=\"width: 14.2857%; border-style: solid; border-color: #000000; text-align: center;\">P7<\/td>\n<td style=\"width: 14.2857%; border-style: solid; border-color: #000000; text-align: center;\">P8<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\uc774\ubbf8 P4\uc5d0 \ub300\ud55c \uc778\uc811 \ud53d\uc140 \ud3c9\uade0\uac12\uc740 \uad6c\ud588\uc73c\ubbc0\ub85c,<br \/>\nP5 \uc778\uc811 \ud53d\uc140 \ud3c9\uade0\uac12 = (Avg(P4) &#8211; P1 + P8) \/ 7<\/p>\n<p>\uc774\ub7ec\ud55c \ubc29\uc2dd\uc73c\ub85c Blur\ud6a8\uacfc\ub97c \uc8fc\uba74 radius \ud06c\uae30\uc640\ub294 \uad00\uacc4\uc5c6\uc774 \uc77c\uc815\ud55c \uc5f0\uc0b0 \uc18d\ub3c4\ub97c \ubcf4\uc7a5\ud55c\ub2e4.<\/p>\n<p><a href=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2020\/04\/1_MM-W_k1g215L_sINxvXWzA.png\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2020\/04\/1_MM-W_k1g215L_sINxvXWzA.png\" alt=\"\" width=\"518\" height=\"369\" class=\"aligncenter size-full wp-image-44032\" srcset=\"https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/04\/1_MM-W_k1g215L_sINxvXWzA.png 518w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/04\/1_MM-W_k1g215L_sINxvXWzA-300x214.png 300w\" sizes=\"(max-width: 518px) 100vw, 518px\" \/><\/a><\/p>\n<p>\uae30\uc874 Box Blur\uc640 \ube44\uad50\ud588\uc744\ub54c \ud004\ub9ac\ud2f0 \ub610\ud55c \ud06c\uac8c \ub2e4\ub974\uc9c0 \uc54a\uc740\uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\ub2e4.<\/p>\n<p><a href=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2020\/04\/www.charlezz.com-blur-box-blur-058gbiamdtvivoxaf.png\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2020\/04\/www.charlezz.com-blur-box-blur-058gbiamdtvivoxaf-1024x383.png\" alt=\"\" width=\"750\" height=\"281\" class=\"aligncenter size-large wp-image-44490\" srcset=\"https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/04\/www.charlezz.com-blur-box-blur-058gbiamdtvivoxaf.png 1024w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/04\/www.charlezz.com-blur-box-blur-058gbiamdtvivoxaf-300x112.png 300w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2020\/04\/www.charlezz.com-blur-box-blur-058gbiamdtvivoxaf-768x287.png 768w\" sizes=\"(max-width: 750px) 100vw, 750px\" \/><\/a><\/p>\n<p>BoxBlurOptimized\uc758 \ucf54\ub4dc\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n<pre class=\"lang:null decode:true lang:\">class BoxBlurOptimized: AbstractBlur {\r\n\r\n    override fun blur(image: Bitmap, radius: Int): Bitmap {\r\n        val w = image.width\r\n        val h = image.height\r\n        val currentPixels = IntArray(w * h)\r\n        val newPixels = IntArray(w * h)\r\n        image.getPixels(currentPixels, 0, w, 0, 0, w, h)\r\n        blurProcess(w, h, currentPixels, newPixels, radius)\r\n        return Bitmap.createBitmap(newPixels, w, h, Bitmap.Config.ARGB_8888)\r\n    }\r\n\r\n    fun blurProcess(\r\n        w: Int,\r\n        h: Int,\r\n        currentPixels: IntArray,\r\n        newPixels: IntArray,\r\n        radius: Int\r\n    ) {\r\n        val firstPassPixel = IntArray(w * h)\r\n        val denominator = (radius * 2 + 1)\r\n\r\n        for (row in 0 until h) {\r\n            val rQueue = LinkedList&lt;Int&gt;()\r\n            val gQueue = LinkedList&lt;Int&gt;()\r\n            val bQueue = LinkedList&lt;Int&gt;()\r\n\r\n            val startIndex = row * w\r\n            val originalPixel = currentPixels[startIndex]\r\n            val rOrig = originalPixel ushr 16 and 0xFF\r\n            val gOrig = originalPixel ushr 8 and 0xFF\r\n            val bOrig = originalPixel and 0xFF\r\n\r\n            repeat(radius + 1) {\r\n                rQueue.add(rOrig)\r\n                gQueue.add(gOrig)\r\n                bQueue.add(bOrig)\r\n            }\r\n\r\n            var rSum = rOrig * (radius + 1)\r\n            var gSum = gOrig * (radius + 1)\r\n            var bSum = bOrig * (radius + 1)\r\n\r\n            for (col in 1..radius) {\r\n                \/\/ In the event of width is smaller than radius\r\n                val nextPixelIndex = startIndex + if (col &gt; w - 1) w - 1 else col\r\n                val nextPixel = currentPixels[nextPixelIndex]\r\n                val rNext = nextPixel ushr 16 and 0xFF\r\n                val gNext = nextPixel ushr 8 and 0xFF\r\n                val bNext = nextPixel and 0xFF\r\n\r\n                rQueue.add(rNext)\r\n                gQueue.add(gNext)\r\n                bQueue.add(bNext)\r\n\r\n                rSum += rNext\r\n                gSum += gNext\r\n                bSum += bNext\r\n            }\r\n\r\n            for (col in 0 until w) {\r\n                val newPixelIndex = row * w + col\r\n                firstPassPixel[newPixelIndex] =\r\n                    (currentPixels[newPixelIndex] and -0x1000000) \/* which is 0xff000000 to get the original alpha *\/ or\r\n                            ((rSum \/ denominator) and 0xff shl 16) or\r\n                            ((gSum \/ denominator) and 0xff shl 8) or\r\n                            ((bSum \/ denominator) and 0xff)\r\n\r\n                rSum -= rQueue.remove()\r\n                gSum -= gQueue.remove()\r\n                bSum -= bQueue.remove()\r\n\r\n                val nextPixelIndex =\r\n                    if (col + 1 + radius &gt; w - 1)\r\n                        (row + 1) * w - 1\r\n                    else row * w + col + radius + 1\r\n\r\n                val nextPixel = currentPixels[nextPixelIndex]\r\n                val rNext = nextPixel ushr 16 and 0xFF\r\n                val gNext = nextPixel ushr 8 and 0xFF\r\n                val bNext = nextPixel and 0xFF\r\n\r\n                rQueue.add(rNext)\r\n                gQueue.add(gNext)\r\n                bQueue.add(bNext)\r\n\r\n                rSum += rNext\r\n                gSum += gNext\r\n                bSum += bNext\r\n            }\r\n        }\r\n\r\n        for (col in 0 until w) {\r\n            val rQueue = LinkedList&lt;Int&gt;()\r\n            val gQueue = LinkedList&lt;Int&gt;()\r\n            val bQueue = LinkedList&lt;Int&gt;()\r\n\r\n            val originalPixel = firstPassPixel[col]\r\n            val rOrig = originalPixel ushr 16 and 0xFF\r\n            val gOrig = originalPixel ushr 8 and 0xFF\r\n            val bOrig = originalPixel and 0xFF\r\n\r\n            repeat(radius + 1) {\r\n                rQueue.add(rOrig)\r\n                gQueue.add(gOrig)\r\n                bQueue.add(bOrig)\r\n            }\r\n\r\n            var rSum = rOrig * (radius + 1)\r\n            var gSum = gOrig * (radius + 1)\r\n            var bSum = bOrig * (radius + 1)\r\n\r\n            for (row in 1..radius) {\r\n                \/\/ In the event of width is smaller than radius\r\n                val nextPixelIndex = col + if (row &gt; h - 1) (h - 1) * w else row * w\r\n                val nextPixel = firstPassPixel[nextPixelIndex]\r\n                val rNext = nextPixel ushr 16 and 0xFF\r\n                val gNext = nextPixel ushr 8 and 0xFF\r\n                val bNext = nextPixel and 0xFF\r\n\r\n                rQueue.add(rNext)\r\n                gQueue.add(gNext)\r\n                bQueue.add(bNext)\r\n\r\n                rSum += rNext\r\n                gSum += gNext\r\n                bSum += bNext\r\n            }\r\n\r\n            for (row in 0 until h) {\r\n                val newPixelIndex = row * w + col\r\n                newPixels[newPixelIndex] =\r\n                    (firstPassPixel[newPixelIndex] and -0x1000000) \/* which is 0xff000000 to get the original alpha *\/ or\r\n                            ((rSum \/ denominator) and 0xff shl 16) or\r\n                            ((gSum \/ denominator) and 0xff shl 8) or\r\n                            ((bSum \/ denominator) and 0xff)\r\n\r\n                rSum -= rQueue.remove()\r\n                gSum -= gQueue.remove()\r\n                bSum -= bQueue.remove()\r\n\r\n                val nextPixelIndex =\r\n                    if (row + 1 + radius &gt; h - 1)\r\n                        ((row + 1) * w) + col\r\n                    else (row + radius + 1) * w + col\r\n\r\n                if (nextPixelIndex &gt;= w * h) break\r\n\r\n                val nextPixel = firstPassPixel[nextPixelIndex]\r\n                val rNext = nextPixel ushr 16 and 0xFF\r\n                val gNext = nextPixel ushr 8 and 0xFF\r\n                val bNext = nextPixel and 0xFF\r\n\r\n                rQueue.add(rNext)\r\n                gQueue.add(gNext)\r\n                bQueue.add(bNext)\r\n\r\n                rSum += rNext\r\n                gSum += gNext\r\n                bSum += bNext\r\n            }\r\n        }\r\n    }\r\n\r\n    override fun getType() = BlurType.BOX_BLUR_OPTIMIZED\r\n\r\n\r\n}\r\n<\/pre>\n<p>\uc0d8\ud50c \uc571 \ubc0f Blur Box \ucf54\ub4dc\ub294 <a href=\"https:\/\/github.com\/Charlezz\/BlurSample\">github<\/a>\uc5d0\uc11c \ud655\uc778 \ud558\uc2e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ub354 \ube60\ub978 Blur\uc54c\uace0\ub9ac\uc998\uc774 \uad81\uae08\ud558\ub2e4\uba74, <a href=\"https:\/\/www.charlezz.com\/?p=44043\">\uc548\ub4dc\ub85c\uc774\ub4dc\uc5d0\uc11c blur\ud6a8\uacfc \uad6c\ud604\ud558\uae30 : Gaussian Blur, Stack Blur<\/a>\ub97c \ucc38\uc870\ud574\uc8fc\uc138\uc694.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\uc548\ub4dc\ub85c\uc774\ub4dc\uc5d0\uc11c blur\ud6a8\uacfc \uad6c\ud604\ud558\uae30 \uc548\ub4dc\ub85c\uc774\ub4dc SDK\uc5d0\uc11c\ub294 Blur\uc5d0 \uad00\ud55c API\ub97c \uc81c\uacf5\ud558\uace0 \uc788\uc9c0 \uc54a\uae30 \ub54c\ubb38\uc5d0 \uc77c\ubc18\uc801\uc73c\ub85c \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uc0ac\uc6a9\ud558\uc5ec \uad6c\ud604\ud558\uac8c \ub41c\ub2e4.\u00a0 Blur \ud6a8\uacfc\ub97c \uad6c\ud604\ud558\uae30 \uc704\ud574\uc11c\ub294 \uc774\ubbf8\uc9c0\ub97c \uad6c\uc131\ud558\ub294 \ud53d\uc140\uc5d0 \ub300\ud574\uc11c \uba3c\uc800 \uc54c\uc544\uc57c \ud55c\ub2e4. \ud53d\uc140(Pixel)\uc774\ub780? \ud53d\uc140\uc740 \ud654\uc18c\ub77c\uace0\ub3c4 \ud558\uba70 \ud654\uba74 \ub610\ub294 \uc774\ubbf8\uc9c0\ub97c \uad6c\uc131\ud558\ub294 \uac00\uc7a5 \uae30\ubcf8\uc774 \ub418\ub294 \ub2e8\uc704\ub2e4. \uc5b4\ub5a0\ud55c \uc774\ubbf8\uc9c0\ub97c \ud06c\uac8c \ud655\ub300 \ud588\uc744 \ub54c \uc791\uc740 \uc810 \ub610\ub294 \uc0ac\uaca9\ud615\uc73c\ub85c [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"inline_featured_image":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0},"categories":[24,5],"tags":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/44019"}],"collection":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=44019"}],"version-history":[{"count":10,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/44019\/revisions"}],"predecessor-version":[{"id":44491,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/44019\/revisions\/44491"}],"wp:attachment":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=44019"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=44019"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=44019"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}