-
Notifications
You must be signed in to change notification settings - Fork 8
Expand file tree
/
Copy pathBitmapExtensions.cs
More file actions
61 lines (54 loc) · 2 KB
/
BitmapExtensions.cs
File metadata and controls
61 lines (54 loc) · 2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
namespace OpenSlideSharp.BitmapExtensions
{
/// <summary>
///
/// </summary>
public static class BitmapExtensions
{
private static IDictionary<Guid, IList<ImageCodecInfo>> encoders = new Dictionary<Guid, IList<ImageCodecInfo>>();
static BitmapExtensions()
{
ImageCodecInfo[] array = ImageCodecInfo.GetImageEncoders();
foreach (var coder in array)
{
if (encoders.ContainsKey(coder.FormatID))
encoders[coder.FormatID].Add(coder);
else
encoders[coder.FormatID] = new List<ImageCodecInfo>(new[] { coder });
}
}
/// <summary>
/// To Stream
/// </summary>
/// <param name="bitmap"></param>
/// <param name="format">image out format,null is JPEG</param>
/// <param name="quality">image quality</param>
/// <returns></returns>
public static MemoryStream ToStream(this Image bitmap, ImageFormat format = null, int? quality = null)
{
if (bitmap == null) throw new NullReferenceException();
var ms = new MemoryStream();
EncoderParameters parameters = quality.HasValue ? new EncoderParameters() { Param = new[] { new EncoderParameter(Encoder.Quality, quality.Value) } } : null;
bitmap.Save(ms, (format ?? ImageFormat.Jpeg).FindCodec(), parameters);
ms.Seek(0, SeekOrigin.Begin);
return ms;
}
/// <summary>
/// Find codec for format
/// </summary>
/// <param name="format"></param>
/// <returns></returns>
public static ImageCodecInfo FindCodec(this ImageFormat format)
{
if (encoders.ContainsKey(format.Guid))
return encoders[format.Guid].FirstOrDefault();
return null;
}
}
}