이미지를 불러와 간단한 꾸미기를 하고 저장하는 예제에 대해 포스팅하겠습니다.
예전 해당 영역을 이미지로 저장하는 포스팅의 내용을 약간 수정한 내용입니다.
간략적으로,
InkCanvas를 사용해 그림을 그리고 DrawingVisual과 DrawingContext를 통해
RenderTargetBitmap으로 변환 후 이를 BitmapEncoder를 사용해 해당 포맷에 맞게 저장합니다.
InkCanvas를 이미지로 변환 후 저장하기 때문에
꾸미기 용도에 맞게 자식 객체로 여러가지를 포함시킨 후 저장하셔도 되겠죠.^^
이제, 소스를 통해 하나씩 알아보겠습니다.
1. 이미지를 InkCanvas의 Background로 지정합니다.
// 이미지 불러오기 private void btn_Open(object sender, RoutedEventArgs e) { OpenFileDialog openDialog = new OpenFileDialog();
if (openDialog.ShowDialog() == true) { if (File.Exists(openDialog.FileName)) { BitmapImage bitmapImage = new BitmapImage(new Uri(openDialog.FileName, UriKind.RelativeOrAbsolute));
// InkCanvas의 배경으로 지정 inkCanvas.Background = new ImageBrush(bitmapImage); } } } |
2. 해당 객체(InkCanvas)를 비트맵으로 변환합니다.
// 해당 객체를 이미지로 변환
private static RenderTargetBitmap ConverterBitmapImage(FrameworkElement element) { DrawingVisual drawingVisual = new DrawingVisual(); DrawingContext drawingContext = drawingVisual.RenderOpen();
// 해당 객체의 그래픽요소로 사각형의 그림을 그립니다. drawingContext.DrawRectangle(new VisualBrush(element), null, new Rect(new Point(0, 0), new Point(element.ActualWidth, element.ActualHeight)));
drawingContext.Close();
// 비트맵으로 변환합니다. RenderTargetBitmap target = new RenderTargetBitmap((int)element.ActualWidth, (int)element.ActualHeight, 96, 96, System.Windows.Media.PixelFormats.Pbgra32);
target.Render(drawingVisual); return target; } |
3. 변환된 이미지를 해당 포맷에 맞게 저장합니다.
// 해당 이미지 저장
private static void ImageSave(BitmapSource source) { SaveFileDialog saveDialog = new SaveFileDialog();
// 이미지 포맷들 saveDialog.Filter = "PNG|*.png|JPG|*.jpg|GIF|*.gif|BMP|*.bmp"; saveDialog.AddExtension = true;
if (saveDialog.ShowDialog() == true) { BitmapEncoder encoder = null; // 파일 생성 FileStream stream = new FileStream(saveDialog.FileName, FileMode.Create, FileAccess.Write);
// 파일 포맷 string upper = saveDialog.SafeFileName.ToUpper(); char[] format = upper.ToCharArray(saveDialog.SafeFileName.Length - 3, 3); upper = new string(format);
// 해당 포맷에 맞게 인코더 생성 switch (upper.ToString()) { case "PNG": encoder = new PngBitmapEncoder(); break;
case "JPG": encoder = new JpegBitmapEncoder(); break;
case "GIF": encoder = new GifBitmapEncoder(); break;
case "BMP": encoder = new BmpBitmapEncoder(); break; } // 인코더 프레임에 이미지 추가 encoder.Frames.Add(BitmapFrame.Create(source)); // 파일에 저장 encoder.Save(stream); stream.Close(); } } |
결과 화면은 다음과 같습니다.
1. 이미지를 불러옵니다.
2. 간단히 꾸미기를 하고 저장합니다.
3. 저장된 이미지
'Window > WPF' 카테고리의 다른 글
[ WPF ] 윈도우 이벤트 (4) | 2010.07.11 |
---|---|
[ WPF ] OpenCV로 캠 화면 띄우기 (3) | 2010.06.20 |
[ WPF ] UI 쓰레드 변경하기 (0) | 2010.05.04 |
[ WPF ] WPF in Flash (0) | 2010.04.29 |
[ WPF ] 클래스 구조 (0) | 2010.04.27 |