프로젝트

일반

사용자정보

통계
| 브랜치(Branch): | 개정판:

markus / KCOM / Controls / DecodeImage.cs @ 92442e4a

이력 | 보기 | 이력해설 | 다운로드 (2.43 KB)

1 92442e4a taeseongkim
using System;
2
using System.Collections.Generic;
3
4
using System.Linq;
5
using System.Text;
6
using System.Threading.Tasks;
7
using System.Windows;
8
using System.Windows.Controls;
9
using System.Windows.Media;
10
using System.Windows.Media.Imaging;
11
12
namespace KCOM.Controls
13
{
14
    [TemplatePart(Name = PART_IMAGE, Type = typeof(Image))]
15
    public class ScaleDecodeImage : System.Windows.Controls.Control
16
    {
17
        private const string PART_IMAGE = "PART_IMAGE";
18
19
        private Image ImageControl;
20
21
        public override void OnApplyTemplate()
22
        {
23
            base.OnApplyTemplate();
24
25
            ImageControl = GetTemplateChild(PART_IMAGE) as Image;
26
        }
27
28
29
        public static readonly DependencyProperty SourceProperty = DependencyProperty.Register(
30
                    "Source", typeof(BitmapImage), typeof(ScaleDecodeImage),new PropertyMetadata(new PropertyChangedCallback(SourcePropertyChaged)));
31
32
33
        public BitmapImage Source
34
        {
35
            get => (BitmapImage)GetValue(SourceProperty);
36
            set => SetValue(SourceProperty, value);
37
        }
38
39
        private static void SourcePropertyChaged(DependencyObject d, DependencyPropertyChangedEventArgs e)
40
        {
41
            var owner = d as ScaleDecodeImage;
42
43
            if(owner != null)
44
            {
45
                owner.Scale = 1.0;
46
            }
47
        }
48
49
        public static readonly DependencyProperty ScaleProperty = DependencyProperty.Register(
50
                    "Scale", typeof(double), typeof(ScaleDecodeImage), new PropertyMetadata(0.0,new PropertyChangedCallback(ScalePropertyChaged)));
51
52
53
        public double Scale
54
        {
55
            get => (double)GetValue(ScaleProperty);
56
            set => SetValue(ScaleProperty, value);
57
        }
58
59
        private static async void ScalePropertyChaged(DependencyObject d, DependencyPropertyChangedEventArgs e)
60
        {
61
            var owner = d as ScaleDecodeImage;
62
63
            if (owner != null)
64
            {
65
                if(owner.ImageControl != null)
66
                {
67
                    var value = owner.Scale;
68
                    System.Windows.Media.Imaging.BitmapImage image = owner.Source.Clone();
69
70
                    image.DecodePixelWidth = (int)(image.PixelWidth * value);
71
                    image.DecodePixelHeight = (int)(image.PixelHeight * value);
72
73
                    await owner.Dispatcher.InvokeAsync(() => { owner.ImageControl.Source = image; });
74
                    
75
                }
76
            }
77
        }
78
    }
79
}
클립보드 이미지 추가 (최대 크기: 500 MB)