diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
index ff3c9605c6..188c11ff31 100644
--- a/.github/CONTRIBUTING.md
+++ b/.github/CONTRIBUTING.md
@@ -1,10 +1,10 @@
-# How to contribute to ImageSHarp
+# How to contribute to ImageSharp
#### **Did you find a bug?**
-- Please **ensure the bug was not already reported** by searching on GitHub under [Issues](https://github.com/JimBobSquarePants/ImageSharp/issues).
+- Please **ensure the bug was not already reported** by searching on GitHub under [Issues](https://github.com/SixLabors/ImageSharp/issues).
-- If you're unable to find an open issue addressing the problem, please [open a new one](https://github.com/JimBobSquarePants/ImageSharp/issues/new). Be sure to include a **title, the applicable version, a clear description**, as much relevant information as possible, and a **code sample** or an **executable test case** demonstrating the expected behavior that is not occurring. Please do not hijack existing issues.
+- If you're unable to find an open issue addressing the problem, please [open a new one](https://github.com/SixLabors/ImageSharp/issues/new). Be sure to include a **title, the applicable version, a clear description**, as much relevant information as possible, and a **code sample** or an **executable test case** demonstrating the expected behavior that is not occurring. Please do not hijack existing issues.
#### **Did you write a patch that fixes a bug?**
diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md
index e2c1276eb8..a172605e64 100644
--- a/.github/ISSUE_TEMPLATE.md
+++ b/.github/ISSUE_TEMPLATE.md
@@ -3,7 +3,7 @@
- [ ] I have written a descriptive issue title
- [ ] I have verified that I am running the latest version of ImageSharp
- [ ] I have verified if the problem exist in both `DEBUG` and `RELEASE` mode
-- [ ] I have searched [open](https://github.com/JimBobSquarePants/ImageSharp/issuess) and [closed](https://github.com/JimBobSquarePants/ImageSharp/issues?q=is%3Aissue+is%3Aclosed) issues to ensure it has not already been reported
+- [ ] I have searched [open](https://github.com/SixLabors/ImageSharp/issues) and [closed](https://github.com/SixLabors/ImageSharp/issues?q=is%3Aissue+is%3Aclosed) issues to ensure it has not already been reported
### Description
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index 4f87647ffc..4be3511650 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -1,8 +1,8 @@
### Prerequisites
- [ ] I have written a descriptive pull-request title
-- [ ] I have verified that there are no overlapping [pull-requests](https://github.com/JimBobSquarePants/ImageSharp/pulls) open
-- [ ] I have verified that I am following matches the existing coding patterns and practise as demonstrated in the repository. These follow strict Stylecop rules :cop:.
+- [ ] I have verified that there are no overlapping [pull-requests](https://github.com/SixLabors/ImageSharp/pulls) open
+- [ ] I have verified that I am following matches the existing coding patterns and practice as demonstrated in the repository. These follow strict Stylecop rules :cop:.
- [ ] I have provided test coverage for my change (where applicable)
### Description
diff --git a/.gitignore b/.gitignore
index 8034c8c89c..4942818972 100644
--- a/.gitignore
+++ b/.gitignore
@@ -26,6 +26,9 @@ bld/
# Visual Studo 2015 cache/options directory
.vs/
+# Jetbrains Rider cache/options directory
+.idea/
+
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
@@ -158,7 +161,6 @@ AppPackages/
# Others
*.[Cc]ache
ClientBin/
-[Ss]tyle[Cc]op.*
~$*
*~
*.dbmdl
@@ -202,7 +204,8 @@ FakesAssemblies/
**/node_modules
**/node_modules/*
-**/TestOutput
+**/Images/ActualOutput
+**/Images/ReferenceOutput
# ASP.NET 5
project.lock.json
@@ -218,3 +221,4 @@ artifacts/
**/CodeCoverage/*
docs/
/samples/AvatarWithRoundedCorner/output
+/ImageSharp.Coverage.xml
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000000..e7972649f4
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,4 @@
+[submodule "tests/Images/External"]
+ path = tests/Images/External
+ url = https://github.com/SixLabors/Imagesharp.Tests.Images.git
+ branch = master
diff --git a/.travis.yml b/.travis.yml
index af8d4ad9de..70501a484b 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -6,7 +6,7 @@ matrix:
- os: linux # Ubuntu 14.04
dist: trusty
sudo: required
- dotnet: 1.0.1
+ dotnet: 1.0.4
mono: latest
# - os: osx # OSX 10.11
# osx_image: xcode7.3.1
@@ -19,6 +19,7 @@ branches:
- coverity_scan
script:
+ - git submodule -q update --init
- dotnet restore
- dotnet test tests/ImageSharp.Tests/ImageSharp.Tests.csproj -c Release -f "netcoreapp1.1"
@@ -26,7 +27,7 @@ env:
global:
# The next declaration is the encrypted COVERITY_SCAN_TOKEN, created
# via the "travis encrypt" command using the project repo's public key
- - secure: "aim+fUyx7kDQQcAYV1mX16cvyFEYsxiW3y26xjmeuKzsOf6DIUK328pE8KnO50bMWhfVPjuW7jWc43jI+nbUeIW5018aFcjoOrEK2F8JvJ0UKtEo+ONchypJSXA2TSdL0iIlufMBepsmlBsSLkCwHCJYohYcueZV0u9NVPc3n282KLL8ItRZeSFG/cL/a2yrkFnTFhq9OtkUtP4CcVE7BOtzjfftNcn4Rup73e5JkLT7L9AZS7eCYkIYV0KRlT2pOa/FuOHlfP9NP+NVtd83GXUY2FKBsmN3EmrQgGDTfwfwcJjN5dqIqzkIXmLV8IKQ3aiW2//02pIe5VrdqHQG+EVMRcdpCWyKUkMj0g4rGYkqKCtVJojKtOR93ycOGUDc6+cMMoyn3J2qFydkp278dGWeLuwtGfD25fHXorqK1aL9/bGPcwdinrBmcwnuy1IECtuTkEfAPsb6O4nArnDsTEzeQxwa/MAicmpux//TNKgkQGqzCPeHKbl4vOfyyI6kCsf8edWv8fOSPvJUGvL14+/TZ6lY8S+30fosOmwMCe7xlbtcVlBVtOsKx/XUufrP2Vuptlc8INaq6++XtgpCoMLL0SJfBFQKZRmBGavv1Ztyf0aL6Qp303HKGTyXOEq2k18iJmukB6JcnEGVsaAyteGlruQIbPgHWbxhZSoJZPw="
+ - secure: "rjMvEMN9rpvIXqXqCAAKzbHyABzr7E4wPU/dYJ/mHBqlCccFpQrEXVVM1MfRFXYuWZSaIioknhLATZjT5xvIYpTNM6D57z4OTmqeRHhYm80="
before_install:
- echo -n | openssl s_client -connect scan.coverity.com:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | sudo tee -a /etc/ssl/certs/ca-
@@ -34,7 +35,7 @@ before_install:
addons:
coverity_scan:
project:
- name: "JimBobSquarePants/ImageSharp"
+ name: "SixLabors/ImageSharp"
description: "Build submitted via Travis CI"
notification_email: james_south@hotmail.com
build_command_prepend: "dotnet restore"
diff --git a/.vscode/launch.json b/.vscode/launch.json
index 8ab214d415..c9c7453f64 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -1,14 +1,19 @@
{
- "version": "0.2.0",
- "configurations": [
+ // Use IntelliSense to find out which attributes exist for C# debugging
+ // Use hover for the description of the existing attributes
+ // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md
+ "version": "0.2.0",
+ "configurations": [
{
"name": ".NET Core Launch (console)",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
- "program": "${workspaceRoot}\\build\\bin\\Debug\\netcoreapp1.1\\build.dll",
+ // If you have changed target frameworks, make sure to update the program path.
+ "program": "${workspaceRoot}/samples/AvatarWithRoundedCorner/bin/Debug/netcoreapp1.1/AvatarWithRoundedCorner.dll",
"args": [],
- "cwd": "${workspaceRoot}\\build",
+ "cwd": "${workspaceRoot}/samples/AvatarWithRoundedCorner",
+ // For more information about the 'console' field, see https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md#console-terminal-window
"console": "internalConsole",
"stopAtEntry": false,
"internalConsoleOptions": "openOnSessionStart"
diff --git a/APACHE-2.0-LICENSE.txt b/APACHE-2.0-LICENSE.txt
deleted file mode 100644
index a666c6e078..0000000000
--- a/APACHE-2.0-LICENSE.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-Copyright 2012 James South
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
\ No newline at end of file
diff --git a/ImageSharp.ruleset b/ImageSharp.ruleset
index 0bd9cd11ab..2149364b1b 100644
--- a/ImageSharp.ruleset
+++ b/ImageSharp.ruleset
@@ -2,10 +2,10 @@
-
-
-
+
\ No newline at end of file
diff --git a/ImageSharp.sln b/ImageSharp.sln
index d67e869327..f2155f4245 100644
--- a/ImageSharp.sln
+++ b/ImageSharp.sln
@@ -1,7 +1,7 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
-VisualStudioVersion = 15.0.26430.14
+VisualStudioVersion = 15.0.26730.3
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SolutionItems", "SolutionItems", "{C317F1B1-D75E-4C6D-83EB-80367343E0D7}"
ProjectSection(SolutionItems) = preProject
@@ -14,7 +14,9 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SolutionItems", "SolutionIt
features.md = features.md
ImageSharp.ruleset = ImageSharp.ruleset
ImageSharp.sln.DotSettings = ImageSharp.sln.DotSettings
+ .github\ISSUE_TEMPLATE.md = .github\ISSUE_TEMPLATE.md
NuGet.config = NuGet.config
+ .github\PULL_REQUEST_TEMPLATE.md = .github\PULL_REQUEST_TEMPLATE.md
README.md = README.md
EndProjectSection
EndProject
@@ -30,30 +32,30 @@ EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Shared", "Shared", "{9E574A07-F879-4811-9C41-5CBDC6BAFDB7}"
ProjectSection(SolutionItems) = preProject
src\Shared\AssemblyInfo.Common.cs = src\Shared\AssemblyInfo.Common.cs
- src\Shared\stylecop.json = src\Shared\stylecop.json
EndProjectSection
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ImageSharp", "src\ImageSharp\ImageSharp.csproj", "{2AA31A1F-142C-43F4-8687-09ABCA4B3A26}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ImageSharp.Drawing", "src\ImageSharp.Drawing\ImageSharp.Drawing.csproj", "{2E33181E-6E28-4662-A801-E2E7DC206029}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "build", "build\build.csproj", "{575A5002-DD9F-4335-AA47-1DD87FA13645}"
-EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ImageSharp.Tests", "tests\ImageSharp.Tests\ImageSharp.Tests.csproj", "{EA3000E9-2A91-4EC4-8A68-E566DEBDC4F6}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ImageSharp.Benchmarks", "tests\ImageSharp.Benchmarks\ImageSharp.Benchmarks.csproj", "{2BF743D8-2A06-412D-96D7-F448F00C5EA5}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ImageSharp.Sandbox46", "tests\ImageSharp.Sandbox46\ImageSharp.Sandbox46.csproj", "{96188137-5FA6-4924-AB6E-4EFF79C6E0BB}"
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{7CC6D57E-B916-43B8-B315-A0BB92F260A2}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AvatarWithRoundedCorner", "samples\AvatarWithRoundedCorner\AvatarWithRoundedCorner.csproj", "{844FC582-4E78-4371-847D-EFD4D1103578}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ChangeDefaultEncoderOptions", "samples\ChangeDefaultEncoderOptions\ChangeDefaultEncoderOptions.csproj", "{07EE511D-4BAB-4323-BAFC-3AF2BF9366F0}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ChangeDefaultEncoderOptions", "samples\ChangeDefaultEncoderOptions\ChangeDefaultEncoderOptions.csproj", "{07EE511D-4BAB-4323-BAFC-3AF2BF9366F0}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ImageSharp.Sandbox46", "tests\ImageSharp.Sandbox46\ImageSharp.Sandbox46.csproj", "{561B880A-D9EE-44EF-90F5-817C54A9D9AB}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ImageSharp.Formats.Tiff.Tests", "tests\ImageSharp.Formats.Tiff.Tests\ImageSharp.Formats.Tiff.Tests.csproj", "{F74D25AB-1E5C-4272-9FD3-6DBBD3E207AC}"
EndProject
Global
+ GlobalSection(Performance) = preSolution
+ HasPerformanceSessions = true
+ EndGlobalSection
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|x64 = Debug|x64
@@ -87,18 +89,6 @@ Global
{2E33181E-6E28-4662-A801-E2E7DC206029}.Release|x64.Build.0 = Release|Any CPU
{2E33181E-6E28-4662-A801-E2E7DC206029}.Release|x86.ActiveCfg = Release|Any CPU
{2E33181E-6E28-4662-A801-E2E7DC206029}.Release|x86.Build.0 = Release|Any CPU
- {575A5002-DD9F-4335-AA47-1DD87FA13645}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {575A5002-DD9F-4335-AA47-1DD87FA13645}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {575A5002-DD9F-4335-AA47-1DD87FA13645}.Debug|x64.ActiveCfg = Debug|Any CPU
- {575A5002-DD9F-4335-AA47-1DD87FA13645}.Debug|x64.Build.0 = Debug|Any CPU
- {575A5002-DD9F-4335-AA47-1DD87FA13645}.Debug|x86.ActiveCfg = Debug|Any CPU
- {575A5002-DD9F-4335-AA47-1DD87FA13645}.Debug|x86.Build.0 = Debug|Any CPU
- {575A5002-DD9F-4335-AA47-1DD87FA13645}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {575A5002-DD9F-4335-AA47-1DD87FA13645}.Release|Any CPU.Build.0 = Release|Any CPU
- {575A5002-DD9F-4335-AA47-1DD87FA13645}.Release|x64.ActiveCfg = Release|Any CPU
- {575A5002-DD9F-4335-AA47-1DD87FA13645}.Release|x64.Build.0 = Release|Any CPU
- {575A5002-DD9F-4335-AA47-1DD87FA13645}.Release|x86.ActiveCfg = Release|Any CPU
- {575A5002-DD9F-4335-AA47-1DD87FA13645}.Release|x86.Build.0 = Release|Any CPU
{EA3000E9-2A91-4EC4-8A68-E566DEBDC4F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EA3000E9-2A91-4EC4-8A68-E566DEBDC4F6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EA3000E9-2A91-4EC4-8A68-E566DEBDC4F6}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -123,18 +113,6 @@ Global
{2BF743D8-2A06-412D-96D7-F448F00C5EA5}.Release|x64.Build.0 = Release|Any CPU
{2BF743D8-2A06-412D-96D7-F448F00C5EA5}.Release|x86.ActiveCfg = Release|Any CPU
{2BF743D8-2A06-412D-96D7-F448F00C5EA5}.Release|x86.Build.0 = Release|Any CPU
- {96188137-5FA6-4924-AB6E-4EFF79C6E0BB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {96188137-5FA6-4924-AB6E-4EFF79C6E0BB}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {96188137-5FA6-4924-AB6E-4EFF79C6E0BB}.Debug|x64.ActiveCfg = Debug|Any CPU
- {96188137-5FA6-4924-AB6E-4EFF79C6E0BB}.Debug|x64.Build.0 = Debug|Any CPU
- {96188137-5FA6-4924-AB6E-4EFF79C6E0BB}.Debug|x86.ActiveCfg = Debug|Any CPU
- {96188137-5FA6-4924-AB6E-4EFF79C6E0BB}.Debug|x86.Build.0 = Debug|Any CPU
- {96188137-5FA6-4924-AB6E-4EFF79C6E0BB}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {96188137-5FA6-4924-AB6E-4EFF79C6E0BB}.Release|Any CPU.Build.0 = Release|Any CPU
- {96188137-5FA6-4924-AB6E-4EFF79C6E0BB}.Release|x64.ActiveCfg = Release|Any CPU
- {96188137-5FA6-4924-AB6E-4EFF79C6E0BB}.Release|x64.Build.0 = Release|Any CPU
- {96188137-5FA6-4924-AB6E-4EFF79C6E0BB}.Release|x86.ActiveCfg = Release|Any CPU
- {96188137-5FA6-4924-AB6E-4EFF79C6E0BB}.Release|x86.Build.0 = Release|Any CPU
{F74D25AB-1E5C-4272-9FD3-6DBBD3E207AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F74D25AB-1E5C-4272-9FD3-6DBBD3E207AC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F74D25AB-1E5C-4272-9FD3-6DBBD3E207AC}.Debug|x64.ActiveCfg = Debug|x64
@@ -171,6 +149,18 @@ Global
{07EE511D-4BAB-4323-BAFC-3AF2BF9366F0}.Release|x64.Build.0 = Release|Any CPU
{07EE511D-4BAB-4323-BAFC-3AF2BF9366F0}.Release|x86.ActiveCfg = Release|Any CPU
{07EE511D-4BAB-4323-BAFC-3AF2BF9366F0}.Release|x86.Build.0 = Release|Any CPU
+ {561B880A-D9EE-44EF-90F5-817C54A9D9AB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {561B880A-D9EE-44EF-90F5-817C54A9D9AB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {561B880A-D9EE-44EF-90F5-817C54A9D9AB}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {561B880A-D9EE-44EF-90F5-817C54A9D9AB}.Debug|x64.Build.0 = Debug|Any CPU
+ {561B880A-D9EE-44EF-90F5-817C54A9D9AB}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {561B880A-D9EE-44EF-90F5-817C54A9D9AB}.Debug|x86.Build.0 = Debug|Any CPU
+ {561B880A-D9EE-44EF-90F5-817C54A9D9AB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {561B880A-D9EE-44EF-90F5-817C54A9D9AB}.Release|Any CPU.Build.0 = Release|Any CPU
+ {561B880A-D9EE-44EF-90F5-817C54A9D9AB}.Release|x64.ActiveCfg = Release|Any CPU
+ {561B880A-D9EE-44EF-90F5-817C54A9D9AB}.Release|x64.Build.0 = Release|Any CPU
+ {561B880A-D9EE-44EF-90F5-817C54A9D9AB}.Release|x86.ActiveCfg = Release|Any CPU
+ {561B880A-D9EE-44EF-90F5-817C54A9D9AB}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -179,12 +169,14 @@ Global
{9E574A07-F879-4811-9C41-5CBDC6BAFDB7} = {815C0625-CD3D-440F-9F80-2D83856AB7AE}
{2AA31A1F-142C-43F4-8687-09ABCA4B3A26} = {815C0625-CD3D-440F-9F80-2D83856AB7AE}
{2E33181E-6E28-4662-A801-E2E7DC206029} = {815C0625-CD3D-440F-9F80-2D83856AB7AE}
- {575A5002-DD9F-4335-AA47-1DD87FA13645} = {E919DF0B-2607-4462-8FC0-5C98FE50F8C9}
{EA3000E9-2A91-4EC4-8A68-E566DEBDC4F6} = {56801022-D71A-4FBE-BC5B-CBA08E2284EC}
{2BF743D8-2A06-412D-96D7-F448F00C5EA5} = {56801022-D71A-4FBE-BC5B-CBA08E2284EC}
- {96188137-5FA6-4924-AB6E-4EFF79C6E0BB} = {56801022-D71A-4FBE-BC5B-CBA08E2284EC}
{F74D25AB-1E5C-4272-9FD3-6DBBD3E207AC} = {56801022-D71A-4FBE-BC5B-CBA08E2284EC}
{844FC582-4E78-4371-847D-EFD4D1103578} = {7CC6D57E-B916-43B8-B315-A0BB92F260A2}
{07EE511D-4BAB-4323-BAFC-3AF2BF9366F0} = {7CC6D57E-B916-43B8-B315-A0BB92F260A2}
+ {561B880A-D9EE-44EF-90F5-817C54A9D9AB} = {56801022-D71A-4FBE-BC5B-CBA08E2284EC}
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {5F8B9D1F-CD8B-4CC5-8216-D531E25BD795}
EndGlobalSection
EndGlobal
diff --git a/ImageSharp.sln.DotSettings b/ImageSharp.sln.DotSettings
index b058fad4ed..435aad73bf 100644
--- a/ImageSharp.sln.DotSettings
+++ b/ImageSharp.sln.DotSettings
@@ -38,10 +38,15 @@
NEXT_LINE_SHIFTED_2
1
1
+ False
+ False
False
+ NEVER
False
False
+ NEVER
False
+ ALWAYS
False
True
ON_SINGLE_LINE
@@ -342,6 +347,7 @@
True
AC
DC
+ DCT
EOF
FDCT
IDCT
@@ -369,8 +375,13 @@
<Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" />
<Policy Inspect="True" Prefix="T" Suffix="" Style="AaBb" />
<Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" />
+ True
+ True
+ True
+ True
True
True
+ True
True
True
\ No newline at end of file
diff --git a/ImageSharp.v2.ncrunchsolution b/ImageSharp.v2.ncrunchsolution
deleted file mode 100644
index b98737f1c0..0000000000
--- a/ImageSharp.v2.ncrunchsolution
+++ /dev/null
@@ -1,14 +0,0 @@
-
- 1
- false
- false
- true
- UseDynamicAnalysis
- UseStaticAnalysis
- UseStaticAnalysis
- UseStaticAnalysis
- UseDynamicAnalysis
-
-
-
-
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000000..2eeb57968e
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright 2018 Six Labors
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/NuGet.config b/NuGet.config
index b2c967cc97..322105d4d4 100644
--- a/NuGet.config
+++ b/NuGet.config
@@ -1,6 +1,7 @@
+
diff --git a/README.md b/README.md
index e46b113793..d9d2628bb7 100644
--- a/README.md
+++ b/README.md
@@ -1,71 +1,52 @@
-
-#
ImageSharp
-
-**ImageSharp** is a new, fully featured, fully managed, cross-platform, 2D graphics API designed to allow the processing of images without the use of `System.Drawing`.
+
+
+
+ ImageSharp
+
+
+
+
+
+
+
+
+
+### **ImageSharp** is a new, fully featured, fully managed, cross-platform, 2D graphics API.
+
+Without the use of `System.Drawing` we have been able to develop something much more flexible, easier to code against, and much, much less prone to memory leaks. Gone are system-wide process-locks; ImageSharp images are thread-safe and fully supported in web environments.
Built against .Net Standard 1.1 ImageSharp can be used in device, cloud, and embedded/IoT scenarios.
-> **ImageSharp** has made excellent progress and contains many great features but is still considered by us to be still in early stages (alpha). As such, we cannot support its use on production environments until the library reaches release candidate status.
->
-> Pre-release downloads are available from the [MyGet package repository](https://www.myget.org/gallery/imagesharp).
-
-[](https://raw.githubusercontent.com/JimBobSquarePants/ImageSharp/master/APACHE-2.0-LICENSE.txt)
-[](https://github.com/JimBobSquarePants/ImageSharp/issues)
-[](https://github.com/JimBobSquarePants/ImageSharp/stargazers)
-[](https://github.com/JimBobSquarePants/ImageSharp/network)
-[](https://gitter.im/ImageSharp/General?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
-[](https://twitter.com/intent/tweet?hashtags=imagesharp,dotnet,oss&text=ImageSharp.+A+new+cross-platform+2D+graphics+API+in+C%23&url=https%3a%2f%2fgithub.com%2fJimBobSquarePants%2fImageSharp&via=james_m_south)
-[](#backers)
-[](#sponsors)
-
-
-
-| |Build Status|Code Coverage|
-|-------------|:----------:|:-----------:|
-|**Linux/Mac**|[](https://travis-ci.org/JimBobSquarePants/ImageSharp)|[](https://codecov.io/gh/JimBobSquarePants/ImageSharp)|
-|**Windows** |[](https://ci.appveyor.com/project/JamesSouth/imagesharp/branch/master)|[](https://codecov.io/gh/JimBobSquarePants/ImageSharp)|
+### Questions?
+Do you have questions? We are happy to help! Please [join our gitter channel](https://gitter.im/ImageSharp/General), or ask them on [stackoverflow](https://stackoverflow.com) using the `ImageSharp` tag.
### Installation
-At present the code is pre-release but when ready it will be available on [Nuget](http://www.nuget.org).
-
-**Pre-release downloads**
-We already have a [MyGet package repository](https://www.myget.org/gallery/imagesharp) - for bleeding-edge / development NuGet releases.
+| Package Name | Release (NuGet) | Nightly (MyGet) |
+|--------------------------------|-----------------|-----------------|
+| `SixLabors.ImageSharp` | [](https://www.nuget.org/packages/SixLabors.ImageSharp/) | [](https://www.myget.org/feed/sixlabors/package/nuget/SixLabors.ImageSharp) |
+| `SixLabors.ImageSharp.Drawing` | [](https://www.nuget.org/packages/SixLabors.ImageSharp.Drawing/) | [](https://www.myget.org/feed/sixlabors/package/nuget/SixLabors.ImageSharp.Drawing) |
### Packages
-
-The **ImageSharp** library is made up of multiple packages.
-
-Packages include:
-- **ImageSharp**
+The **ImageSharp** library is made up of multiple packages:
+- **SixLabors.ImageSharp**
- Contains the generic `Image` class, PixelFormats, Primitives, Configuration, and other core functionality.
- The `IImageFormat` interface, Jpeg, Png, Bmp, and Gif formats.
- Transform methods like Resize, Crop, Skew, Rotate - Anything that alters the dimensions of the image.
- Non-transform methods like Gaussian Blur, Pixelate, Edge Detection - Anything that maintains the original image dimensions.
-- **ImageSharp.Drawing**
+- **SixLabors.ImageSharp.Drawing**
- Brushes and various drawing algorithms, including drawing images.
- Various vector drawing methods for drawing paths, polygons etc.
- Text drawing.
-### Manual build
+### Build Status
-If you prefer, you can compile ImageSharp yourself (please do and help!), you'll need:
-
-- [Visual Studio 2017 (or above)](https://www.visualstudio.com/en-us/news/releasenotes/vs2017-relnotes)
-- The [.NET Core SDK Installer](https://www.microsoft.com/net/core#windows) - Non VSCode link.
-
-Alternatively on Linux you can use:
-
-- [Visual Studio Code](https://code.visualstudio.com/) with [C# Extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode.csharp)
-- [.Net Core](https://www.microsoft.com/net/core#linuxubuntu)
-
-To clone it locally click the "Clone in Windows" button above or run the following git commands.
-
-```bash
-git clone https://github.com/JimBobSquarePants/ImageSharp
-```
+| |Build Status|Code Coverage|
+|-------------|:----------:|:-----------:|
+|**Linux/Mac**|[](https://travis-ci.org/SixLabors/ImageSharp)|[](https://codecov.io/gh/SixLabors/ImageSharp)|
+|**Windows** |[](https://ci.appveyor.com/project/six-labors/imagesharp/branch/master)|[](https://codecov.io/gh/SixLabors/ImageSharp)|
### Features
@@ -73,24 +54,17 @@ There's plenty there and more coming. Check out the [current features](features.
### API
-Without the constraints of `System.Drawing` We have been able to develop something much more flexible, easier to code against, and much, much less prone to memory leaks.
-
-Gone are system-wide process-locks; ImageSharp images are thread-safe and fully supported in web environments.
-
-Many `Image` methods are also fluent.
-
Here's an example of the code required to resize an image using the default Bicubic resampler then turn the colors into their grayscale equivalent using the BT709 standard matrix.
-`Rgba32` is our default PixelFormat, equivalent to `System.Drawing Color`.
-
On platforms supporting netstandard 1.3+
```csharp
// Image.Load(string path) is a shortcut for our default type. Other pixel formats use Image.Load(string path))
using (Image image = Image.Load("foo.jpg"))
{
- image.Resize(image.Width / 2, image.Height / 2)
- .Grayscale()
- .Save("bar.jpg"); // automatic encoder selected based on extension.
+ image.Mutate(x => x
+ .Resize(image.Width / 2, image.Height / 2)
+ .Grayscale());
+ image.Save("bar.jpg"); // automatic encoder selected based on extension.
}
```
on netstandard 1.1 - 1.2
@@ -100,9 +74,10 @@ using (FileStream stream = File.OpenRead("foo.jpg"))
using (FileStream output = File.OpenWrite("bar.jpg"))
using (Image image = Image.Load(stream))
{
- image.Resize(image.Width / 2, image.Height / 2)
- .Grayscale()
- .Save(output);
+ image.Mutate(x => x
+ .Resize(image.Width / 2, image.Height / 2)
+ .Grayscale());
+ image.Save(output);
}
```
@@ -116,22 +91,33 @@ using (Image image = new Image(400, 400))
}
```
-For optimized access within a loop it is recommended that the following methods are used.
+`Rgba32` is our default PixelFormat, equivalent to `System.Drawing Color`. For advanced pixel format usage there are multiple [PixelFormat implementations](https://github.com/SixLabors/ImageSharp/tree/master/src/ImageSharp/PixelFormats) available allowing developers to implement their own color models in the same manner as Microsoft XNA Game Studio and MonoGame.
-1. `image.GetRowSpan(y)`
-2. `image.GetRowSpan(x, y)`
+All in all this should allow image processing to be much more accessible to developers which has always been my goal from the start.
-For advanced pixel format usage there are multiple [PixelFormat implementations](https://github.com/JimBobSquarePants/ImageSharp/tree/master/src/ImageSharp/PixelFormats) available allowing developers to implement their own color models in the same manner as Microsoft XNA Game Studio and MonoGame.
+**Check out [this blog post](https://sixlabors.com/blog/announcing-imagesharp-beta-1/) or our [Samples Repository](https://github.com/SixLabors/Samples/tree/master/ImageSharp) for more examples!**
-All in all this should allow image processing to be much more accessible to developers which has always been my goal from the start.
+### Manual build
-### How can you help?
+If you prefer, you can compile ImageSharp yourself (please do and help!), you'll need:
-Please... Spread the word, contribute algorithms, submit performance improvements, unit tests.
+- [Visual Studio 2017 (or above)](https://www.visualstudio.com/en-us/news/releasenotes/vs2017-relnotes)
+- The [.NET Core SDK Installer](https://www.microsoft.com/net/core#windows) - Non VSCode link.
+
+Alternatively on Linux you can use:
+
+- [Visual Studio Code](https://code.visualstudio.com/) with [C# Extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode.csharp)
+- [.Net Core](https://www.microsoft.com/net/core#linuxubuntu)
-Performance is a biggie, if you know anything about the `System.Numerics.Vectors` types and can apply some fancy new stuff with that it would be awesome.
+To clone it locally click the "Clone in Windows" button above or run the following git commands.
+
+```bash
+git clone https://github.com/SixLabors/ImageSharp
+```
+
+### How can you help?
-There's a lot of developers out there who could write this stuff a lot better and faster than I and I would love to see what we collectively can come up with so please, if you can help in any way it would be most welcome and benificial for all.
+Please... Spread the word, contribute algorithms, submit performance improvements, unit tests, no input is too little.
### The ImageSharp Team
@@ -140,9 +126,7 @@ Grand High Eternal Dictator
Core Team
- [Dirk Lemstra](https://github.com/dlemstra)
-- [Jeavon Leopold](https://github.com/jeavon)
- [Anton Firsov](https://github.com/antonfirsov)
-- [Olivia Ifrim](https://github.com/olivif)
- [Scott Williams](https://github.com/tocsoft)
### Backers
diff --git a/appveyor.yml b/appveyor.yml
index 6b7ba946ec..8321209905 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -4,25 +4,27 @@ image: Visual Studio 2017
# prevent the double build when a branch has an active PR
skip_branch_with_pr: true
-init:
- - ps: iex ((new-object net.webclient).DownloadString('https://gist.githubusercontent.com/PureKrome/0f79e25693d574807939/raw/8cf3160c9516ef1f4effc825c0a44acc918a0b5a/appveyor-build-info.ps'))
-
+before_build:
+ - git submodule -q update --init
+ - cmd: dotnet --version
+
build_script:
- cmd: build.cmd
test_script:
- tests\CodeCoverage\CodeCoverage.cmd
-artifacts:
-- path: artifacts\bin\ImageSharp\**\*.nupkg
+after_test:
+ - cmd: appveyor PushArtifact "artifacts\SixLabors.ImageSharp.%APPVEYOR_BUILD_VERSION%.nupkg"
+ - cmd: appveyor PushArtifact "artifacts\SixLabors.ImageSharp.Drawing.%APPVEYOR_BUILD_VERSION%.nupkg"
deploy:
# MyGet Deployment for builds & releases
- - provider: NuGet
- server: https://www.myget.org/F/imagesharp/api/v2/package
- symbol_server: https://www.myget.org/F/imagesharp/symbols/api/v2/package
- api_key:
- secure: fz0rUrt3B1HczUC1ZehwVsrFSWX9WZGDQoueDztLte9/+yQG+BBU7UrO+coE8lUf
- artifact: /.*\.nupkg/
- on:
- branch: master
+ - provider: NuGet
+ server: https://www.myget.org/F/sixlabors/api/v2/package
+ symbol_server: https://www.myget.org/F/sixlabors/symbols/api/v2/package
+ api_key:
+ secure: V/lEHP0UeMWIpWd0fiNlY2IgbCnJKQlGdRksECdJbOBdaE20Fl0RNL7WyqHe02o4
+ artifact: /.*\.nupkg/
+ on:
+ branch: master
diff --git a/build.cmd b/build.cmd
index e33a230bcd..6372b41253 100644
--- a/build.cmd
+++ b/build.cmd
@@ -1,2 +1,17 @@
@echo Off
-call build\build.cmd
\ No newline at end of file
+
+PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& '.\build.ps1'"
+
+if not "%errorlevel%"=="0" goto failure
+
+:success
+ECHO successfully built project
+REM exit 0
+goto end
+
+:failure
+ECHO failed to build.
+REM exit -1
+goto end
+
+:end
\ No newline at end of file
diff --git a/build.ps1 b/build.ps1
new file mode 100644
index 0000000000..2f4d1c949f
--- /dev/null
+++ b/build.ps1
@@ -0,0 +1,113 @@
+
+# lets calulat the correct version here
+$fallbackVersion = "1.0.0";
+$version = ''
+
+$tagRegex = '^v?(\d+\.\d+\.\d+)(-([a-zA-Z]+)\.?(\d*))?$'
+
+# we are running on the build server
+$isVersionTag = $env:APPVEYOR_REPO_TAG_NAME -match $tagRegex
+
+ if($isVersionTag){
+
+ Write-Debug "Building commit tagged with a compatable version number"
+
+ $version = $matches[1]
+ $postTag = $matches[3]
+ $count = $matches[4]
+ Write-Debug "version number: ${version} post tag: ${postTag} count: ${count}"
+ if("$postTag" -ne ""){
+ $version = "${version}-${postTag}"
+ }
+ if("$count" -ne ""){
+ # for consistancy with previous releases we pad the counter to only 4 places
+ $padded = $count.Trim().Trim('0').PadLeft(4,"0");
+ Write-Debug "count '$count', padded '${padded}'"
+
+ $version = "${version}${padded}"
+ }
+ }else {
+
+ Write-Debug "Untagged"
+ $lastTag = (git tag --list --sort=-taggerdate) | Out-String
+ $list = $lastTag.Split("`n")
+ foreach ($tag in $list) {
+
+ Write-Debug "testing ${tag}"
+ $tag = $tag.Trim();
+ if($tag -match $tagRegex){
+ Write-Debug "matched ${tag}"
+ $version = $matches[1];
+ break;
+ }
+ }
+
+ if("$version" -eq ""){
+ $version = $fallbackVersion
+ Write-Debug "Failed to discover base version Fallback to '${version}'"
+ }else{
+
+ Write-Debug "Discovered base version from tags '${version}'"
+ }
+
+ $buildNumber = $env:APPVEYOR_BUILD_NUMBER
+
+ # build number replacement is padded to 6 places
+ $buildNumber = "$buildNumber".Trim().Trim('0').PadLeft(6,"0");
+ if("$env:APPVEYOR_PULL_REQUEST_NUMBER" -ne ""){
+ Write-Debug "building a PR"
+
+ $prNumber = "$env:APPVEYOR_PULL_REQUEST_NUMBER".Trim().Trim('0').PadLeft(5,"0");
+ # this is a PR
+ $version = "${version}-PullRequest${prNumber}${buildNumber}";
+ }else{
+ Write-Debug "building a branch commit"
+
+ # this is a general branch commit
+ $branch = $env:APPVEYOR_REPO_BRANCH
+
+ if("$branch" -eq ""){
+ $branch = ((git rev-parse --abbrev-ref HEAD) | Out-String).Trim()
+
+ if("$branch" -eq ""){
+ $branch = "unknown"
+ }
+ }
+
+ $branch = $branch.Replace("/","-").ToLower()
+
+ if($branch.ToLower() -eq "master"){
+ $branch = "dev"
+ }
+
+ $version = "${version}-${branch}${buildNumber}";
+ }
+ }
+
+if("$env:APPVEYOR_API_URL" -ne ""){
+ # update appveyor build number for this build
+ Invoke-RestMethod -Method "PUT" `
+ -Uri "${env:APPVEYOR_API_URL}api/build" `
+ -Body "{version:'${version}'}" `
+ -ContentType "application/json"
+}
+
+Write-Host "Building version '${version}'"
+dotnet restore /p:packageversion=$version
+
+Write-Host "Building projects"
+dotnet build -c Release /p:packageversion=$version
+
+if ($LASTEXITCODE ){ Exit $LASTEXITCODE }
+
+if ( $env:CI -ne "True") {
+ dotnet test ./tests/ImageSharp.Tests/ImageSharp.Tests.csproj --no-build -c Release
+}
+if ($LASTEXITCODE ){ Exit $LASTEXITCODE }
+
+Write-Host "Packaging projects"
+dotnet pack ./src/ImageSharp/ -c Release --output ../../artifacts --no-build /p:packageversion=$version
+if ($LASTEXITCODE ){ Exit $LASTEXITCODE }
+
+dotnet pack ./src/ImageSharp.Drawing/ -c Release --output ../../artifacts --no-build /p:packageversion=$version
+if ($LASTEXITCODE ){ Exit $LASTEXITCODE }
diff --git a/build/Program.cs b/build/Program.cs
deleted file mode 100644
index 4e59b22145..0000000000
--- a/build/Program.cs
+++ /dev/null
@@ -1,463 +0,0 @@
-//
-// Copyright (c) James Jackson-South and contributors.
-// Licensed under the Apache License, Version 2.0.
-//
-
-namespace ConsoleApplication
-{
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Xml;
- using LibGit2Sharp;
- using Microsoft.Build.Construction;
- using Microsoft.Build.Evaluation;
- using NuGet.Versioning;
-
- ///
- /// This updates the version numbers for all the projects in the src folder.
- /// The version number it will geneate is dependent on if this is a build from master or a branch/PR
- ///
- /// If its a build on master
- /// We take the version number specified in project.json,
- /// count how meny commits the repo has had that will affect this project or its dependencies since the version number of manually changed
- /// If this is the first commit that effected this project since number change then leave the version number as defined i.e. will build 1.0.0 if thats in project.json
- /// unless it is a preview build number in which case we always add the counter
- ///
- /// If the build is from a PR/branch
- /// We take the version number specified in project.json, append a tag for the branch/PR (so we can determin how each package was built)
- /// append number of commits effecting the project.
- ///
- ///
- ///
- /// for PR#123 and project.json version 2.0.1 and we have had 30 commits affecting the project
- /// we would end up with version number 2.0.1-PR124-00030
- ///
- /// for branch `fix-stuff` project.json version 2.0.1-alpha1 and we have had 832 commits affecting the project
- /// we would end up with version number 2.0.1-alpha1-fix-stuff-00832
- ///
- /// for `master` project.json version 2.0.1-alpha1 and we have had 832 commits affecting the project
- /// we would end up with version number 2.0.1-alpha1-00832
- ///
- /// for `master` project.json version 2.0.1 and we have had 132 commits affecting the project
- /// we would end up with version number 2.0.1-CI-00132
- ///
- /// for `master` project.json version 2.0.1 and we have had 1 commits affecting the project
- /// we would end up with version number 2.0.1
- ///
- /// for `master` project.json version 2.0.1-alpha1 and we have had 1 commits affecting the project
- /// we would end up with version number 2.0.1-alpha1
- ///
- ///
- /// TODO Add the option for using this to update the version numbers in a project and its dependent references.
- ///
- public class Program
- {
- private const string FallbackTag = "CI";
-
- ///
- /// Main entry point.
- ///
- /// The arguments.
- public static void Main(string[] args)
- {
- bool resetmode = args.Contains("reset");
-
- // Find the project root
- string root = Path.GetFullPath(Path.Combine(LibGit2Sharp.Repository.Discover("."), ".."));
-
- // Lets find the repo
- Repository repo = new LibGit2Sharp.Repository(root);
-
- // Lets find all the project.json files in the src folder (don't care about versioning `tests`)
- IEnumerable projectFiles = Directory.EnumerateFiles(Path.Combine(root, "src"), "*.csproj", SearchOption.AllDirectories);
-
- ResetProject(projectFiles);
-
- // Open them and convert them to source projects
- List projects = projectFiles.Select(x => ProjectRootElement.Open(x, ProjectCollection.GlobalProjectCollection, true))
- .Select(x => new SourceProject(x, repo.Info.WorkingDirectory))
- .ToList();
-
- if (!resetmode)
- {
- CaclulateProjectVersionNumber(projects, repo);
-
- UpdateVersionNumbers(projects);
-
- CreateBuildScript(projects, root);
-
- foreach (SourceProject p in projects)
- {
- Console.WriteLine($"{p.Name} {p.FinalVersionNumber}");
- }
- }
- }
-
- private static void CreateBuildScript(IEnumerable projects, string root)
- {
- string outputDir = Path.GetFullPath(Path.Combine(root, @"artifacts\bin\ImageSharp"));
-
- StringBuilder sb = new StringBuilder();
- foreach (SourceProject p in projects)
- {
- sb.AppendLine($@"dotnet pack --configuration Release --output ""{outputDir}"" ""{p.ProjectFilePath}""");
- }
-
- File.WriteAllText("build-inner.cmd", sb.ToString());
- }
-
- private static void UpdateVersionNumbers(IEnumerable projects)
- {
- foreach (SourceProject p in projects)
- {
- // create a backup file so we can rollback later without breaking formatting
- File.Copy(p.FullProjectFilePath, $"{p.FullProjectFilePath}.bak", true);
- }
-
- foreach (SourceProject p in projects)
- {
- // TODO force update of all dependent projects to point to the newest build.
- // we skip the build number and standard CI prefix on first commits
- string newVersion = p.FinalVersionNumber;
-
- p.UpdateVersion(newVersion);
- }
- }
-
- private static string CurrentBranch(Repository repo)
- {
- // lets build version friendly commit
- string branch = repo.Head.FriendlyName;
-
- // lets see if we are running in appveyor and if we are use the environment variables instead of the head
- string appveryorBranch = Environment.GetEnvironmentVariable("APPVEYOR_REPO_BRANCH");
- if (!string.IsNullOrWhiteSpace(appveryorBranch))
- {
- branch = appveryorBranch;
- }
-
- string prNumber = Environment.GetEnvironmentVariable("APPVEYOR_PULL_REQUEST_NUMBER");
- if (!string.IsNullOrWhiteSpace(prNumber))
- {
- branch = $"PR{int.Parse(prNumber):000}";
- }
-
- // this will happen when checking out a comit directly and not a branch (like appveryor does when it builds)
- if (branch == "(no branch)")
- {
- throw new Exception("unable to find branch");
- }
-
- // clean branch names (might need to be improved)
- branch = branch.Replace("/", "-").Replace("--", "-");
-
- return branch;
- }
-
- private static void CaclulateProjectVersionNumber(List projects, Repository repo)
- {
- string branch = CurrentBranch(repo);
-
- // populate the dependency chains
- projects.ForEach(x => x.PopulateDependencies(projects));
-
- // update the final version based on the repo history and the currentr branch name
- projects.ForEach(x => x.CalculateVersion(repo, branch));
- }
-
- private static void ResetProject(IEnumerable projectPaths)
- {
- if (File.Exists("build-inner.cmd"))
- {
- File.Delete("build-inner.cmd");
- }
-
- // revert the project.json change be reverting it but skipp all the git stuff as its not needed
- foreach (string p in projectPaths)
- {
- if (File.Exists($"{p}.bak"))
- {
- File.Copy($"{p}.bak", p, true);
- File.Delete($"{p}.bak");
- }
- }
- }
-
- ///
- /// Project level logic
- ///
- public class SourceProject
- {
- private readonly IEnumerable dependencies;
- private readonly ProjectRootElement project;
-
- ///
- /// Initializes a new instance of the class.
- ///
- /// The project.
- /// The root.
- public SourceProject(ProjectRootElement project, string root)
- {
- this.Name = project.Properties.FirstOrDefault(x => x.Name == "AssemblyTitle").Value;
-
- this.ProjectDirectory = project.DirectoryPath.Substring(root.Length);
- this.ProjectFilePath = project.ProjectFileLocation.File.Substring(root.Length);
- this.FullProjectFilePath = Path.GetFullPath(project.ProjectFileLocation.File);
- this.Version = new NuGetVersion(project.Properties.FirstOrDefault(x => x.Name == "VersionPrefix").Value);
- this.dependencies = project.Items.Where(x => x.ItemType == "ProjectReference").Select(x => Path.GetFullPath(Path.Combine(project.DirectoryPath, x.Include)));
- this.FinalVersionNumber = this.Version.ToFullString();
- this.project = project;
- }
-
- ///
- /// Gets the project directory.
- ///
- ///
- /// The project directory.
- ///
- public string ProjectDirectory { get; }
-
- ///
- /// Gets the version.
- ///
- ///
- /// The version.
- ///
- public NuGetVersion Version { get; private set; }
-
- ///
- /// Gets the dependent projects.
- ///
- ///
- /// The dependent projects.
- ///
- public List DependentProjects { get; private set; }
-
- ///
- /// Gets the name.
- ///
- ///
- /// The name.
- ///
- public string Name { get; private set; }
-
- ///
- /// Gets the project file path.
- ///
- ///
- /// The project file path.
- ///
- public string ProjectFilePath { get; private set; }
-
- ///
- /// Gets the commit count since version change.
- ///
- ///
- /// The commit count since version change.
- ///
- public int CommitCountSinceVersionChange { get; private set; } = 0;
-
- ///
- /// Gets the full project file path.
- ///
- ///
- /// The full project file path.
- ///
- public string FullProjectFilePath { get; private set; }
-
- ///
- /// Gets the final version number.
- ///
- ///
- /// The final version number.
- ///
- public string FinalVersionNumber { get; private set; }
-
- ///
- /// Populates the dependencies.
- ///
- /// The projects.
- public void PopulateDependencies(IEnumerable projects)
- {
- this.DependentProjects = projects.Where(x => this.dependencies.Contains(x.FullProjectFilePath)).ToList();
- }
-
- ///
- /// Update the version number in the project file
- ///
- /// the new version number to save.
- internal void UpdateVersion(string versionnumber)
- {
- this.project.AddProperty("VersionPrefix", versionnumber);
- this.Version = new NuGetVersion(versionnumber);
- this.project.Save();
- }
-
- ///
- /// Calculates the version.
- ///
- /// The repo.
- /// The branch.
- internal void CalculateVersion(Repository repo, string branch)
- {
- foreach (Commit c in repo.Commits)
- {
- if (!this.ApplyCommit(c, repo))
- {
- // we have finished lets populate the final version number
- this.FinalVersionNumber = this.CalculateVersionNumber(branch);
-
- return;
- }
- }
- }
-
- private bool MatchPath(string path)
- {
- if (path.StartsWith(this.ProjectDirectory, StringComparison.OrdinalIgnoreCase))
- {
- return true;
- }
-
- if (this.DependentProjects.Any())
- {
- return this.DependentProjects.Any(x => x.MatchPath(path));
- }
-
- return false;
- }
-
- private bool ApplyCommitInternal(Commit commit, TreeChanges changes, Repository repo)
- {
- this.CommitCountSinceVersionChange++;
-
- // return false if this is a version number root
- TreeEntryChanges projectFileChange = changes.Where(x => x.Path?.Equals(this.ProjectFilePath, StringComparison.OrdinalIgnoreCase) == true).FirstOrDefault();
- if (projectFileChange != null)
- {
- if (projectFileChange.Status == ChangeKind.Added)
- {
- // the version must have been set here
- return false;
- }
- else
- {
- Blob blob = repo.Lookup(projectFileChange.Oid);
- using (Stream s = blob.GetContentStream())
- {
- using (XmlReader reader = XmlReader.Create(s))
- {
- ProjectRootElement proj = ProjectRootElement.Create(reader);
- NuGetVersion version = new NuGetVersion(proj.Properties.FirstOrDefault(x => x.Name == "VersionPrefix").Value);
- if (version != this.Version)
- {
- // version changed
- return false;
- }
- }
- }
- }
-
- // version must have been the same lets carry on
- return true;
- }
-
- return true;
- }
-
- private bool ApplyCommit(Commit commit, Repository repo)
- {
- foreach (Commit parent in commit.Parents)
- {
- TreeChanges changes = repo.Diff.Compare(parent.Tree, commit.Tree);
-
- foreach (TreeEntryChanges change in changes)
- {
- if (!string.IsNullOrWhiteSpace(change.OldPath))
- {
- if (this.MatchPath(change.OldPath))
- {
- return this.ApplyCommitInternal(commit, changes, repo);
- }
- }
-
- if (!string.IsNullOrWhiteSpace(change.Path))
- {
- if (this.MatchPath(change.Path))
- {
- return this.ApplyCommitInternal(commit, changes, repo);
- }
- }
- }
- }
-
- return true;
- }
-
- private string CalculateVersionNumber(string branch)
- {
- string version = this.Version.ToFullString();
-
- // master only
- if (this.CommitCountSinceVersionChange == 1 && branch == "master")
- {
- if (this.Version.IsPrerelease)
- {
- // prerelease always needs the build counter just not on a branch name
- return $"{version}-{this.CommitCountSinceVersionChange:00000}";
- }
-
- // this is the full release happy path, first commit after changing the version number
- return version;
- }
-
- string rootSpecialVersion = string.Empty;
-
- if (this.Version.IsPrerelease)
- {
- // probably a much easy way for doing this but it work sell enough for a build script
- string[] parts = version.Split(new[] { '-' }, 2);
- version = parts[0];
- rootSpecialVersion = parts[1];
- }
-
- // if master and the version doesn't manually specify a prerelease tag force one on for CI builds
- if (branch == "master")
- {
- if (!this.Version.IsPrerelease)
- {
- branch = FallbackTag;
- }
- else
- {
- branch = string.Empty;
- }
- }
-
- if (rootSpecialVersion.Length > 0)
- {
- rootSpecialVersion = "-" + rootSpecialVersion;
- }
-
- if (branch.Length > 0)
- {
- branch = "-" + branch;
- }
-
- int maxLength = 20; // dotnet will fail to populate the package if the tag is > 20
- maxLength -= rootSpecialVersion.Length; // this is a required tag
- maxLength -= 7; // for the counter and dashes
-
- if (branch.Length > maxLength)
- {
- branch = branch.Substring(0, maxLength);
- }
-
- return $"{version}{rootSpecialVersion}{branch}-{this.CommitCountSinceVersionChange:00000}";
- }
- }
- }
-}
diff --git a/build/Properties/launchSettings.json b/build/Properties/launchSettings.json
deleted file mode 100644
index d175ae7547..0000000000
--- a/build/Properties/launchSettings.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "profiles": {
- "build": {
- "commandName": "Project",
- "commandLineArgs": "reset"
- }
- }
-}
\ No newline at end of file
diff --git a/build/build.cmd b/build/build.cmd
deleted file mode 100644
index 14fc0bdaa9..0000000000
--- a/build/build.cmd
+++ /dev/null
@@ -1,18 +0,0 @@
-@echo Off
-set buildRoot="%cd%"
-
-ECHO Restoring packages
-dotnet restore
-
-ECHO Updating version numbers and generating build script
-cd %~dp0
-dotnet run -- update
-cd %buildRoot%
-
-ECHO Building package
-call %~dp0build-inner.cmd
-
-ECHO Reset version numbers
-cd %~dp0
-dotnet run -- reset
-cd %buildRoot%
\ No newline at end of file
diff --git a/build/build.csproj b/build/build.csproj
deleted file mode 100644
index dc431284ed..0000000000
--- a/build/build.csproj
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
- netcoreapp1.1
- portable
- true
- build
- Exe
- build
- ..\ImageSharp.ruleset
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/build/reset-versions.cmd b/build/reset-versions.cmd
deleted file mode 100644
index 31d1d24318..0000000000
--- a/build/reset-versions.cmd
+++ /dev/null
@@ -1,8 +0,0 @@
-@echo Off
-
-set buildRoot="%cd%"
-cd %~dp0
-
-dotnet run -- reset
-
-cd %buildRoot%
\ No newline at end of file
diff --git a/config.wyam b/config.wyam
deleted file mode 100644
index 3a4b64c540..0000000000
--- a/config.wyam
+++ /dev/null
@@ -1,4 +0,0 @@
-#recipe Docs
-Settings[Keys.Host] = "imagesharp.org";
-Settings[Keys.Title] = "Image Sharp";
-FileSystem.OutputPath = "./docs";
\ No newline at end of file
diff --git a/samples/AvatarWithRoundedCorner/Program.cs b/samples/AvatarWithRoundedCorner/Program.cs
index b164c8d3bc..087bbc29d5 100644
--- a/samples/AvatarWithRoundedCorner/Program.cs
+++ b/samples/AvatarWithRoundedCorner/Program.cs
@@ -1,69 +1,109 @@
-
+// Copyright (c) Six Labors and contributors.
+// Licensed under the Apache License, Version 2.0.
+
+using System;
+using System.Numerics;
+using SixLabors.ImageSharp;
+using SixLabors.ImageSharp.PixelFormats;
+using SixLabors.ImageSharp.Processing;
+using SixLabors.Primitives;
+using SixLabors.Shapes;
namespace AvatarWithRoundedCorner
{
- using System;
- using System.Numerics;
- using ImageSharp;
- using SixLabors.Primitives;
- using SixLabors.Shapes;
-
- class Program
+ static class Program
{
static void Main(string[] args)
{
System.IO.Directory.CreateDirectory("output");
+ using (var img = Image.Load("fb.jpg"))
+ {
+ // as generate returns a new IImage make sure we dispose of it
+ using (Image destRound = img.Clone(x => x.ConvertToAvatar(new Size(200, 200), 20)))
+ {
+ destRound.Save("output/fb.png");
+ }
- GenerateAvatar("fb.jpg", "output/fb.png", new Size(200, 200), 20);
- GenerateAvatar("fb.jpg", "output/fb-round.png", new Size(200, 200), 100);
- GenerateAvatar("fb.jpg", "output/fb-rounder.png", new Size(200, 200), 150);
+ using (Image destRound = img.Clone(x => x.ConvertToAvatar(new Size(200, 200), 100)))
+ {
+ destRound.Save("output/fb-round.png");
+ }
+
+ using (Image destRound = img.Clone(x => x.ConvertToAvatar(new Size(200, 200), 150)))
+ {
+ destRound.Save("output/fb-rounder.png");
+ }
+
+ using (Image destRound = img.CloneAndConvertToAvatarWithoutApply(new Size(200, 200), 150))
+ {
+ destRound.Save("output/fb-rounder-without-apply.png");
+ }
+
+ // the original `img` object has not been altered at all.
+ }
}
- private static void GenerateAvatar(string source, string destination, Size size, float cornerRadius)
+ // 1. The short way:
+ // Implements a full image mutating pipeline operating on IImageProcessingContext
+ // We need the dimensions of the resized image to deduce 'IPathCollection' needed to build the corners,
+ // so we implement an "inline" image processor by utilizing 'ImageExtensions.Apply()'
+ private static IImageProcessingContext ConvertToAvatar(this IImageProcessingContext processingContext, Size size, float cornerRadius)
{
- using (var image = Image.Load(source))
+ return processingContext.Resize(new ResizeOptions
{
- image.Resize(new ImageSharp.Processing.ResizeOptions
- {
- Size = size,
- Mode = ImageSharp.Processing.ResizeMode.Crop
- });
+ Size = size,
+ Mode = ResizeMode.Crop
+ }).Apply(i => ApplyRoundedCorners(i, cornerRadius));
+ }
- ApplyRoundedCourners(image, cornerRadius);
- image.Save(destination);
- }
+ // 2. A more verbose way, avoiding 'Apply()':
+ // First we create a resized clone of the image, then we draw the corners on that instance with Mutate().
+ private static Image CloneAndConvertToAvatarWithoutApply(this Image image, Size size, float cornerRadius)
+ {
+ Image result = image.Clone(
+ ctx => ctx.Resize(
+ new ResizeOptions
+ {
+ Size = size,
+ Mode = ResizeMode.Crop
+ }));
+
+ ApplyRoundedCorners(result, cornerRadius);
+ return result;
}
- public static void ApplyRoundedCourners(Image img, float cornerRadius)
+ // This method can be seen as an inline implementation of an `IImageProcessor`:
+ // (The combination of `IImageOperations.Apply()` + this could be replaced with an `IImageProcessor`)
+ public static void ApplyRoundedCorners(Image img, float cornerRadius)
{
- var corners = BuildCorners(img.Width, img.Height, cornerRadius);
- // now we have our corners time to draw them
- img.Fill(Rgba32.Transparent, corners, new GraphicsOptions(true)
+ IPathCollection corners = BuildCorners(img.Width, img.Height, cornerRadius);
+
+ // mutating in here as we already have a cloned original
+ img.Mutate(x => x.Fill(Rgba32.Transparent, corners, new GraphicsOptions(true)
{
- BlenderMode = ImageSharp.PixelFormats.PixelBlenderMode.Src // enforces that any part of this shape that has color is punched out of the background
- });
+ BlenderMode = PixelBlenderMode.Src // enforces that any part of this shape that has color is punched out of the background
+ }));
}
- public static IPathCollection BuildCorners(int imageWidth, int imageHeight, float cornerRadius)
+ public static IPathCollection BuildCorners(int imageWidth, int imageHeight, float cornerRadius)
{
// first create a square
- var rect = new SixLabors.Shapes.RectangularePolygon(-0.5f, -0.5f, cornerRadius, cornerRadius);
+ var rect = new RectangularePolygon(-0.5f, -0.5f, cornerRadius, cornerRadius);
// then cut out of the square a circle so we are left with a corner
- var cornerToptLeft = rect.Clip(new SixLabors.Shapes.EllipsePolygon(cornerRadius-0.5f, cornerRadius - 0.5f, cornerRadius));
+ IPath cornerToptLeft = rect.Clip(new EllipsePolygon(cornerRadius - 0.5f, cornerRadius - 0.5f, cornerRadius));
// corner is now a corner shape positions top left
- //lets make 3 more positioned correctly, we cando that by translating the orgional artound the center of the image
- var center = new Vector2(imageWidth / 2, imageHeight / 2);
- var angle = Math.PI / 2f;
+ //lets make 3 more positioned correctly, we can do that by translating the orgional artound the center of the image
+ var center = new Vector2(imageWidth / 2F, imageHeight / 2F);
- float rightPos = imageWidth - cornerToptLeft.Bounds.Width +1;
+ float rightPos = imageWidth - cornerToptLeft.Bounds.Width + 1;
float bottomPos = imageHeight - cornerToptLeft.Bounds.Height + 1;
// move it across the widthof the image - the width of the shape
- var cornerTopRight = cornerToptLeft.RotateDegree(90).Translate(rightPos, 0);
- var cornerBottomLeft = cornerToptLeft.RotateDegree(-90).Translate(0, bottomPos);
- var cornerBottomRight = cornerToptLeft.RotateDegree(180).Translate(rightPos, bottomPos);
+ IPath cornerTopRight = cornerToptLeft.RotateDegree(90).Translate(rightPos, 0);
+ IPath cornerBottomLeft = cornerToptLeft.RotateDegree(-90).Translate(0, bottomPos);
+ IPath cornerBottomRight = cornerToptLeft.RotateDegree(180).Translate(rightPos, bottomPos);
return new PathCollection(cornerToptLeft, cornerBottomLeft, cornerTopRight, cornerBottomRight);
}
diff --git a/samples/ChangeDefaultEncoderOptions/Program.cs b/samples/ChangeDefaultEncoderOptions/Program.cs
index dab8d445ca..a8fbd75993 100644
--- a/samples/ChangeDefaultEncoderOptions/Program.cs
+++ b/samples/ChangeDefaultEncoderOptions/Program.cs
@@ -1,6 +1,9 @@
-using System;
-using ImageSharp;
-using ImageSharp.Formats;
+// Copyright (c) Six Labors and contributors.
+// Licensed under the Apache License, Version 2.0.
+
+using System;
+using SixLabors.ImageSharp;
+using SixLabors.ImageSharp.Formats.Jpeg;
namespace ChangeDefaultEncoderOptions
{
@@ -10,7 +13,7 @@ namespace ChangeDefaultEncoderOptions
{
// lets switch out the default encoder for jpeg to one
// that saves at 90 quality and ignores the matadata
- Configuration.Default.SetEncoder(ImageFormats.Jpeg, new ImageSharp.Formats.JpegEncoder()
+ Configuration.Default.SetEncoder(ImageFormats.Jpeg, new JpegEncoder()
{
Quality = 90,
IgnoreMetadata = true
diff --git a/src/ImageSharp.Drawing/Brushes/Brushes.cs b/src/ImageSharp.Drawing/Brushes/Brushes.cs
index e39f3dd497..47e207e8c4 100644
--- a/src/ImageSharp.Drawing/Brushes/Brushes.cs
+++ b/src/ImageSharp.Drawing/Brushes/Brushes.cs
@@ -1,12 +1,10 @@
-//
-// Copyright (c) James Jackson-South and contributors.
+// Copyright (c) Six Labors and contributors.
// Licensed under the Apache License, Version 2.0.
-//
-namespace ImageSharp.Drawing.Brushes
-{
- using ImageSharp.PixelFormats;
+using SixLabors.ImageSharp.PixelFormats;
+namespace SixLabors.ImageSharp.Drawing.Brushes
+{
///
/// A collection of methods for creating generic brushes.
///
diff --git a/src/ImageSharp.Drawing/Brushes/IBrush.cs b/src/ImageSharp.Drawing/Brushes/IBrush.cs
index 33b516e5c2..bb907281b0 100644
--- a/src/ImageSharp.Drawing/Brushes/IBrush.cs
+++ b/src/ImageSharp.Drawing/Brushes/IBrush.cs
@@ -1,14 +1,13 @@
-//
-// Copyright (c) James Jackson-South and contributors.
+// Copyright (c) Six Labors and contributors.
// Licensed under the Apache License, Version 2.0.
-//
-namespace ImageSharp.Drawing
-{
- using ImageSharp.PixelFormats;
- using Processors;
- using SixLabors.Primitives;
+using SixLabors.ImageSharp.Drawing.Brushes.Processors;
+using SixLabors.ImageSharp.Drawing.Processors;
+using SixLabors.ImageSharp.PixelFormats;
+using SixLabors.Primitives;
+namespace SixLabors.ImageSharp.Drawing.Brushes
+{
///
/// Brush represents a logical configuration of a brush which can be used to source pixel colors
///
@@ -33,6 +32,6 @@ namespace ImageSharp.Drawing
/// The when being applied to things like shapes would usually be the
/// bounding box of the shape not necessarily the bounds of the whole image
///
- BrushApplicator CreateApplicator(ImageBase source, RectangleF region, GraphicsOptions options);
+ BrushApplicator CreateApplicator(ImageFrame source, RectangleF region, GraphicsOptions options);
}
}
\ No newline at end of file
diff --git a/src/ImageSharp.Drawing/Brushes/ImageBrush{TPixel}.cs b/src/ImageSharp.Drawing/Brushes/ImageBrush{TPixel}.cs
index 57fcd8ffa6..2d29e23fe5 100644
--- a/src/ImageSharp.Drawing/Brushes/ImageBrush{TPixel}.cs
+++ b/src/ImageSharp.Drawing/Brushes/ImageBrush{TPixel}.cs
@@ -1,17 +1,16 @@
-//
-// Copyright (c) James Jackson-South and contributors.
+// Copyright (c) Six Labors and contributors.
// Licensed under the Apache License, Version 2.0.
-//
-namespace ImageSharp.Drawing.Brushes
-{
- using System;
-
- using ImageSharp.Memory;
- using ImageSharp.PixelFormats;
- using Processors;
- using SixLabors.Primitives;
+using System;
+using SixLabors.ImageSharp.Advanced;
+using SixLabors.ImageSharp.Drawing.Brushes.Processors;
+using SixLabors.ImageSharp.Drawing.Processors;
+using SixLabors.ImageSharp.Memory;
+using SixLabors.ImageSharp.PixelFormats;
+using SixLabors.Primitives;
+namespace SixLabors.ImageSharp.Drawing.Brushes
+{
///
/// Provides an implementation of an image brush for painting images within areas.
///
@@ -22,19 +21,28 @@ namespace ImageSharp.Drawing.Brushes
///
/// The image to paint.
///
- private readonly ImageBase image;
+ private readonly ImageFrame image;
///
/// Initializes a new instance of the class.
///
/// The image.
- public ImageBrush(ImageBase image)
+ public ImageBrush(ImageFrame image)
{
this.image = image;
}
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// The image.
+ public ImageBrush(Image image)
+ : this(image.Frames.RootFrame)
+ {
+ }
+
///
- public BrushApplicator CreateApplicator(ImageBase source, RectangleF region, GraphicsOptions options)
+ public BrushApplicator CreateApplicator(ImageFrame source, RectangleF region, GraphicsOptions options)
{
return new ImageBrushApplicator(source, this.image, region, options);
}
@@ -47,7 +55,7 @@ namespace ImageSharp.Drawing.Brushes
///
/// The source image.
///
- private readonly ImageBase source;
+ private readonly ImageFrame source;
///
/// The y-length.
@@ -76,7 +84,7 @@ namespace ImageSharp.Drawing.Brushes
/// The image.
/// The region.
/// The options
- public ImageBrushApplicator(ImageBase target, ImageBase image, RectangleF region, GraphicsOptions options)
+ public ImageBrushApplicator(ImageFrame target, ImageFrame image, RectangleF region, GraphicsOptions options)
: base(target, options)
{
this.source = image;
@@ -119,7 +127,7 @@ namespace ImageSharp.Drawing.Brushes
{
int sourceY = (y - this.offsetY) % this.yLength;
int offsetX = x - this.offsetX;
- Span sourceRow = this.source.GetRowSpan(sourceY);
+ Span sourceRow = this.source.GetPixelRowSpan(sourceY);
for (int i = 0; i < scanline.Length; i++)
{
@@ -130,7 +138,7 @@ namespace ImageSharp.Drawing.Brushes
overlay[i] = pixel;
}
- Span destinationRow = this.Target.GetRowSpan(x, y).Slice(0, scanline.Length);
+ Span destinationRow = this.Target.GetPixelRowSpan(y).Slice(x, scanline.Length);
this.Blender.Blend(destinationRow, destinationRow, overlay, amountBuffer);
}
}
diff --git a/src/ImageSharp.Drawing/Brushes/PatternBrush{TPixel}.cs b/src/ImageSharp.Drawing/Brushes/PatternBrush{TPixel}.cs
index 5fcb92bdc7..844df0e0e9 100644
--- a/src/ImageSharp.Drawing/Brushes/PatternBrush{TPixel}.cs
+++ b/src/ImageSharp.Drawing/Brushes/PatternBrush{TPixel}.cs
@@ -1,18 +1,17 @@
-//
-// Copyright (c) James Jackson-South and contributors.
+// Copyright (c) Six Labors and contributors.
// Licensed under the Apache License, Version 2.0.
-//
-namespace ImageSharp.Drawing.Brushes
-{
- using System;
- using System.Numerics;
-
- using ImageSharp.Memory;
- using ImageSharp.PixelFormats;
- using Processors;
- using SixLabors.Primitives;
+using System;
+using System.Numerics;
+using SixLabors.ImageSharp.Advanced;
+using SixLabors.ImageSharp.Drawing.Brushes.Processors;
+using SixLabors.ImageSharp.Drawing.Processors;
+using SixLabors.ImageSharp.Memory;
+using SixLabors.ImageSharp.PixelFormats;
+using SixLabors.Primitives;
+namespace SixLabors.ImageSharp.Drawing.Brushes
+{
///
/// Provides an implementation of a pattern brush for painting patterns.
///
@@ -93,7 +92,7 @@ namespace ImageSharp.Drawing.Brushes
}
///
- public BrushApplicator CreateApplicator(ImageBase source, RectangleF region, GraphicsOptions options)
+ public BrushApplicator CreateApplicator(ImageFrame source, RectangleF region, GraphicsOptions options)
{
return new PatternBrushApplicator(source, this.pattern, this.patternVector, options);
}
@@ -116,7 +115,7 @@ namespace ImageSharp.Drawing.Brushes
/// The pattern.
/// The patternVector.
/// The options
- public PatternBrushApplicator(ImageBase source, Fast2DArray pattern, Fast2DArray patternVector, GraphicsOptions options)
+ public PatternBrushApplicator(ImageFrame source, Fast2DArray pattern, Fast2DArray patternVector, GraphicsOptions options)
: base(source, options)
{
this.pattern = pattern;
@@ -164,7 +163,7 @@ namespace ImageSharp.Drawing.Brushes
overlay[i] = this.pattern[patternY, patternX];
}
- Span destinationRow = this.Target.GetRowSpan(x, y).Slice(0, scanline.Length);
+ Span destinationRow = this.Target.GetPixelRowSpan(y).Slice(x, scanline.Length);
this.Blender.Blend(destinationRow, destinationRow, overlay, amountBuffer);
}
}
diff --git a/src/ImageSharp.Drawing/Brushes/Processors/BrushApplicator.cs b/src/ImageSharp.Drawing/Brushes/Processors/BrushApplicator.cs
index 29c625d7f8..ca6f7630d9 100644
--- a/src/ImageSharp.Drawing/Brushes/Processors/BrushApplicator.cs
+++ b/src/ImageSharp.Drawing/Brushes/Processors/BrushApplicator.cs
@@ -1,15 +1,13 @@
-//
-// Copyright (c) James Jackson-South and contributors.
+// Copyright (c) Six Labors and contributors.
// Licensed under the Apache License, Version 2.0.
-//
-namespace ImageSharp.Drawing.Processors
-{
- using System;
-
- using ImageSharp.Memory;
- using ImageSharp.PixelFormats;
+using System;
+using SixLabors.ImageSharp.Advanced;
+using SixLabors.ImageSharp.Memory;
+using SixLabors.ImageSharp.PixelFormats;
+namespace SixLabors.ImageSharp.Drawing.Brushes.Processors
+{
///
/// primitive that converts a point in to a color for discovering the fill color based on an implementation
///
@@ -23,7 +21,7 @@ namespace ImageSharp.Drawing.Processors
///
/// The target.
/// The options.
- internal BrushApplicator(ImageBase target, GraphicsOptions options)
+ internal BrushApplicator(ImageFrame target, GraphicsOptions options)
{
this.Target = target;
@@ -40,7 +38,7 @@ namespace ImageSharp.Drawing.Processors
///
/// Gets the destinaion
///
- protected ImageBase Target { get; }
+ protected ImageFrame Target { get; }
///
/// Gets the blend percentage
@@ -80,7 +78,7 @@ namespace ImageSharp.Drawing.Processors
overlay[i] = this[x + i, y];
}
- Span destinationRow = this.Target.GetRowSpan(x, y).Slice(0, scanline.Length);
+ Span destinationRow = this.Target.GetPixelRowSpan(y).Slice(x, scanline.Length);
this.Blender.Blend(destinationRow, destinationRow, overlay, amountBuffer);
}
}
diff --git a/src/ImageSharp.Drawing/Brushes/RecolorBrush{TPixel}.cs b/src/ImageSharp.Drawing/Brushes/RecolorBrush{TPixel}.cs
index 27aa99b975..ba2fca4e4b 100644
--- a/src/ImageSharp.Drawing/Brushes/RecolorBrush{TPixel}.cs
+++ b/src/ImageSharp.Drawing/Brushes/RecolorBrush{TPixel}.cs
@@ -1,18 +1,17 @@
-//
-// Copyright (c) James Jackson-South and contributors.
+// Copyright (c) Six Labors and contributors.
// Licensed under the Apache License, Version 2.0.
-//
-namespace ImageSharp.Drawing.Brushes
-{
- using System;
- using System.Numerics;
-
- using ImageSharp.Memory;
- using ImageSharp.PixelFormats;
- using Processors;
- using SixLabors.Primitives;
+using System;
+using System.Numerics;
+using SixLabors.ImageSharp.Advanced;
+using SixLabors.ImageSharp.Drawing.Brushes.Processors;
+using SixLabors.ImageSharp.Drawing.Processors;
+using SixLabors.ImageSharp.Memory;
+using SixLabors.ImageSharp.PixelFormats;
+using SixLabors.Primitives;
+namespace SixLabors.ImageSharp.Drawing.Brushes
+{
///
/// Provides an implementation of a brush that can recolor an image
///
@@ -58,7 +57,7 @@ namespace ImageSharp.Drawing.Brushes
public TPixel TargeTPixel { get; }
///
- public BrushApplicator CreateApplicator(ImageBase source, RectangleF region, GraphicsOptions options)
+ public BrushApplicator CreateApplicator(ImageFrame source, RectangleF region, GraphicsOptions options)
{
return new RecolorBrushApplicator(source, this.SourceColor, this.TargeTPixel, this.Threshold, options);
}
@@ -93,7 +92,7 @@ namespace ImageSharp.Drawing.Brushes
/// Color of the target.
/// The threshold .
/// The options
- public RecolorBrushApplicator(ImageBase source, TPixel sourceColor, TPixel targetColor, float threshold, GraphicsOptions options)
+ public RecolorBrushApplicator(ImageFrame source, TPixel sourceColor, TPixel targetColor, float threshold, GraphicsOptions options)
: base(source, options)
{
this.sourceColor = sourceColor.ToVector4();
@@ -159,7 +158,7 @@ namespace ImageSharp.Drawing.Brushes
overlay[i] = this[offsetX, y];
}
- Span destinationRow = this.Target.GetRowSpan(x, y).Slice(0, scanline.Length);
+ Span destinationRow = this.Target.GetPixelRowSpan(y).Slice(x, scanline.Length);
this.Blender.Blend(destinationRow, destinationRow, overlay, amountBuffer);
}
}
diff --git a/src/ImageSharp.Drawing/Brushes/SolidBrush{TPixel}.cs b/src/ImageSharp.Drawing/Brushes/SolidBrush{TPixel}.cs
index 21ebb88a04..658164339d 100644
--- a/src/ImageSharp.Drawing/Brushes/SolidBrush{TPixel}.cs
+++ b/src/ImageSharp.Drawing/Brushes/SolidBrush{TPixel}.cs
@@ -1,18 +1,17 @@
-//
-// Copyright (c) James Jackson-South and contributors.
+// Copyright (c) Six Labors and contributors.
// Licensed under the Apache License, Version 2.0.
-//
-namespace ImageSharp.Drawing.Brushes
-{
- using System;
- using System.Numerics;
-
- using ImageSharp.Memory;
- using ImageSharp.PixelFormats;
- using Processors;
- using SixLabors.Primitives;
+using System;
+using System.Numerics;
+using SixLabors.ImageSharp.Advanced;
+using SixLabors.ImageSharp.Drawing.Brushes.Processors;
+using SixLabors.ImageSharp.Drawing.Processors;
+using SixLabors.ImageSharp.Memory;
+using SixLabors.ImageSharp.PixelFormats;
+using SixLabors.Primitives;
+namespace SixLabors.ImageSharp.Drawing.Brushes
+{
///
/// Provides an implementation of a solid brush for painting solid color areas.
///
@@ -43,7 +42,7 @@ namespace ImageSharp.Drawing.Brushes
public TPixel Color => this.color;
///
- public BrushApplicator CreateApplicator(ImageBase source, RectangleF region, GraphicsOptions options)
+ public BrushApplicator CreateApplicator(ImageFrame source, RectangleF region, GraphicsOptions options)
{
return new SolidBrushApplicator(source, this.color, options);
}
@@ -59,7 +58,7 @@ namespace ImageSharp.Drawing.Brushes
/// The source image.
/// The color.
/// The options
- public SolidBrushApplicator(ImageBase source, TPixel color, GraphicsOptions options)
+ public SolidBrushApplicator(ImageFrame source, TPixel color, GraphicsOptions options)
: base(source, options)
{
this.Colors = new Buffer(source.Width);
@@ -93,16 +92,23 @@ namespace ImageSharp.Drawing.Brushes
///
internal override void Apply(Span scanline, int x, int y)
{
- Span destinationRow = this.Target.GetRowSpan(x, y).Slice(0, scanline.Length);
-
- using (var amountBuffer = new Buffer(scanline.Length))
+ try
{
- for (int i = 0; i < scanline.Length; i++)
+ Span destinationRow = this.Target.GetPixelRowSpan(y).Slice(x, scanline.Length);
+
+ using (var amountBuffer = new Buffer(scanline.Length))
{
- amountBuffer[i] = scanline[i] * this.Options.BlendPercentage;
- }
+ for (int i = 0; i < scanline.Length; i++)
+ {
+ amountBuffer[i] = scanline[i] * this.Options.BlendPercentage;
+ }
- this.Blender.Blend(destinationRow, destinationRow, this.Colors, amountBuffer);
+ this.Blender.Blend(destinationRow, destinationRow, this.Colors, amountBuffer);
+ }
+ }
+ catch (Exception)
+ {
+ throw;
}
}
}
diff --git a/src/ImageSharp.Drawing/DrawImage.cs b/src/ImageSharp.Drawing/DrawImage.cs
index 03eb7be289..d55e224162 100644
--- a/src/ImageSharp.Drawing/DrawImage.cs
+++ b/src/ImageSharp.Drawing/DrawImage.cs
@@ -1,14 +1,12 @@
-//
-// Copyright (c) James Jackson-South and contributors.
+// Copyright (c) Six Labors and contributors.
// Licensed under the Apache License, Version 2.0.
-//
-namespace ImageSharp
-{
- using Drawing.Processors;
- using ImageSharp.PixelFormats;
- using SixLabors.Primitives;
+using SixLabors.ImageSharp.Drawing.Processors;
+using SixLabors.ImageSharp.PixelFormats;
+using SixLabors.Primitives;
+namespace SixLabors.ImageSharp
+{
///
/// Extension methods for the type.
///
@@ -24,7 +22,7 @@ namespace ImageSharp
/// The location to draw the blended image.
/// The options.
/// The .
- public static Image DrawImage(this Image source, Image image, Size size, Point location, GraphicsOptions options)
+ public static IImageProcessingContext DrawImage(this IImageProcessingContext source, Image image, Size size, Point location, GraphicsOptions options)
where TPixel : struct, IPixel
{
if (size == default(Size))
@@ -37,7 +35,7 @@ namespace ImageSharp
location = Point.Empty;
}
- source.ApplyProcessor(new DrawImageProcessor(image, size, location, options), source.Bounds);
+ source.ApplyProcessor(new DrawImageProcessor(image, size, location, options));
return source;
}
@@ -49,7 +47,7 @@ namespace ImageSharp
/// The image to blend with the currently processing image.
/// The opacity of the image image to blend. Must be between 0 and 1.
/// The .
- public static Image Blend(this Image source, Image image, float percent)
+ public static IImageProcessingContext Blend(this IImageProcessingContext source, Image image, float percent)
where TPixel : struct, IPixel
{
GraphicsOptions options = GraphicsOptions.Default;
@@ -66,7 +64,7 @@ namespace ImageSharp
/// The blending mode.
/// The opacity of the image image to blend. Must be between 0 and 1.
/// The .
- public static Image Blend(this Image source, Image image, PixelBlenderMode blender, float percent)
+ public static IImageProcessingContext Blend(this IImageProcessingContext source, Image image, PixelBlenderMode blender, float percent)
where TPixel : struct, IPixel
{
GraphicsOptions options = GraphicsOptions.Default;
@@ -83,7 +81,7 @@ namespace ImageSharp
/// The image to blend with the currently processing image.
/// The options, including the blending type and belnding amount.
/// The .
- public static Image Blend(this Image source, Image image, GraphicsOptions options)
+ public static IImageProcessingContext Blend(this IImageProcessingContext source, Image image, GraphicsOptions options)
where TPixel : struct, IPixel
{
return DrawImage(source, image, default(Size), default(Point), options);
@@ -99,7 +97,7 @@ namespace ImageSharp
/// The size to draw the blended image.
/// The location to draw the blended image.
/// The .
- public static Image DrawImage(this Image source, Image image, float percent, Size size, Point location)
+ public static IImageProcessingContext DrawImage(this IImageProcessingContext source, Image image, float percent, Size size, Point location)
where TPixel : struct, IPixel
{
GraphicsOptions options = GraphicsOptions.Default;
@@ -118,7 +116,7 @@ namespace ImageSharp
/// The size to draw the blended image.
/// The location to draw the blended image.
/// The .
- public static Image DrawImage(this Image source, Image image, PixelBlenderMode blender, float percent, Size size, Point location)
+ public static IImageProcessingContext DrawImage(this IImageProcessingContext source, Image image, PixelBlenderMode blender, float percent, Size size, Point location)
where TPixel : struct, IPixel
{
GraphicsOptions options = GraphicsOptions.Default;
diff --git a/src/ImageSharp.Drawing/FillRegion.cs b/src/ImageSharp.Drawing/FillRegion.cs
index b3ee2ed996..2e5d311c6d 100644
--- a/src/ImageSharp.Drawing/FillRegion.cs
+++ b/src/ImageSharp.Drawing/FillRegion.cs
@@ -1,15 +1,13 @@
-//
-// Copyright (c) James Jackson-South and contributors.
+// Copyright (c) Six Labors and contributors.
// Licensed under the Apache License, Version 2.0.
-//
-namespace ImageSharp
-{
- using Drawing;
- using Drawing.Brushes;
- using Drawing.Processors;
- using ImageSharp.PixelFormats;
+using SixLabors.ImageSharp.Drawing;
+using SixLabors.ImageSharp.Drawing.Brushes;
+using SixLabors.ImageSharp.Drawing.Processors;
+using SixLabors.ImageSharp.PixelFormats;
+namespace SixLabors.ImageSharp
+{
///
/// Extension methods for the type.
///
@@ -23,10 +21,10 @@ namespace ImageSharp
/// The details how to fill the region of interest.
/// The graphics options.
/// The .
- public static Image Fill(this Image source, IBrush brush, GraphicsOptions options)
+ public static IImageProcessingContext Fill(this IImageProcessingContext source, IBrush brush, GraphicsOptions options)
where TPixel : struct, IPixel
{
- return source.Apply(new FillProcessor(brush, options));
+ return source.ApplyProcessor(new FillProcessor(brush, options));
}
///
@@ -36,7 +34,7 @@ namespace ImageSharp
/// The image this method extends.
/// The details how to fill the region of interest.
/// The .
- public static Image Fill(this Image source, IBrush brush)
+ public static IImageProcessingContext Fill(this IImageProcessingContext source, IBrush brush)
where TPixel : struct, IPixel
{
return source.Fill(brush, GraphicsOptions.Default);
@@ -49,7 +47,7 @@ namespace ImageSharp
/// The image this method extends.
/// The color.
/// The .
- public static Image Fill(this Image source, TPixel color)
+ public static IImageProcessingContext Fill(this IImageProcessingContext source, TPixel color)
where TPixel : struct, IPixel
{
return source.Fill(new SolidBrush(color));
@@ -64,10 +62,10 @@ namespace ImageSharp
/// The region.
/// The graphics options.
/// The .
- public static Image Fill(this Image source, IBrush brush, Region region, GraphicsOptions options)
+ public static IImageProcessingContext Fill(this IImageProcessingContext source, IBrush brush, Region region, GraphicsOptions options)
where TPixel : struct, IPixel
{
- return source.Apply(new FillRegionProcessor(brush, region, options));
+ return source.ApplyProcessor(new FillRegionProcessor(brush, region, options));
}
///
@@ -78,7 +76,7 @@ namespace ImageSharp
/// The brush.
/// The region.
/// The .
- public static Image Fill(this Image source, IBrush brush, Region region)
+ public static IImageProcessingContext Fill(this IImageProcessingContext source, IBrush brush, Region region)
where TPixel : struct, IPixel
{
return source.Fill(brush, region, GraphicsOptions.Default);
@@ -93,7 +91,7 @@ namespace ImageSharp
/// The region.
/// The options.
/// The .
- public static Image Fill(this Image source, TPixel color, Region region, GraphicsOptions options)
+ public static IImageProcessingContext Fill(this IImageProcessingContext source, TPixel color, Region region, GraphicsOptions options)
where TPixel : struct, IPixel
{
return source.Fill(new SolidBrush(color), region, options);
@@ -107,7 +105,7 @@ namespace ImageSharp
/// The color.
/// The region.
/// The .
- public static Image Fill(this Image source, TPixel color, Region region)
+ public static IImageProcessingContext Fill(this IImageProcessingContext source, TPixel color, Region region)
where TPixel : struct, IPixel
{
return source.Fill(new SolidBrush(color), region);
diff --git a/src/ImageSharp.Drawing/ImageSharp.Drawing.csproj b/src/ImageSharp.Drawing/ImageSharp.Drawing.csproj
index 10562b08ca..3e320dccc7 100644
--- a/src/ImageSharp.Drawing/ImageSharp.Drawing.csproj
+++ b/src/ImageSharp.Drawing/ImageSharp.Drawing.csproj
@@ -1,50 +1,54 @@
-
- An extension to ImageSharp that allows the drawing of images, paths, and text.
- ImageSharp.Drawing
- 1.0.0-alpha9
- James Jackson-South and contributors
- netstandard1.1
- true
- true
- ImageSharp.Drawing
- ImageSharp.Drawing
- Image Draw Shape Path Font
- https://raw.githubusercontent.com/JimBobSquarePants/ImageSharp/master/build/icons/imagesharp-logo-128.png
- https://github.com/JimBobSquarePants/ImageSharp
- http://www.apache.org/licenses/LICENSE-2.0
- git
- https://github.com/JimBobSquarePants/ImageSharp
- false
- false
- false
- false
- false
- false
- false
- false
- false
- full
- portable
- True
-
-
-
-
-
-
-
-
-
-
-
- All
-
-
-
- ..\..\ImageSharp.ruleset
-
-
- true
-
+
+ An extension to ImageSharp that allows the drawing of images, paths, and text.
+ SixLabors.ImageSharp.Drawing
+ $(packageversion)
+ 0.0.1
+ SixLabors and contributors
+ netstandard1.1;netstandard2.0
+ true
+ true
+ SixLabors.ImageSharp.Drawing
+ SixLabors.ImageSharp.Drawing
+ Image Draw Shape Path Font
+ https://raw.githubusercontent.com/SixLabors/ImageSharp/master/build/icons/imagesharp-logo-128.png
+ https://github.com/SixLabors/ImageSharp
+ http://www.apache.org/licenses/LICENSE-2.0
+ git
+ https://github.com/SixLabors/ImageSharp
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ full
+ portable
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+
+ All
+
+
+
+ ..\..\ImageSharp.ruleset
+ SixLabors.ImageSharp.Drawing
+
+
+ true
+
\ No newline at end of file
diff --git a/src/ImageSharp.Drawing/Paths/DrawBeziers.cs b/src/ImageSharp.Drawing/Paths/DrawBeziers.cs
index 59bcf40363..de4fdd003b 100644
--- a/src/ImageSharp.Drawing/Paths/DrawBeziers.cs
+++ b/src/ImageSharp.Drawing/Paths/DrawBeziers.cs
@@ -1,18 +1,16 @@
-//
-// Copyright (c) James Jackson-South and contributors.
+// Copyright (c) Six Labors and contributors.
// Licensed under the Apache License, Version 2.0.
-//
-namespace ImageSharp
-{
- using System.Numerics;
- using Drawing;
- using Drawing.Brushes;
- using Drawing.Pens;
- using ImageSharp.PixelFormats;
- using SixLabors.Primitives;
- using SixLabors.Shapes;
+using System.Numerics;
+using SixLabors.ImageSharp.Drawing;
+using SixLabors.ImageSharp.Drawing.Brushes;
+using SixLabors.ImageSharp.Drawing.Pens;
+using SixLabors.ImageSharp.PixelFormats;
+using SixLabors.Primitives;
+using SixLabors.Shapes;
+namespace SixLabors.ImageSharp
+{
///
/// Extension methods for the type.
///
@@ -28,7 +26,7 @@ namespace ImageSharp
/// The points.
/// The options.
/// The .
- public static Image DrawBeziers(this Image source, IBrush brush, float thickness, PointF[] points, GraphicsOptions options)
+ public static IImageProcessingContext DrawBeziers(this IImageProcessingContext source, IBrush brush, float thickness, PointF[] points, GraphicsOptions options)
where TPixel : struct, IPixel
{
return source.Draw(new Pen(brush, thickness), new Path(new CubicBezierLineSegment(points)), options);
@@ -43,7 +41,7 @@ namespace ImageSharp
/// The thickness.
/// The points.
/// The .
- public static Image DrawBeziers(this Image source, IBrush brush, float thickness, PointF[] points)
+ public static IImageProcessingContext DrawBeziers(this IImageProcessingContext source, IBrush brush, float thickness, PointF[] points)
where TPixel : struct, IPixel
{
return source.Draw(new Pen(brush, thickness), new Path(new CubicBezierLineSegment(points)));
@@ -58,7 +56,7 @@ namespace ImageSharp
/// The thickness.
/// The points.
/// The .
- public static Image DrawBeziers(this Image source, TPixel color, float thickness, PointF[] points)
+ public static IImageProcessingContext DrawBeziers(this IImageProcessingContext source, TPixel color, float thickness, PointF[] points)
where TPixel : struct, IPixel
{
return source.DrawBeziers(new SolidBrush(color), thickness, points);
@@ -74,7 +72,7 @@ namespace ImageSharp
/// The points.
/// The options.
/// The .
- public static Image DrawBeziers(this Image source, TPixel color, float thickness, PointF[] points, GraphicsOptions options)
+ public static IImageProcessingContext DrawBeziers(this IImageProcessingContext source, TPixel color, float thickness, PointF[] points, GraphicsOptions options)
where TPixel : struct, IPixel
{
return source.DrawBeziers(new SolidBrush(color), thickness, points, options);
@@ -89,7 +87,7 @@ namespace ImageSharp
/// The points.
/// The options.
/// The .
- public static Image DrawBeziers(this Image source, IPen pen, PointF[] points, GraphicsOptions options)
+ public static IImageProcessingContext DrawBeziers(this IImageProcessingContext source, IPen pen, PointF[] points, GraphicsOptions options)
where TPixel : struct, IPixel
{
return source.Draw(pen, new Path(new CubicBezierLineSegment(points)), options);
@@ -103,7 +101,7 @@ namespace ImageSharp
/// The pen.
/// The points.
/// The .
- public static Image DrawBeziers(this Image source, IPen pen, PointF[] points)
+ public static IImageProcessingContext DrawBeziers(this IImageProcessingContext source, IPen pen, PointF[] points)
where TPixel : struct, IPixel
{
return source.Draw(pen, new Path(new CubicBezierLineSegment(points)));
diff --git a/src/ImageSharp.Drawing/Paths/DrawLines.cs b/src/ImageSharp.Drawing/Paths/DrawLines.cs
index 3ce0dc4da6..e5d9a1b3b4 100644
--- a/src/ImageSharp.Drawing/Paths/DrawLines.cs
+++ b/src/ImageSharp.Drawing/Paths/DrawLines.cs
@@ -1,18 +1,16 @@
-//
-// Copyright (c) James Jackson-South and contributors.
+// Copyright (c) Six Labors and contributors.
// Licensed under the Apache License, Version 2.0.
-//
-namespace ImageSharp
-{
- using System.Numerics;
- using Drawing;
- using Drawing.Brushes;
- using Drawing.Pens;
- using ImageSharp.PixelFormats;
- using SixLabors.Primitives;
- using SixLabors.Shapes;
+using System.Numerics;
+using SixLabors.ImageSharp.Drawing;
+using SixLabors.ImageSharp.Drawing.Brushes;
+using SixLabors.ImageSharp.Drawing.Pens;
+using SixLabors.ImageSharp.PixelFormats;
+using SixLabors.Primitives;
+using SixLabors.Shapes;
+namespace SixLabors.ImageSharp
+{
///
/// Extension methods for the type.
///
@@ -28,7 +26,7 @@ namespace ImageSharp
/// The points.
/// The options.
/// The .
- public static Image DrawLines(this Image source, IBrush