mirror of https://github.com/SixLabors/ImageSharp
188 changed files with 1513 additions and 292 deletions
@ -1,25 +1,15 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<configuration> |
|||
<runtime> |
|||
<assemblyBinding xmlns:bcl="urn:schemas-microsoft-com:bcl" xmlns="urn:schemas-microsoft-com:asm.v1"> |
|||
<dependentAssembly bcl:name="System.Runtime"> |
|||
<assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> |
|||
<bindingRedirect oldVersion="0.0.0.0-2.5.16.0" newVersion="2.5.16.0" /> |
|||
</dependentAssembly> |
|||
<dependentAssembly bcl:name="System.Threading.Tasks"> |
|||
<assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> |
|||
<bindingRedirect oldVersion="0.0.0.0-2.5.16.0" newVersion="2.5.16.0" /> |
|||
</dependentAssembly> |
|||
</assemblyBinding> |
|||
<assemblyBinding xmlns:bcl="urn:schemas-microsoft-com:bcl" xmlns="urn:schemas-microsoft-com:asm.v1"> |
|||
<dependentAssembly bcl:name="System.Runtime"> |
|||
<assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> |
|||
<bindingRedirect oldVersion="0.0.0.0-2.5.16.0" newVersion="2.5.16.0" /> |
|||
</dependentAssembly> |
|||
<dependentAssembly bcl:name="System.Threading.Tasks"> |
|||
<assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> |
|||
<bindingRedirect oldVersion="0.0.0.0-2.5.16.0" newVersion="2.5.16.0" /> |
|||
</dependentAssembly> |
|||
</assemblyBinding> |
|||
</runtime> |
|||
<runtime> |
|||
<assemblyBinding xmlns:bcl="urn:schemas-microsoft-com:bcl" xmlns="urn:schemas-microsoft-com:asm.v1"> |
|||
<dependentAssembly bcl:name="System.Runtime"> |
|||
<assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> |
|||
<bindingRedirect oldVersion="0.0.0.0-2.5.19.0" newVersion="2.5.19.0" /> |
|||
</dependentAssembly> |
|||
<dependentAssembly bcl:name="System.Threading.Tasks"> |
|||
<assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> |
|||
<bindingRedirect oldVersion="0.0.0.0-2.5.19.0" newVersion="2.5.19.0" /> |
|||
</dependentAssembly> |
|||
</assemblyBinding> |
|||
</runtime> |
|||
</configuration> |
|||
@ -1,8 +1,8 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<packages> |
|||
<package id="Csharp-Sqlite" version="3.7.7.1" targetFramework="net40" /> |
|||
<package id="Microsoft.Bcl" version="1.0.16-rc" targetFramework="net40" /> |
|||
<package id="Microsoft.Bcl.Async" version="1.0.14-rc" targetFramework="net40" /> |
|||
<package id="Microsoft.Bcl.Build" version="1.0.0-rc" targetFramework="net40" /> |
|||
<package id="Microsoft.Bcl" version="1.0.19" targetFramework="net40" /> |
|||
<package id="Microsoft.Bcl.Async" version="1.0.16" targetFramework="net40" /> |
|||
<package id="Microsoft.Bcl.Build" version="1.0.5" targetFramework="net40" /> |
|||
<package id="sqlite-net" version="1.0.7" targetFramework="net40" /> |
|||
</packages> |
|||
@ -0,0 +1,76 @@ |
|||
// -----------------------------------------------------------------------
|
|||
// <copyright file="ImageExtensions.cs" company="James South">
|
|||
// Copyright (c) James South.
|
|||
// Licensed under the Apache License, Version 2.0.
|
|||
// </copyright>
|
|||
// -----------------------------------------------------------------------
|
|||
|
|||
namespace ImageProcessor.Helpers.Extensions |
|||
{ |
|||
#region Using
|
|||
|
|||
using System; |
|||
using System.Drawing; |
|||
using System.Drawing.Imaging; |
|||
using System.IO; |
|||
using System.Runtime.InteropServices; |
|||
|
|||
#endregion
|
|||
|
|||
/// <summary>
|
|||
/// Extensions to the <see cref="T:System.Drawing.Image"/> class
|
|||
/// </summary>
|
|||
public static class ImageExtensions |
|||
{ |
|||
/// <summary>
|
|||
/// Converts an image to an array of bytes.
|
|||
/// </summary>
|
|||
/// <param name="image">The <see cref="T:System.Drawing.Image"/> instance that this method extends.</param>
|
|||
/// <param name="imageFormat">The <see cref="T:System.Drawing.Imaging.ImageFormat"/> to export the image with.</param>
|
|||
/// <returns>A byte array representing the current image.</returns>
|
|||
public static byte[] ToBytes(this Image image, ImageFormat imageFormat) |
|||
{ |
|||
BitmapData data = ((Bitmap)image).LockBits(new Rectangle(0, 0, image.Width, image.Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb); |
|||
int length = image.Width * image.Height * 4; |
|||
byte[] byteArray = new byte[length]; |
|||
|
|||
if (data.Stride == image.Width * 4) |
|||
{ |
|||
Marshal.Copy(data.Scan0, byteArray, 0, length); |
|||
} |
|||
else |
|||
{ |
|||
for (int i = 0, l = image.Height; i < l; i++) |
|||
{ |
|||
IntPtr p = new IntPtr(data.Scan0.ToInt32() + data.Stride * i); |
|||
Marshal.Copy(p, byteArray, i * image.Width * 4, image.Width * 4); |
|||
} |
|||
} |
|||
|
|||
((Bitmap)image).UnlockBits(data); |
|||
|
|||
return byteArray; |
|||
} |
|||
|
|||
public static Image FromBytes(this Image image, byte[] bytes) |
|||
{ |
|||
BitmapData data = ((Bitmap)image).LockBits(new Rectangle(0, 0, image.Width, image.Height), ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb); |
|||
|
|||
if (data.Stride == image.Width * 4) |
|||
{ |
|||
Marshal.Copy(bytes, 0, data.Scan0, bytes.Length); |
|||
} |
|||
else |
|||
{ |
|||
for (int i = 0, l = image.Height; i < l; i++) |
|||
{ |
|||
IntPtr p = new IntPtr(data.Scan0.ToInt32() + data.Stride * i); |
|||
Marshal.Copy(bytes, i * image.Width * 4, p, image.Width * 4); |
|||
} |
|||
} |
|||
|
|||
((Bitmap)image).UnlockBits(data); |
|||
return image; |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,291 @@ |
|||
// -----------------------------------------------------------------------
|
|||
// <copyright file="GaussianBlur.cs" company="James South">
|
|||
// Copyright (c) James South.
|
|||
// Licensed under the Apache License, Version 2.0.
|
|||
// </copyright>
|
|||
// -----------------------------------------------------------------------
|
|||
|
|||
namespace ImageProcessor.Processors |
|||
{ |
|||
#region Using
|
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Drawing; |
|||
using System.Drawing.Imaging; |
|||
using System.IO; |
|||
using System.Text.RegularExpressions; |
|||
using ImageProcessor.Helpers.Extensions; |
|||
#endregion
|
|||
|
|||
/// <summary>
|
|||
/// Applies a Gaussian blur to the image.
|
|||
/// Adapted from <see cref="http://code.google.com/p/imagelibrary/source/browse/trunk/Filters/GaussianBlurFilter.cs"/>
|
|||
/// </summary>
|
|||
public class GaussianBlur : IGraphicsProcessor |
|||
{ |
|||
/// <summary>
|
|||
/// The regular expression to search strings for.
|
|||
/// </summary>
|
|||
private static readonly Regex QueryRegex = new Regex(@"blur=(\d+(.\d+)?)", RegexOptions.Compiled); |
|||
|
|||
#region IGraphicsProcessor Members
|
|||
/// <summary>
|
|||
/// Gets the regular expression to search strings for.
|
|||
/// </summary>
|
|||
public Regex RegexPattern |
|||
{ |
|||
get |
|||
{ |
|||
return QueryRegex; |
|||
} |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// Gets or sets DynamicParameter.
|
|||
/// </summary>
|
|||
public dynamic DynamicParameter |
|||
{ |
|||
get; |
|||
set; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// Gets the order in which this processor is to be used in a chain.
|
|||
/// </summary>
|
|||
public int SortOrder |
|||
{ |
|||
get; |
|||
private set; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// Gets or sets any additional settings required by the processor.
|
|||
/// </summary>
|
|||
public Dictionary<string, string> Settings |
|||
{ |
|||
get; |
|||
set; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// The position in the original string where the first character of the captured substring was found.
|
|||
/// </summary>
|
|||
/// <param name="queryString">
|
|||
/// The query string to search.
|
|||
/// </param>
|
|||
/// <returns>
|
|||
/// The zero-based starting position in the original string where the captured substring was found.
|
|||
/// </returns>
|
|||
public int MatchRegexIndex(string queryString) |
|||
{ |
|||
int index = 0; |
|||
|
|||
// Set the sort order to max to allow filtering.
|
|||
this.SortOrder = int.MaxValue; |
|||
|
|||
foreach (Match match in this.RegexPattern.Matches(queryString)) |
|||
{ |
|||
if (match.Success) |
|||
{ |
|||
if (index == 0) |
|||
{ |
|||
// Set the index on the first instance only.
|
|||
this.SortOrder = match.Index; |
|||
this.DynamicParameter = match.Value.Split('=')[1]; |
|||
} |
|||
|
|||
index += 1; |
|||
} |
|||
} |
|||
|
|||
return this.SortOrder; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// Processes the image.
|
|||
/// </summary>
|
|||
/// <param name="factory">
|
|||
/// The the current instance of the <see cref="T:ImageProcessor.ImageFactory"/> class containing
|
|||
/// the image to process.
|
|||
/// </param>
|
|||
/// <returns>
|
|||
/// The processed image from the current instance of the <see cref="T:ImageProcessor.ImageFactory"/> class.
|
|||
/// </returns>
|
|||
public Image ProcessImage(ImageFactory factory) |
|||
{ |
|||
Bitmap newImage = null; |
|||
Image image = factory.Image; |
|||
|
|||
try |
|||
{ |
|||
double radius = double.Parse(this.DynamicParameter); |
|||
byte[] sourceBytes = image.ToBytes(factory.ImageFormat); |
|||
byte[] destinationBytes = new byte[sourceBytes.Length]; |
|||
|
|||
this.ApplyGaussianBlur(image.Width, image.Height, radius, 1, ref sourceBytes, ref destinationBytes); |
|||
|
|||
|
|||
// Don't use an object initializer here.
|
|||
newImage = new Bitmap(image.Width, image.Height, PixelFormat.Format32bppPArgb); |
|||
newImage = (Bitmap)newImage.FromBytes(destinationBytes); |
|||
newImage.Tag = image.Tag; |
|||
|
|||
|
|||
image.Dispose(); |
|||
image = newImage; |
|||
} |
|||
catch (Exception ex) |
|||
{ |
|||
var x = ex; |
|||
if (newImage != null) |
|||
{ |
|||
newImage.Dispose(); |
|||
} |
|||
} |
|||
|
|||
return image; |
|||
} |
|||
#endregion
|
|||
|
|||
#region Private
|
|||
/// <summary>
|
|||
/// The apply gaussian blur.
|
|||
/// </summary>
|
|||
/// <param name="width">
|
|||
/// The width.
|
|||
/// </param>
|
|||
/// <param name="height">
|
|||
/// The height.
|
|||
/// </param>
|
|||
/// <param name="radius">
|
|||
/// The radius.
|
|||
/// </param>
|
|||
/// <param name="sourceBytes">
|
|||
/// The source bytes array.
|
|||
/// </param>
|
|||
/// <param name="destinationBytes">
|
|||
/// The destination byte array.
|
|||
/// </param>
|
|||
private void ApplyGaussianBlur(int width, int height, double radius, double amount, ref byte[] src, ref byte[] dst) |
|||
{ |
|||
|
|||
int shift, dest, source; |
|||
int blurDiam = (int)Math.Pow(radius, 2); |
|||
int gaussWidth = (blurDiam * 2) + 1; |
|||
|
|||
double[] kernel = CreateKernel(gaussWidth, blurDiam); |
|||
|
|||
// Calculate the sum of the Gaussian kernel
|
|||
double gaussSum = 0; |
|||
for (int n = 0; n < gaussWidth; n++) |
|||
{ |
|||
gaussSum += kernel[n]; |
|||
} |
|||
|
|||
// Scale the Gaussian kernel
|
|||
for (int n = 0; n < gaussWidth; n++) |
|||
{ |
|||
kernel[n] = kernel[n] / gaussSum; |
|||
} |
|||
//premul = kernel[k] / gaussSum;
|
|||
|
|||
|
|||
// Create an X & Y pass buffer
|
|||
byte[] gaussPassX = new byte[src.Length]; |
|||
|
|||
// Do Horizontal Pass
|
|||
for (int y = 0; y < height; y++) |
|||
{ |
|||
for (int x = 0; x < width; x++) |
|||
{ |
|||
dest = y * width + x; |
|||
|
|||
// Iterate through kernel
|
|||
for (int k = 0; k < gaussWidth; k++) |
|||
{ |
|||
|
|||
// Get pixel-shift (pixel dist between dest and source)
|
|||
shift = k - blurDiam; |
|||
|
|||
// Basic edge clamp
|
|||
source = dest + shift; |
|||
if (x + shift <= 0 || x + shift >= width) |
|||
{ |
|||
source = dest; |
|||
} |
|||
|
|||
// Combine source and destination pixels with Gaussian Weight
|
|||
gaussPassX[(dest << 2) + 2] = (byte)(gaussPassX[(dest << 2) + 2] + (src[(source << 2) + 2]) * kernel[k]); |
|||
gaussPassX[(dest << 2) + 1] = (byte)(gaussPassX[(dest << 2) + 1] + (src[(source << 2) + 1]) * kernel[k]); |
|||
gaussPassX[(dest << 2)] = (byte)(gaussPassX[(dest << 2)] + (src[(source << 2)]) * kernel[k]); |
|||
} |
|||
} |
|||
} |
|||
|
|||
// Do Vertical Pass
|
|||
for (int x = 0; x < width; x++) |
|||
{ |
|||
for (int y = 0; y < height; y++) |
|||
{ |
|||
dest = y * width + x; |
|||
|
|||
// Iterate through kernel
|
|||
for (int k = 0; k < gaussWidth; k++) |
|||
{ |
|||
// Get pixel-shift (pixel dist between dest and source)
|
|||
shift = k - blurDiam; |
|||
|
|||
// Basic edge clamp
|
|||
source = dest + (shift * width); |
|||
if (y + shift <= 0 || y + shift >= height) |
|||
{ |
|||
source = dest; |
|||
} |
|||
|
|||
// Combine source and destination pixels with Gaussian Weight
|
|||
dst[(dest << 2) + 2] = (byte)(dst[(dest << 2) + 2] + (gaussPassX[(source << 2) + 2]) * kernel[k]); |
|||
dst[(dest << 2) + 1] = (byte)(dst[(dest << 2) + 1] + (gaussPassX[(source << 2) + 1]) * kernel[k]); |
|||
dst[(dest << 2)] = (byte)(dst[(dest << 2)] + (gaussPassX[(source << 2)]) * kernel[k]); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// Creates the Gaussian kernel.
|
|||
/// </summary>
|
|||
/// <param name="gaussianWidth">
|
|||
/// The gaussian width.
|
|||
/// </param>
|
|||
/// <param name="blurDiameter">
|
|||
/// The blur diameter.
|
|||
/// </param>
|
|||
/// <returns>
|
|||
/// The <see cref="double"/>.
|
|||
/// </returns>
|
|||
private double[] CreateKernel(int gaussianWidth, int blurDiam) |
|||
{ |
|||
|
|||
double[] kernel = new double[gaussianWidth]; |
|||
|
|||
// Set the maximum value of the Gaussian curve
|
|||
const double sd = 255; |
|||
|
|||
// Set the width of the Gaussian curve
|
|||
double range = gaussianWidth; |
|||
|
|||
// Set the average value of the Gaussian curve
|
|||
double mean = (range / sd); |
|||
|
|||
// Set first half of Gaussian curve in kernel
|
|||
for (int pos = 0, len = blurDiam + 1; pos < len; pos++) |
|||
{ |
|||
// Distribute Gaussian curve across kernel[array]
|
|||
kernel[gaussianWidth - 1 - pos] = kernel[pos] = Math.Sqrt(Math.Sin((((pos + 1) * (Math.PI / 2)) - mean) / range)) * sd; |
|||
} |
|||
|
|||
return kernel; |
|||
} |
|||
#endregion
|
|||
} |
|||
} |
|||
@ -0,0 +1 @@ |
|||
46b009d93ab9f1ea75f1ea1efb0073b3d369d3e5 |
|||
@ -1 +0,0 @@ |
|||
30ff7aa1ad2a7eedde4972dee464f229d4459439 |
|||
@ -1 +0,0 @@ |
|||
168ac0ce88f1c4eeb97a4ad4665e4f0f3bfc4fd6 |
|||
@ -1,15 +0,0 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<configuration> |
|||
<runtime> |
|||
<assemblyBinding xmlns:bcl="urn:schemas-microsoft-com:bcl" xmlns="urn:schemas-microsoft-com:asm.v1"> |
|||
<dependentAssembly bcl:name="System.Runtime"> |
|||
<assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> |
|||
<bindingRedirect oldVersion="0.0.0.0-2.5.16.0" newVersion="2.5.16.0" /> |
|||
</dependentAssembly> |
|||
<dependentAssembly bcl:name="System.Threading.Tasks"> |
|||
<assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> |
|||
<bindingRedirect oldVersion="0.0.0.0-2.5.16.0" newVersion="2.5.16.0" /> |
|||
</dependentAssembly> |
|||
</assemblyBinding> |
|||
</runtime> |
|||
</configuration> |
|||
@ -1,15 +0,0 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<configuration> |
|||
<runtime> |
|||
<assemblyBinding xmlns:bcl="urn:schemas-microsoft-com:bcl" xmlns="urn:schemas-microsoft-com:asm.v1"> |
|||
<dependentAssembly bcl:name="System.Runtime"> |
|||
<assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> |
|||
<bindingRedirect oldVersion="0.0.0.0-2.5.16.0" newVersion="2.5.16.0" /> |
|||
</dependentAssembly> |
|||
<dependentAssembly bcl:name="System.Threading.Tasks"> |
|||
<assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> |
|||
<bindingRedirect oldVersion="0.0.0.0-2.5.16.0" newVersion="2.5.16.0" /> |
|||
</dependentAssembly> |
|||
</assemblyBinding> |
|||
</runtime> |
|||
</configuration> |
|||
@ -1,15 +0,0 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<configuration> |
|||
<runtime> |
|||
<assemblyBinding xmlns:bcl="urn:schemas-microsoft-com:bcl" xmlns="urn:schemas-microsoft-com:asm.v1"> |
|||
<dependentAssembly bcl:name="System.Runtime"> |
|||
<assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> |
|||
<bindingRedirect oldVersion="0.0.0.0-1.5.11.0" newVersion="1.5.11.0" /> |
|||
</dependentAssembly> |
|||
<dependentAssembly bcl:name="System.Threading.Tasks"> |
|||
<assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> |
|||
<bindingRedirect oldVersion="0.0.0.0-1.5.11.0" newVersion="1.5.11.0" /> |
|||
</dependentAssembly> |
|||
</assemblyBinding> |
|||
</runtime> |
|||
</configuration> |
|||
@ -1,15 +0,0 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<configuration> |
|||
<runtime> |
|||
<assemblyBinding xmlns:bcl="urn:schemas-microsoft-com:bcl" xmlns="urn:schemas-microsoft-com:asm.v1"> |
|||
<dependentAssembly bcl:name="System.Runtime"> |
|||
<assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> |
|||
<bindingRedirect oldVersion="0.0.0.0-2.5.16.0" newVersion="2.5.16.0" /> |
|||
</dependentAssembly> |
|||
<dependentAssembly bcl:name="System.Threading.Tasks"> |
|||
<assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> |
|||
<bindingRedirect oldVersion="0.0.0.0-1.5.11.0" newVersion="1.5.11.0" /> |
|||
</dependentAssembly> |
|||
</assemblyBinding> |
|||
</runtime> |
|||
</configuration> |
|||
@ -1,15 +0,0 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<configuration> |
|||
<runtime> |
|||
<assemblyBinding xmlns:bcl="urn:schemas-microsoft-com:bcl" xmlns="urn:schemas-microsoft-com:asm.v1"> |
|||
<dependentAssembly bcl:name="System.Runtime"> |
|||
<assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> |
|||
<bindingRedirect oldVersion="0.0.0.0-2.5.16.0" newVersion="2.5.16.0" /> |
|||
</dependentAssembly> |
|||
<dependentAssembly bcl:name="System.Threading.Tasks"> |
|||
<assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> |
|||
<bindingRedirect oldVersion="0.0.0.0-1.5.11.0" newVersion="1.5.11.0" /> |
|||
</dependentAssembly> |
|||
</assemblyBinding> |
|||
</runtime> |
|||
</configuration> |
|||
@ -1,15 +0,0 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<configuration> |
|||
<runtime> |
|||
<assemblyBinding xmlns:bcl="urn:schemas-microsoft-com:bcl" xmlns="urn:schemas-microsoft-com:asm.v1"> |
|||
<dependentAssembly bcl:name="System.Runtime"> |
|||
<assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> |
|||
<bindingRedirect oldVersion="0.0.0.0-2.5.16.0" newVersion="2.5.16.0" /> |
|||
</dependentAssembly> |
|||
<dependentAssembly bcl:name="System.Threading.Tasks"> |
|||
<assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> |
|||
<bindingRedirect oldVersion="0.0.0.0-2.5.16.0" newVersion="2.5.16.0" /> |
|||
</dependentAssembly> |
|||
</assemblyBinding> |
|||
</runtime> |
|||
</configuration> |
|||
@ -1,15 +0,0 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<configuration> |
|||
<runtime> |
|||
<assemblyBinding xmlns:bcl="urn:schemas-microsoft-com:bcl" xmlns="urn:schemas-microsoft-com:asm.v1"> |
|||
<dependentAssembly bcl:name="System.Runtime"> |
|||
<assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> |
|||
<bindingRedirect oldVersion="0.0.0.0-2.5.16.0" newVersion="2.5.16.0" /> |
|||
</dependentAssembly> |
|||
<dependentAssembly bcl:name="System.Threading.Tasks"> |
|||
<assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> |
|||
<bindingRedirect oldVersion="0.0.0.0-2.5.16.0" newVersion="2.5.16.0" /> |
|||
</dependentAssembly> |
|||
</assemblyBinding> |
|||
</runtime> |
|||
</configuration> |
|||
@ -1,15 +0,0 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<configuration> |
|||
<runtime> |
|||
<assemblyBinding xmlns:bcl="urn:schemas-microsoft-com:bcl" xmlns="urn:schemas-microsoft-com:asm.v1"> |
|||
<dependentAssembly bcl:name="System.Runtime"> |
|||
<assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> |
|||
<bindingRedirect oldVersion="0.0.0.0-2.5.16.0" newVersion="2.5.16.0" /> |
|||
</dependentAssembly> |
|||
<dependentAssembly bcl:name="System.Threading.Tasks"> |
|||
<assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> |
|||
<bindingRedirect oldVersion="0.0.0.0-2.5.16.0" newVersion="2.5.16.0" /> |
|||
</dependentAssembly> |
|||
</assemblyBinding> |
|||
</runtime> |
|||
</configuration> |
|||
@ -1,15 +0,0 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<configuration> |
|||
<runtime> |
|||
<assemblyBinding xmlns:bcl="urn:schemas-microsoft-com:bcl" xmlns="urn:schemas-microsoft-com:asm.v1"> |
|||
<dependentAssembly bcl:name="System.Runtime"> |
|||
<assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> |
|||
<bindingRedirect oldVersion="0.0.0.0-1.5.11.0" newVersion="1.5.11.0" /> |
|||
</dependentAssembly> |
|||
<dependentAssembly bcl:name="System.Threading.Tasks"> |
|||
<assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> |
|||
<bindingRedirect oldVersion="0.0.0.0-1.5.11.0" newVersion="1.5.11.0" /> |
|||
</dependentAssembly> |
|||
</assemblyBinding> |
|||
</runtime> |
|||
</configuration> |
|||
Binary file not shown.
Binary file not shown.
@ -1 +0,0 @@ |
|||
9962594785f41f62455059efef8b8007e719a054 |
|||
Binary file not shown.
@ -1 +0,0 @@ |
|||
9962594785f41f62455059efef8b8007e719a054 |
|||
Binary file not shown.
@ -1 +0,0 @@ |
|||
9962594785f41f62455059efef8b8007e719a054 |
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1 +0,0 @@ |
|||
9962594785f41f62455059efef8b8007e719a054 |
|||
Binary file not shown.
@ -1 +0,0 @@ |
|||
9962594785f41f62455059efef8b8007e719a054 |
|||
Binary file not shown.
Binary file not shown.
@ -0,0 +1 @@ |
|||
2fb0cf4c397e4b7deeec1d26755ca05d7831c405 |
|||
@ -0,0 +1 @@ |
|||
8383f696d05c6a3f3061683355d21bd2a303c8a4 |
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1 @@ |
|||
74f5e2caed93499de991cfd5ed70b868e5207474 |
|||
Binary file not shown.
@ -0,0 +1 @@ |
|||
74f5e2caed93499de991cfd5ed70b868e5207474 |
|||
Binary file not shown.
@ -0,0 +1 @@ |
|||
74f5e2caed93499de991cfd5ed70b868e5207474 |
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1 @@ |
|||
74f5e2caed93499de991cfd5ed70b868e5207474 |
|||
Binary file not shown.
@ -0,0 +1 @@ |
|||
74f5e2caed93499de991cfd5ed70b868e5207474 |
|||
Binary file not shown.
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue