Example #1
0
        public static bool Resize(WriteableBitmap bitmap, Stream stream, Size rSize, bool isCenterCrop)
        {
            bool   isResized = false;
            double dr        = JpegHelper.GetMinRatio(bitmap, rSize);

            //if (dr > 1)
            //{
            //가로/세로를 중심점에 맞추어 잘라내기
            if (isCenterCrop)
            {
                //비트맵도 사이즈 변경
                bitmap = bitmap.Resize((int)(bitmap.PixelWidth / dr), (int)(bitmap.PixelHeight / dr), WriteableBitmapExtensions.Interpolation.Bilinear);
                bitmap = bitmap.Crop(new Rect((bitmap.PixelWidth - rSize.Width) / 2, (bitmap.PixelHeight - rSize.Height) / 2, rSize.Width, rSize.Height));
                stream.Seek(0, SeekOrigin.Begin);
                bitmap.SaveJpeg(stream, (int)rSize.Width, (int)rSize.Height, 0, 100);
            }
            else
            {
                //스트림에만 저장
                stream.Seek(0, SeekOrigin.Begin);
                bitmap.SaveJpeg(stream, (int)(bitmap.PixelWidth / dr), (int)(bitmap.PixelHeight / dr), 0, 100);
            }
            isResized = true;
            //}

            return(isResized);
        }
Example #2
0
 //LockscreenSelectionPage에서 다운로드후 개별건을 저장할 때 및 이미지 상세보기(PictuerPage)에서 단건 저장할 때 호출
 //락스크린 이미지는 자동생성으므로 중심을 기준으로 잘라내기 사용함.
 public static void Save(string name, WriteableBitmap bitmap)
 {
     using (MemoryStream ms = new MemoryStream())
     {
         bitmap.SaveJpeg(ms, bitmap.PixelWidth, bitmap.PixelHeight, 0, 100);
         JpegHelper.Save(name, bitmap, ms, true);
     }
 }
Example #3
0
        //원본 스트림이 아니면 안되고(WriteableBitmap등 다른 객체를 거치면 정보를 뽑아내지 못함), using을 사용하면 Disposable이라 스트림이 닫힌다.
        //그러한 이유로 사용 보류

        /*
         * public static JpegOrientation GetOrientation(string name, Stream stream)
         * {
         *  JpegOrientation jo = new JpegOrientation();
         *
         *  if (name.Contains(".jpg") || name.Contains(".jpeg"))
         *  {
         *      try
         *      {
         *          using (MemoryStream ms = new MemoryStream())
         *          {
         *              stream.CopyTo(ms);
         *              ms.Seek(0, SeekOrigin.Begin);
         *              using (ExifReader reader = new ExifReader(stream))
         *              {
         *                  ushort orientation = 0;
         *                  reader.GetTagValue(ExifTags.Orientation, out orientation);
         *                  switch (orientation)
         *                  {
         *                      case 1:
         *                          jo.Angle = 0;
         *                          jo.IsFlip = false;
         *                          break;
         *                      case 2:
         *                          jo.Angle = 0;
         *                          jo.IsFlip = true;
         *                          jo.FlipMode = WriteableBitmapExtensions.FlipMode.Vertical;
         *                          break;
         *                      case 3:
         *                          jo.Angle = 180;
         *                          jo.IsFlip = false;
         *                          break;
         *                      case 4:
         *                          jo.Angle = 180;
         *                          jo.IsFlip = true;
         *                          jo.FlipMode = WriteableBitmapExtensions.FlipMode.Vertical;
         *                          break;
         *                      case 5:
         *                          jo.Angle = 90;
         *                          jo.IsFlip = true;
         *                          jo.FlipMode = WriteableBitmapExtensions.FlipMode.Horizontal;
         *                          break;
         *                      case 6:
         *                          jo.Angle = 90;
         *                          jo.IsFlip = false;
         *                          break;
         *                      case 7:
         *                          jo.Angle = 270;
         *                          jo.IsFlip = true;
         *                          jo.FlipMode = WriteableBitmapExtensions.FlipMode.Horizontal;
         *                          break;
         *                      case 8:
         *                          jo.Angle = 270;
         *                          jo.IsFlip = false;
         *                          break;
         *                  }
         *              }
         *          }
         *      }
         *      catch (ExifLibException e)
         *      {
         *          System.Diagnostics.Debug.WriteLine(e.Message);
         *      }
         *  }
         *
         *  return jo;
         * }
         */
        //PhotoChooserTask를 사용하는 락스크린 싱글이미지 추가에서 호출됨
        //락스크린 이미지는 자동생성으므로 중심을 기준으로 잘라내기 사용함.
        public static void Save(string name, Stream stream)
        {
            using (MemoryStream ms = new MemoryStream())
            {
                stream.CopyTo(ms);
                WriteableBitmap bitmap = BitmapFactory.New(0, 0).FromStream(ms);
                JpegHelper.Save(name, bitmap, ms, true);
            }
        }
Example #4
0
        public static WriteableBitmap Resize(Stream stream, Size rSize, bool isCenterCrop)
        {
            WriteableBitmap bitmap = BitmapFactory.New(0, 0).FromStream(stream);
            double          dr     = JpegHelper.GetMinRatio(bitmap, rSize);

            //if (dr > 1) <= 주석 처리하면 축소 뿐만이 아니라 확대까지 된다.
            //{
            bitmap = bitmap.Resize((int)(bitmap.PixelWidth / dr), (int)(bitmap.PixelHeight / dr), WriteableBitmapExtensions.Interpolation.Bilinear);
            //가로/세로를 중심점에 맞추어 잘라내기
            if (isCenterCrop)
            {
                bitmap = bitmap.Crop(new Rect((bitmap.PixelWidth - rSize.Width) / 2, (bitmap.PixelHeight - rSize.Height) / 2, rSize.Width, rSize.Height));
            }
            //}
            return(bitmap);
        }