@@ -23,6 +23,11 @@ res_type: kb
23
23
<td>RadPdfProcessing</td>
24
24
<td><a href="https://www.telerik.com/blogs/author/yoan-karamanov">Yoan Karamanov</a></td>
25
25
</tr>
26
+ <tr>
27
+ <td>2.0.0*</td>
28
+ <td>SixLabors.ImageSharp</td>
29
+ <td>-</td>
30
+ </tr>
26
31
</tbody >
27
32
</table >
28
33
@@ -34,158 +39,161 @@ res_type: kb
34
39
35
40
## Solution
36
41
37
- The following code snippets demonstrates how to create a custom implementation of the ImagePropertiesResolver abstract class using the [ SixLabors.ImageSharp] ( https://github.com/SixLabors/ImageSharp ) library and set it to the ImagePropertiesResolver property of the FixedExtensibilityManager.
42
+ The following code snippets demonstrate how to create a custom implementation of the ImagePropertiesResolver abstract class using the [ SixLabors.ImageSharp] ( https://github.com/SixLabors/ImageSharp ) (2.0.0) library and set it to the ** ImagePropertiesResolver** property of the ** FixedExtensibilityManager** .
38
43
39
44
#### __ [ C#] Create a custom implementation inheriting the ImagePropertiesResolverBase abstract class__
40
45
41
- {{region kb-create-custom-image-properties-resolver1}}
46
+ ``` csharp
42
47
43
- public class ImagePropertiesResolver : ImagePropertiesResolverBase
48
+ public class ImagePropertiesResolver : ImagePropertiesResolverBase
49
+ {
50
+ public override Telerik.Documents.Primitives.Size GetImageSize (byte [] imageData )
44
51
{
45
- public override Telerik.Documents.Primitives.Size GetImageSize(byte[] imageData)
52
+ var size = Telerik .Documents .Primitives .Size .Empty ;
53
+ try
46
54
{
47
- var size = Telerik.Documents.Primitives.Size.Empty;
48
- try
55
+ using (SixLabors .ImageSharp .Image image = SixLabors .ImageSharp .Image .Load (imageData ))
49
56
{
50
- using (ImageSharp image = ImageSharp.Load(imageData))
51
- {
52
- size = new Telerik.Documents.Primitives.Size(image.Width, image.Height);
53
- }
57
+ size = new Telerik .Documents .Primitives .Size (image .Width , image .Height );
54
58
}
55
- catch (UnknownImageFormatException ex)
56
- {
57
- // Image format not recognized.
58
- throw new NotSupportedException("Unsupported image format.", ex);
59
- }
60
-
61
- return size;
62
59
}
63
-
64
- public override bool TryGetRawImageData(byte[] imageData, out byte[] rawRgbData, out byte[] rawAlpha, out Telerik.Documents.Primitives.Size size)
60
+ catch (SixLabors .ImageSharp .UnknownImageFormatException ex )
65
61
{
66
- try
67
- {
68
- IImageFormat imageFormat;
69
- using (ImageSharp image = ImageSharp.Load(imageData, out imageFormat))
70
- {
71
- size = new Telerik.Documents.Primitives.Size(image.Width, image.Height);
72
-
73
- IImageDecoder decoder = null;
74
- Dictionary<Type, Action> decoderSwitch = new Dictionary<Type, Action>
75
- {
76
- { typeof(PngFormat), () => decoder = new PngDecoder() },
77
- { typeof(BmpFormat), () => decoder = new BmpDecoder() },
78
- { typeof(GifFormat), () => decoder = new GifDecoder() },
79
- { typeof(JpegFormat), () => decoder = new JpegDecoder() },
80
- { typeof(PbmFormat), () => decoder = new PbmDecoder() },
81
- { typeof(TgaFormat), () => decoder = new TgaDecoder() },
82
- { typeof(TiffFormat), () => decoder = new TiffDecoder() },
83
- { typeof(WebpFormat), () => decoder = new WebpDecoder() },
84
- };
85
-
86
- if (decoderSwitch.ContainsKey(imageFormat.GetType()))
87
- {
88
- decoderSwitch[imageFormat.GetType()]();
89
- }
90
- else
91
- {
92
- rawRgbData = null;
93
- rawAlpha = null;
94
-
95
- return false;
96
- }
62
+ // Image format not recognized.
63
+ throw new NotSupportedException (" Unsupported image format." , ex );
64
+ }
97
65
98
- Configuration configuration = new Configuration() ;
99
- ImageSharp decodedImage = decoder.Decode(configuration, new MemoryStream(imageData));
66
+ return size ;
67
+ }
100
68
101
- ImageFrame frame = decodedImage.Frames[0];
69
+ public override bool TryGetRawImageData (byte [] imageData , out byte [] rawRgbData , out byte [] rawAlpha , out Telerik .Documents.Primitives.Size size )
70
+ {
71
+ try
72
+ {
73
+ IImageFormat imageFormat ;
74
+ using (SixLabors .ImageSharp .Image image = SixLabors .ImageSharp .Image .Load (imageData , out imageFormat ))
75
+ {
76
+ size = new Telerik .Documents .Primitives .Size (image .Width , image .Height );
102
77
103
- ImageFrame<Rgb24> frameRgb24 = frame as ImageFrame<Rgb24> ;
104
- if (frameRgb24 != null)
78
+ IImageDecoder decoder = null ;
79
+ Dictionary < Type , Action > decoderSwitch = new Dictionary < Type , Action >
105
80
{
106
- GetRawDataFromRgbSource(frameRgb24, out rawRgbData);
107
- rawAlpha = null;
81
+ { typeof (PngFormat ), () => decoder = new PngDecoder () },
82
+ { typeof (BmpFormat ), () => decoder = new BmpDecoder () },
83
+ { typeof (GifFormat ), () => decoder = new GifDecoder () },
84
+ { typeof (JpegFormat ), () => decoder = new JpegDecoder () },
85
+ { typeof (PbmFormat ), () => decoder = new PbmDecoder () },
86
+ { typeof (TgaFormat ), () => decoder = new TgaDecoder () },
87
+ { typeof (TiffFormat ), () => decoder = new TiffDecoder () },
88
+ { typeof (WebpFormat ), () => decoder = new WebpDecoder () },
89
+ };
90
+
91
+ if (decoderSwitch .ContainsKey (imageFormat .GetType ()))
92
+ {
93
+ decoderSwitch [imageFormat .GetType ()]();
94
+ }
95
+ else
96
+ {
97
+ rawRgbData = null ;
98
+ rawAlpha = null ;
108
99
109
- return true ;
110
- }
100
+ return false ;
101
+ }
111
102
112
- ImageFrame<Rgba32> frameRgba32 = frame as ImageFrame<Rgba32>;
113
- if (frameRgba32 != null)
114
- {
115
- GetRawDataFromRgbaSource(frameRgba32, out rawRgbData, out rawAlpha);
103
+ SixLabors .ImageSharp .Configuration configuration = new SixLabors .ImageSharp .Configuration ();
104
+ SixLabors .ImageSharp .Image decodedImage = decoder .Decode (configuration , new MemoryStream (imageData ));
116
105
117
- return true;
118
- }
106
+ SixLabors .ImageSharp .ImageFrame frame = decodedImage .Frames [0 ];
119
107
120
- throw new NotSupportedException("Not supported image pixel format.");
121
- }
122
- }
123
- catch (Exception ex)
124
- {
125
- if (ex is UnknownImageFormatException || ex is ImageProcessingException)
108
+ SixLabors .ImageSharp .ImageFrame < Rgb24 > frameRgb24 = frame as SixLabors .ImageSharp .ImageFrame <Rgb24 >;
109
+ if (frameRgb24 != null )
126
110
{
127
- rawRgbData = null ;
111
+ GetRawDataFromRgbSource ( frameRgb24 , out rawRgbData ) ;
128
112
rawAlpha = null ;
129
- size = new Telerik.Documents.Primitives.Size();
130
113
131
- return false ;
114
+ return true ;
132
115
}
133
- else
116
+
117
+ SixLabors .ImageSharp .ImageFrame < Rgba32 > frameRgba32 = frame as SixLabors .ImageSharp .ImageFrame <Rgba32 >;
118
+ if (frameRgba32 != null )
134
119
{
135
- throw ex;
120
+ GetRawDataFromRgbaSource (frameRgba32 , out rawRgbData , out rawAlpha );
121
+
122
+ return true ;
136
123
}
124
+
125
+ throw new NotSupportedException (" Not supported image pixel format." );
137
126
}
138
127
}
139
-
140
- private static void GetRawDataFromRgbSource(ImageFrame<Rgb24> source, out byte[] data)
128
+ catch (Exception ex )
141
129
{
142
- byte[] pixels = new byte[source.PixelBuffer.Width * source.PixelBuffer.Height * 3];
143
- Span<byte> span = new Span<byte>(pixels);
144
- source.CopyPixelDataTo(span);
145
- data = span.ToArray();
130
+ if (ex is SixLabors .ImageSharp .UnknownImageFormatException || ex is SixLabors .ImageSharp .ImageProcessingException )
131
+ {
132
+ rawRgbData = null ;
133
+ rawAlpha = null ;
134
+ size = new Telerik .Documents .Primitives .Size ();
135
+
136
+ return false ;
137
+ }
138
+ else
139
+ {
140
+ throw ex ;
141
+ }
146
142
}
143
+ }
147
144
148
- private static void GetRawDataFromRgbaSource(ImageFrame<Rgba32> source, out byte[] data, out byte[] alpha)
149
- {
150
- byte[] pixels = new byte[source.PixelBuffer.Width * source.PixelBuffer.Height * 4];
151
- Span<byte> span = new Span<byte>(pixels);
152
- source.CopyPixelDataTo(span);
145
+ private static void GetRawDataFromRgbSource (SixLabors.ImageSharp.ImageFrame <Rgb24 > source , out byte [] data )
146
+ {
147
+ byte [] pixels = new byte [source .PixelBuffer .Width * source .PixelBuffer .Height * 3 ];
148
+ Span < byte > span = new Span <byte >(pixels );
149
+ source .CopyPixelDataTo (span );
150
+ data = span .ToArray ();
151
+ }
153
152
154
- data = new byte[source.PixelBuffer.Width * source.PixelBuffer.Height * 3];
155
- alpha = new byte[source.PixelBuffer.Width * source.PixelBuffer.Height];
156
- bool shouldExportAlpha = false;
153
+ private static void GetRawDataFromRgbaSource (SixLabors.ImageSharp.ImageFrame <Rgba32 > source , out byte [] data , out byte [] alpha )
154
+ {
155
+ byte [] pixels = new byte [source .PixelBuffer .Width * source .PixelBuffer .Height * 4 ];
156
+ Span < byte > span = new Span <byte >(pixels );
157
+ source .CopyPixelDataTo (span );
157
158
158
- for (int i = 0; i < pixels.Length; i += 4)
159
- {
160
- byte r = pixels[i];
161
- byte g = pixels[i + 1];
162
- byte b = pixels[i + 2];
163
- byte a = pixels[i + 3];
159
+ data = new byte [source .PixelBuffer .Width * source .PixelBuffer .Height * 3 ];
160
+ alpha = new byte [source .PixelBuffer .Width * source .PixelBuffer .Height ];
161
+ bool shouldExportAlpha = false ;
164
162
165
- data[3 * i / 4] = r;
166
- data[3 * i / 4 + 1] = g;
167
- data[3 * i / 4 + 2] = b;
168
- alpha[i / 4] = a;
163
+ for (int i = 0 ; i < pixels .Length ; i += 4 )
164
+ {
165
+ byte r = pixels [i ];
166
+ byte g = pixels [i + 1 ];
167
+ byte b = pixels [i + 2 ];
168
+ byte a = pixels [i + 3 ];
169
169
170
- if (a != 255)
171
- {
172
- shouldExportAlpha = true;
173
- }
174
- }
170
+ data [3 * i / 4 ] = r ;
171
+ data [3 * i / 4 + 1 ] = g ;
172
+ data [3 * i / 4 + 2 ] = b ;
173
+ alpha [i / 4 ] = a ;
175
174
176
- if (!shouldExportAlpha )
175
+ if (a != 255 )
177
176
{
178
- alpha = null ;
177
+ shouldExportAlpha = true ;
179
178
}
180
179
}
180
+
181
+ if (! shouldExportAlpha )
182
+ {
183
+ alpha = null ;
184
+ }
181
185
}
182
186
183
- {{endregion}}
187
+ ```
184
188
185
189
#### __[C#] Set the custom implementation to the ImagePropertiesResolver property of the FixedExtensibilityManager__
186
190
187
- {{region kb-create-custom-image-properties-resolver2}}
191
+ ```csharp
188
192
189
193
ImagePropertiesResolver customImagePropertiesResolver = new ImagePropertiesResolver ();
190
194
FixedExtensibilityManager.ImagePropertiesResolver = customImagePropertiesResolver ;
191
- {{endregion}}
195
+ ```
196
+
197
+ ## See Also
198
+
199
+ - [Cross -Platform Images Support in PdfProcessing ]({%slug radpdfprocessing-cross-platform-images%})
0 commit comments