git-svn-id: https://pdfsharp.svn.codeplex.com/svn@39620 56d0cb2f-6006-4f69-a5a2-94740...
[pdfsharp:pdfsharp.git] / PDFsharp / code / PdfSharp / PdfSharp.Drawing / ImageHelper.cs
1 #region PDFsharp - A .NET library for processing PDF\r
2 //\r
3 // Authors:\r
4 //   Stefan Lange (mailto:Stefan.Lange@pdfsharp.com)\r
5 //\r
6 // Copyright (c) 2005-2009 empira Software GmbH, Cologne (Germany)\r
7 //\r
8 // http://www.pdfsharp.com\r
9 // http://sourceforge.net/projects/pdfsharp\r
10 //\r
11 // Permission is hereby granted, free of charge, to any person obtaining a\r
12 // copy of this software and associated documentation files (the "Software"),\r
13 // to deal in the Software without restriction, including without limitation\r
14 // the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
15 // and/or sell copies of the Software, and to permit persons to whom the\r
16 // Software is furnished to do so, subject to the following conditions:\r
17 //\r
18 // The above copyright notice and this permission notice shall be included\r
19 // in all copies or substantial portions of the Software.\r
20 //\r
21 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
22 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
23 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\r
24 // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
25 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\r
26 // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER \r
27 // DEALINGS IN THE SOFTWARE.\r
28 #endregion\r
29 \r
30 using System;\r
31 using System.Diagnostics;\r
32 using System.Globalization;\r
33 using System.Collections.Generic;\r
34 using System.IO;\r
35 #if GDI\r
36 using System.Drawing;\r
37 using System.Drawing.Drawing2D;\r
38 using System.Drawing.Imaging;\r
39 #endif\r
40 #if WPF\r
41 using System.Windows;\r
42 using System.Windows.Media;\r
43 using System.Windows.Media.Imaging;\r
44 #endif\r
45 using PdfSharp.Internal;\r
46 using PdfSharp.Pdf;\r
47 using PdfSharp.Drawing.Pdf;\r
48 using PdfSharp.Pdf.Advanced;\r
49 \r
50 namespace PdfSharp.Drawing\r
51 {\r
52   /// <summary>\r
53   /// Helper class for processing image files.\r
54   /// </summary>\r
55   static class ImageHelper\r
56   {\r
57 #if WPF && GDI\r
58     /// <summary>\r
59     /// Creates a WPF bitmap source from an GDI image.\r
60     /// </summary>\r
61     public static BitmapSource CreateBitmapSource(Image image)\r
62     {\r
63       MemoryStream stream = new MemoryStream();\r
64       //int width = image.Width;\r
65       //int height = image.Height;\r
66       //double dpiX = image.HorizontalResolution;\r
67       //double dpiY = image.VerticalResolution;\r
68       //System.Windows.Media.PixelFormat pixelformat = PixelFormats.Default;\r
69       BitmapSource bitmapSource = null;\r
70 \r
71       try\r
72       {\r
73         string guid = image.RawFormat.Guid.ToString("B").ToUpper();\r
74         switch (guid)\r
75         {\r
76           case "{B96B3CAA-0728-11D3-9D7B-0000F81EF32E}":  // memoryBMP\r
77           case "{B96B3CAB-0728-11D3-9D7B-0000F81EF32E}":  // bmp\r
78             image.Save(stream, ImageFormat.Bmp);\r
79             stream.Position = 0;\r
80             BmpBitmapDecoder bmpDecoder = new BmpBitmapDecoder(stream, BitmapCreateOptions.None, BitmapCacheOption.Default);\r
81             bitmapSource = bmpDecoder.Frames[0];\r
82             break;\r
83 \r
84           case "{B96B3CAF-0728-11D3-9D7B-0000F81EF32E}":  // png\r
85             image.Save(stream, ImageFormat.Png);\r
86             stream.Position = 0;\r
87             PngBitmapDecoder pngDecoder = new PngBitmapDecoder(stream, BitmapCreateOptions.None, BitmapCacheOption.Default);\r
88             bitmapSource = pngDecoder.Frames[0];\r
89             break;\r
90 \r
91           case "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}":  // jpeg\r
92             image.Save(stream, ImageFormat.Jpeg);\r
93             JpegBitmapDecoder jpegDecoder = new JpegBitmapDecoder(stream, BitmapCreateOptions.None, BitmapCacheOption.Default);\r
94             stream.Position = 0;\r
95             bitmapSource = jpegDecoder.Frames[0];\r
96             break;\r
97 \r
98           case "{B96B3CB0-0728-11D3-9D7B-0000F81EF32E}":  // gif\r
99             image.Save(stream, ImageFormat.Gif);\r
100             GifBitmapDecoder gifDecoder = new GifBitmapDecoder(stream, BitmapCreateOptions.None, BitmapCacheOption.Default);\r
101             stream.Position = 0;\r
102             bitmapSource = gifDecoder.Frames[0];\r
103             break;\r
104 \r
105           case "{B96B3CB1-0728-11D3-9D7B-0000F81EF32E}":  // tiff\r
106             image.Save(stream, ImageFormat.Tiff);\r
107             TiffBitmapDecoder tiffDecoder = new TiffBitmapDecoder(stream, BitmapCreateOptions.None, BitmapCacheOption.Default);\r
108             stream.Position = 0;\r
109             bitmapSource = tiffDecoder.Frames[0];\r
110             break;\r
111 \r
112           case "{B96B3CB5-0728-11D3-9D7B-0000F81EF32E}":  // icon\r
113             image.Save(stream, ImageFormat.Icon);\r
114             IconBitmapDecoder iconDecoder = new IconBitmapDecoder(stream, BitmapCreateOptions.None, BitmapCacheOption.Default);\r
115             stream.Position = 0;\r
116             bitmapSource = iconDecoder.Frames[0];\r
117             break;\r
118 \r
119           case "{B96B3CAC-0728-11D3-9D7B-0000F81EF32E}":  // emf\r
120           case "{B96B3CAD-0728-11D3-9D7B-0000F81EF32E}":  // wmf\r
121           case "{B96B3CB2-0728-11D3-9D7B-0000F81EF32E}":  // exif\r
122           case "{B96B3CB3-0728-11D3-9D7B-0000F81EF32E}":  // photoCD\r
123           case "{B96B3CB4-0728-11D3-9D7B-0000F81EF32E}":  // flashPIX\r
124 \r
125           default:\r
126             throw new InvalidOperationException("Unsupported image format.");\r
127         }\r
128       }\r
129       catch (Exception ex)\r
130       {\r
131         Debug.WriteLine("ImageHelper.CreateBitmapSource failed:" + ex.Message);\r
132       }\r
133       finally\r
134       {\r
135         //if (stream != null)\r
136         //  stream.Close();\r
137       }\r
138       return bitmapSource;\r
139     }\r
140 #endif\r
141   }\r
142 }