프로젝트

일반

사용자정보

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

markus / KCOM / Common / Converter / SvgConverter.cs @ 3abe8d4e

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

1
using KCOMDataModel.DataModel;
2
using System;
3
using System.Diagnostics;
4
using System.Text;
5
using System.Windows;
6
using System.Windows.Media.Imaging;
7

    
8
namespace KCOM.Common.Converter
9
{
10
    class SvgConverter
11
    {
12
        public void SvgConvert(string fileurl, string guid, string DOCUMENT_NO)
13
        {
14
            try
15
            {
16
                var defaultBitmapImage = new BitmapImage();
17
                defaultBitmapImage.BeginInit();
18
                defaultBitmapImage.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
19
                defaultBitmapImage.CacheOption = BitmapCacheOption.OnLoad;
20
                defaultBitmapImage.UriSource = new Uri(fileurl);
21
                defaultBitmapImage.EndInit();
22

    
23
                GC.Collect();
24
                System.Drawing.Bitmap image;
25

    
26
                if (defaultBitmapImage.IsDownloading)
27
                {
28
                    defaultBitmapImage.DownloadCompleted += (ex, arg) =>
29
                    {
30
                        defaultBitmapImage.Freeze();
31
                        GC.Collect();
32

    
33
                        image = GetBitmap(defaultBitmapImage);
34

    
35
                        image.Save(@AppDomain.CurrentDomain.BaseDirectory + "potrace.bmp", System.Drawing.Imaging.ImageFormat.Bmp);
36

    
37
                        Process potrace = new Process
38
                        {
39
                            StartInfo = new ProcessStartInfo
40
                            {
41
                                FileName = @AppDomain.CurrentDomain.BaseDirectory + "potrace.exe",
42
                                Arguments = "-b svg " + @AppDomain.CurrentDomain.BaseDirectory + "potrace.bmp",
43
                                RedirectStandardInput = true,
44
                                RedirectStandardOutput = true,
45
                                RedirectStandardError = true,
46
                                UseShellExecute = false,
47
                                CreateNoWindow = true,
48
                                WindowStyle = ProcessWindowStyle.Hidden
49
                            },
50
                            EnableRaisingEvents = false
51
                        };
52

    
53
                        StringBuilder svgBuilder = new StringBuilder();
54
                        potrace.OutputDataReceived += (object sender2, DataReceivedEventArgs e2) =>
55
                        {
56
                            svgBuilder.AppendLine(e2.Data);
57
                        };
58

    
59
                        potrace.Start();
60

    
61

    
62
                        byte[] bytes = System.IO.File.ReadAllBytes(@AppDomain.CurrentDomain.BaseDirectory + "potrace.bmp");
63
                        kr.co.devdoftech.cloud.FileUpload fileUploader = App.FileUploader;
64
                        fileurl = fileUploader.Run(App.ViewInfo.ProjectNO, DOCUMENT_NO, App.ViewInfo.UserID, guid + ".svg", bytes);
65

    
66
                        Check_Uri.UriCheck(fileurl);
67
                    };
68
                }
69
            }
70
            catch (Exception ex)
71
            {
72
                Common.ViewerDataModel.Instance.SystemMain.dzMainMenu.DialogMessage_Alert("" + ex, "Alert");
73
            }
74
        }
75

    
76
        System.Drawing.Bitmap GetBitmap(BitmapSource source)
77
        {
78
            System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(source.PixelWidth, source.PixelHeight, System.Drawing.Imaging.PixelFormat.Format32bppPArgb);
79
            System.Drawing.Imaging.BitmapData data = bmp.LockBits(new System.Drawing.Rectangle(System.Drawing.Point.Empty, bmp.Size), System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppPArgb);
80
            source.CopyPixels(Int32Rect.Empty, data.Scan0, data.Height * data.Stride, data.Stride);
81
            bmp.UnlockBits(data);
82
            return bmp;
83
        }
84
    }
85
}
클립보드 이미지 추가 (최대 크기: 500 MB)