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); }