private string GetDownloadURL(DateTime time, eSAType type)
        {
            string targetTimeStr  = time.ToString("HHmmss");
            string targetYearStr  = time.ToString("yyyy");
            string targetMonthStr = time.ToString("MM");
            string targetDayStr   = time.ToString("dd");
            string resultURL      = string.Format(FORMAT_SAT_IMG_URL, CONST_STR_LEVEL, CONST_INT_WIDTH, targetYearStr, targetMonthStr, targetDayStr, targetTimeStr);

            return(resultURL);
        }
        /// <summary>
        /// 위성 배경사진 다운로드 후 저장까지 해주는 함수
        /// </summary>
        /// <param name="time">대상 시간 (UTC 필수)</param>
        /// <param name="type">위성 종류</param>
        /// <returns></returns>
        public string DownloadSATWallpaper(DateTime time, eSAType type)
        {
            onProgressDownload?.Invoke(eProgress.START, true);

            string   resultFilePath = "";
            DateTime targetTime     = time.AddSeconds(-time.Second).AddMinutes(-30).AddMinutes(-(time.Minute % 10));
            string   targetURL      = "";

            // 파일이 정확히 있나 없나 테스트
            do
            {
                targetURL = GetDownloadURL(targetTime, type);
                string testUrl = targetURL + "_0_0.png"; //string.Format(FORMAT_SAT_IMG_URL, CONST_STR_LEVEL, CONST_INT_WIDTH, targetYearStr, targetMonthStr, targetDayStr, targetTimeStr);

                bool testResult = false;
                try
                {
                    WebRequest      request    = WebRequest.Create(testUrl);
                    HttpWebResponse response   = (HttpWebResponse)request.GetResponse();
                    HttpStatusCode  httpStatus = response.StatusCode;

                    if (httpStatus == HttpStatusCode.OK)
                    {
                        testResult = true;
                        onProgressDownload?.Invoke(eProgress.CONNECT, true);
                    }

                    response.Close();
                }
                catch
                {
                    testResult = false;
                }

                if (testResult)
                {
                    break;
                }
                else
                {
                    targetTime = targetTime.AddHours(-1);
                }
            } while (true);

            string saveFileName   = "latest.png";
            string saveFolderPath = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures) + "\\Himawari8\\";

            if (!Directory.Exists(saveFolderPath))
            {
                Directory.CreateDirectory(saveFolderPath);
            }

            //저장 경로
            resultFilePath = saveFolderPath + saveFileName;

            Bitmap   image    = new Bitmap(CONST_INT_WIDTH * CONST_INT_NUM_BLOCKS, CONST_INT_WIDTH * CONST_INT_NUM_BLOCKS);
            Graphics graphics = Graphics.FromImage(image);

            graphics.Clear(Color.Black);

            for (int i = 0; i < CONST_INT_NUM_BLOCKS; ++i)
            {
                for (int j = 0; j < CONST_INT_NUM_BLOCKS; ++j)
                {
                    string partImageURL = string.Format("{0}_{1}_{2}.png", targetURL, i, j);
                    //Console.WriteLine("Downloading: " + partImageURL);

                    try
                    {
                        WebRequest      request    = WebRequest.Create(partImageURL);
                        HttpWebResponse response   = (HttpWebResponse)request.GetResponse();
                        HttpStatusCode  httpStatus = response.StatusCode;

                        if (httpStatus == HttpStatusCode.OK)
                        {
                            Image imgblock = Image.FromStream(response.GetResponseStream());
                            graphics.DrawImage(imgblock, i * CONST_INT_WIDTH, j * CONST_INT_WIDTH, CONST_INT_WIDTH, CONST_INT_WIDTH);
                            imgblock.Dispose();
                            response.Close();

                            onProgressDownload?.Invoke(eProgress.WRITE_IMAGE, true);
                        }
                    }
                    catch (Exception e)
                    {
                        string errorMsg = string.Format("Failed! {0}", e.Message);
                    }
                }
            }

            //이미지 코덱 지정
            ImageCodecInfo pngCodecInfo = null;

            ImageCodecInfo[] encodersArray = ImageCodecInfo.GetImageEncoders();
            for (int i = 0; i < encodersArray.Length; i++)
            {
                if (encodersArray[i].MimeType == "image/png")
                {
                    pngCodecInfo = encodersArray[i];
                    break;
                }
            }

            EncoderParameters encoderParams = new EncoderParameters(1);

            encoderParams.Param[0] = new EncoderParameter(Encoder.Quality, 90L);

            if (pngCodecInfo != null)
            {
                image.Save(resultFilePath, pngCodecInfo, encoderParams);
                onProgressDownload?.Invoke(eProgress.SAVE_IMAGE, true);
            }
            else
            {
                //실패 했으니 저장 패스 빈 값으로 처리해서 문제가 있음을 알린다
                resultFilePath = "";
            }

            onProgressDownload?.Invoke(eProgress.COMPLETE, true);

            return(resultFilePath);
        }