diff --git a/.editorconfig b/.editorconfig
index b725c5cce..8f0e28eec 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -1,20 +1,371 @@
-# top-most EditorConfig file
+###############################################################################
+# EditorConfig is awesome: http://EditorConfig.org
+###############################################################################
+
+###############################################################################
+# Top-most EditorConfig file
+###############################################################################
root = true
-[*.cs]
+###############################################################################
+# Set default behavior to:
+# a UTF-8 encoding,
+# Unix-style line endings,
+# a newline ending the file,
+# 4 space indentation, and
+# trimming of trailing whitespace
+###############################################################################
+[*]
+charset = utf-8
+end_of_line = lf
+insert_final_newline = true
indent_style = space
indent_size = 4
-csharp_style_var_for_built_in_types = false:warning
-csharp_style_var_elsewhere = false:warning
-csharp_style_var_when_type_is_apparent = true:warning
+trim_trailing_whitespace = true
+
+###############################################################################
+# Set file behavior to:
+# 2 space indentation
+###############################################################################
+[*.{cmd,config,csproj,json,props,ps1,resx,sh,targets}]
+indent_size = 2
+
+###############################################################################
+# Set file behavior to:
+# Windows-style line endings, and
+# tabular indentation
+###############################################################################
+[*.sln]
end_of_line = crlf
+indent_style = tab
+
+###############################################################################
+# Set dotnet naming rules to:
+# suggest async members be pascal case suffixed with Async
+# suggest const declarations be pascal case
+# suggest interfaces be pascal case prefixed with I
+# suggest parameters be camel case
+# suggest private and internal static fields be camel case
+# suggest private and internal fields be camel case
+# suggest public and protected declarations be pascal case
+# suggest static readonly declarations be pascal case
+# suggest type parameters be prefixed with T
+###############################################################################
+[*.cs]
+dotnet_naming_rule.async_members_should_be_pascal_case_suffixed_with_async.severity = suggestion
+dotnet_naming_rule.async_members_should_be_pascal_case_suffixed_with_async.style = pascal_case_suffixed_with_async
+dotnet_naming_rule.async_members_should_be_pascal_case_suffixed_with_async.symbols = async_members
+
+dotnet_naming_rule.const_declarations_should_be_pascal_case.severity = suggestion
+dotnet_naming_rule.const_declarations_should_be_pascal_case.style = pascal_case
+dotnet_naming_rule.const_declarations_should_be_pascal_case.symbols = const_declarations
+
+dotnet_naming_rule.interfaces_should_be_pascal_case_prefixed_with_i.severity = suggestion
+dotnet_naming_rule.interfaces_should_be_pascal_case_prefixed_with_i.style = pascal_case_prefixed_with_i
+dotnet_naming_rule.interfaces_should_be_pascal_case_prefixed_with_i.symbols = interfaces
+
+dotnet_naming_rule.parameters_should_be_camel_case.severity = suggestion
+dotnet_naming_rule.parameters_should_be_camel_case.style = camel_case
+dotnet_naming_rule.parameters_should_be_camel_case.symbols = parameters
+
+dotnet_naming_rule.private_and_internal_static_fields_should_be_camel_case.severity = suggestion
+dotnet_naming_rule.private_and_internal_static_fields_should_be_camel_case.style = camel_case
+dotnet_naming_rule.private_and_internal_static_fields_should_be_camel_case.symbols = private_and_internal_static_fields
+
+dotnet_naming_rule.private_and_internal_fields_should_be_camel_case.severity = suggestion
+dotnet_naming_rule.private_and_internal_fields_should_be_camel_case.style = camel_case
+dotnet_naming_rule.private_and_internal_fields_should_be_camel_case.symbols = private_and_internal_fields
+
+dotnet_naming_rule.public_and_protected_declarations_should_be_pascal_case.severity = suggestion
+dotnet_naming_rule.public_and_protected_declarations_should_be_pascal_case.style = pascal_case
+dotnet_naming_rule.public_and_protected_declarations_should_be_pascal_case.symbols = public_and_protected_declarations
+
+dotnet_naming_rule.static_readonly_declarations_should_be_pascal_case.severity = suggestion
+dotnet_naming_rule.static_readonly_declarations_should_be_pascal_case.style = pascal_case
+dotnet_naming_rule.static_readonly_declarations_should_be_pascal_case.symbols = static_readonly_declarations
+
+dotnet_naming_rule.type_parameters_should_be_pascal_case_prefixed_with_t.severity = suggestion
+dotnet_naming_rule.type_parameters_should_be_pascal_case_prefixed_with_t.style = pascal_case_prefixed_with_t
+dotnet_naming_rule.type_parameters_should_be_pascal_case_prefixed_with_t.symbols = type_parameters
+
+###############################################################################
+# Set dotnet naming styles to define:
+# camel case
+# pascal case
+# pascal case suffixed with Async
+# pascal case prefixed with I
+# pascal case prefixed with T
+###############################################################################
+[*.cs]
+dotnet_naming_style.camel_case.capitalization = camel_case
+
+dotnet_naming_style.pascal_case.capitalization = pascal_case
+
+dotnet_naming_style.pascal_case_suffixed_with_async.capitalization = pascal_case
+dotnet_naming_style.pascal_case_suffixed_with_async.required_suffix = Async
+
+dotnet_naming_style.pascal_case_prefixed_with_i.capitalization = pascal_case
+dotnet_naming_style.pascal_case_prefixed_with_i.required_prefix = I
+
+dotnet_naming_style.pascal_case_prefixed_with_t.capitalization = pascal_case
+dotnet_naming_style.pascal_case_prefixed_with_t.required_prefix = T
+
+###############################################################################
+# Set dotnet naming symbols to:
+# async members
+# const declarations
+# interfaces
+# private and internal fields
+# private and internal static fields
+# public and protected declarations
+# static readonly declarations
+# type parameters
+###############################################################################
+[*.cs]
+dotnet_naming_symbols.async_members.required_modifiers = async
+
+dotnet_naming_symbols.const_declarations.required_modifiers = const
+
+dotnet_naming_symbols.interfaces.applicable_kinds = interface
+
+dotnet_naming_symbols.parameters.applicable_kinds = parameter
+
+dotnet_naming_symbols.private_and_internal_fields.applicable_accessibilities = private, internal
+dotnet_naming_symbols.private_and_internal_fields.applicable_kinds = field
+
+dotnet_naming_symbols.private_and_internal_static_fields.applicable_accessibilities = private, internal
+dotnet_naming_symbols.private_and_internal_static_fields.applicable_kinds = field
+dotnet_naming_symbols.private_and_internal_static_fields.required_modifiers = static
+
+dotnet_naming_symbols.public_and_protected_declarations.applicable_accessibilities = public, protected
+
+dotnet_naming_symbols.static_readonly_declarations.required_modifiers = static, readonly
+
+dotnet_naming_symbols.type_parameters.applicable_kinds = type_parameter
+
+###############################################################################
+# Set dotnet sort options to:
+# do not separate import directives into groups, and
+# sort system directives first
+###############################################################################
+[*.cs]
+dotnet_separate_import_directive_groups = false
dotnet_sort_system_directives_first = true
+
+###############################################################################
+# Set dotnet style options to:
+# suggest null-coalescing expressions,
+# suggest collection-initializers,
+# suggest explicit tuple names,
+# suggest null-propogation
+# suggest object-initializers,
+# generate parentheses in arithmetic binary operators for clarity,
+# generate parentheses in other binary operators for clarity,
+# don't generate parentheses in other operators if unnecessary,
+# generate parentheses in relational binary operators for clarity,
+# warn when not using predefined-types for locals, parameters, and members,
+# generate predefined-types of type names for member access,
+# generate auto properties,
+# suggest compound assignment,
+# generate conditional expression over assignment,
+# generate conditional expression over return,
+# suggest inferred anonymous types,
+# suggest inferred tuple names,
+# suggest 'is null' checks over '== null',
+# don't generate 'this.' and 'Me.' for events,
+# warn when not using 'this.' and 'Me.' for fields,
+# warn when not using 'this.' and 'Me.' for methods,
+# warn when not using 'this.' and 'Me.' for properties,
+# suggest readonly fields, and
+# generate accessibility modifiers for non interface members
+###############################################################################
+[*.cs]
+dotnet_style_coalesce_expression = true:suggestion
+dotnet_style_collection_initializer = true:suggestion
+dotnet_style_explicit_tuple_names = true:suggestion
+dotnet_style_null_propagation = true:suggestion
+dotnet_style_object_initializer = true:suggestion
+
+dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:silent
+dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:silent
+dotnet_style_parentheses_in_other_operators = never_if_unnecessary:silent
+dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:silent
+
dotnet_style_predefined_type_for_locals_parameters_members = true:warning
-dotnet_style_predefined_type_for_member_access = true:warning
+dotnet_style_predefined_type_for_member_access = true:silent
+
+dotnet_style_prefer_auto_properties = true:silent
+dotnet_style_prefer_compound_assignment = true:suggestion
+dotnet_style_prefer_conditional_expression_over_assignment = true:silent
+dotnet_style_prefer_conditional_expression_over_return = true:silent
+dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion
+dotnet_style_prefer_inferred_tuple_names = true:suggestion
+dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion
+
+dotnet_style_qualification_for_event = false:silent
dotnet_style_qualification_for_field = true:warning
dotnet_style_qualification_for_method = true:warning
dotnet_style_qualification_for_property = true:warning
-[*.tt]
-indent_style = space
-indent_size = 4
\ No newline at end of file
+dotnet_style_readonly_field = true:suggestion
+dotnet_style_require_accessibility_modifiers = for_non_interface_members:silent
+
+###############################################################################
+# Set dotnet style options to:
+# suggest removing all unused parameters
+###############################################################################
+[*.cs]
+dotnet_code_quality_unused_parameters = all:suggestion
+
+###############################################################################
+# Set csharp indent options to:
+# indent block contents,
+# not indent braces,
+# indent case contents,
+# not indent case contents when block,
+# indent labels one less than the current, and
+# indent switch labels
+###############################################################################
+[*.cs]
+csharp_indent_block_contents = true
+csharp_indent_braces = false
+csharp_indent_case_contents = true
+csharp_indent_case_contents_when_block = false
+csharp_indent_labels = one_less_than_current
+csharp_indent_switch_labels = true
+
+###############################################################################
+# Set csharp new-line options to:
+# insert a new-line before "catch",
+# insert a new-line before "else",
+# insert a new-line before "finally",
+# insert a new-line before members in anonymous-types,
+# insert a new-line before members in object-initializers, and
+# insert a new-line before all open braces
+###############################################################################
+[*.cs]
+csharp_new_line_before_catch = true
+csharp_new_line_before_else = true
+csharp_new_line_before_finally = true
+
+csharp_new_line_before_members_in_anonymous_types = true
+csharp_new_line_before_members_in_object_initializers = true
+
+csharp_new_line_before_open_brace = all
+
+###############################################################################
+# Set csharp preserve options to:
+# preserve single-line blocks, and
+# preserve single-line statements
+###############################################################################
+[*.cs]
+csharp_preserve_single_line_blocks = true
+csharp_preserve_single_line_statements = true
+
+###############################################################################
+# Set csharp space options to:
+# remove any space after a cast,
+# add a space after the colon in an inheritance clause,
+# add a space after a comma,
+# remove any space after a dot,
+# add a space after keywords in control flow statements,
+# add a space after a semicolon in a "for" statement,
+# add a space before and after binary operators,
+# remove space around declaration statements,
+# add a space before the colon in an inheritance clause,
+# remove any space before a comma,
+# remove any space before a dot,
+# remove any space before an open square-bracket,
+# remove any space before a semicolon in a "for" statement,
+# remove any space between empty square-brackets,
+# remove any space between a method call's empty parameter list parenthesis,
+# remove any space between a method call's name and its opening parenthesis,
+# remove any space between a method call's parameter list parenthesis,
+# remove any space between a method declaration's empty parameter list parenthesis,
+# remove any space between a method declaration's name and its openening parenthesis,
+# remove any space between a method declaration's parameter list parenthesis,
+# remove any space between parentheses, and
+# remove any space between square brackets
+###############################################################################
+[*.cs]
+csharp_space_after_cast = false
+csharp_space_after_colon_in_inheritance_clause = true
+csharp_space_after_comma = true
+csharp_space_after_dot = false
+csharp_space_after_keywords_in_control_flow_statements = true
+csharp_space_after_semicolon_in_for_statement = true
+
+csharp_space_around_binary_operators = before_and_after
+csharp_space_around_declaration_statements = do_not_ignore
+
+csharp_space_before_colon_in_inheritance_clause = true
+csharp_space_before_comma = false
+csharp_space_before_dot = false
+csharp_space_before_open_square_brackets = false
+csharp_space_before_semicolon_in_for_statement = false
+
+csharp_space_between_empty_square_brackets = false
+csharp_space_between_method_call_empty_parameter_list_parentheses = false
+csharp_space_between_method_call_name_and_opening_parenthesis = false
+csharp_space_between_method_call_parameter_list_parentheses = false
+csharp_space_between_method_declaration_empty_parameter_list_parentheses = false
+csharp_space_between_method_declaration_name_and_open_parenthesis = false
+csharp_space_between_method_declaration_parameter_list_parentheses = false
+csharp_space_between_parentheses = false
+csharp_space_between_square_brackets = false
+
+###############################################################################
+# Set csharp style options to:
+# generate braces,
+# suggest simple default expressions,
+# generate a preferred modifier order,
+# suggest conditional delegate calls,
+# suggest deconstructed variable declarations,
+# generate expression-bodied accessors,
+# don't generate expression-bodied constructors,
+# generate expression-bodied indexers,
+# generate expression-bodied lambdas,
+# don't generate expression-bodied methods,
+# don't generate expression-bodied operators,
+# generate expression-bodied properties,
+# suggest inlined variable declarations,
+# suggest local over anonymous functions,
+# suggest pattern-matching over "as" with "null" check,
+# suggest pattern-matching over "is" with "cast" check,
+# suggest throw expressions,
+# generate a discard variable for unused value expression statements,
+# suggest a discard variable for unused assignments,
+# warn when using var for built-in types,
+# warn when using var when the type is not apparent, and
+# warn when not using var when the type is apparent
+###############################################################################
+[*.cs]
+csharp_prefer_braces = true:silent
+csharp_prefer_simple_default_expression = true:suggestion
+csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async:silent
+
+csharp_style_conditional_delegate_call = true:suggestion
+csharp_style_deconstructed_variable_declaration = true:suggestion
+
+csharp_style_expression_bodied_accessors = true:silent
+csharp_style_expression_bodied_constructors = false:silent
+csharp_style_expression_bodied_indexers = true:silent
+csharp_style_expression_bodied_lambdas = true:silent
+csharp_style_expression_bodied_methods = false:silent
+csharp_style_expression_bodied_operators = false:silent
+csharp_style_expression_bodied_properties = true:silent
+
+csharp_style_inlined_variable_declaration = true:suggestion
+
+csharp_style_pattern_local_over_anonymous_function = true:suggestion
+csharp_style_pattern_matching_over_as_with_null_check = true:suggestion
+csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion
+
+csharp_style_throw_expression = true:suggestion
+
+csharp_style_unused_value_expression_statement_preference = discard_variable:silent
+csharp_style_unused_value_assignment_preference = discard_variable:suggestion
+
+csharp_style_var_for_built_in_types = false:warning
+csharp_style_var_elsewhere = false:warning
+csharp_style_var_when_type_is_apparent = true:warning
diff --git a/.gitattributes b/.gitattributes
index a664be3a8..f39b679c5 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1,49 +1,108 @@
-*.doc diff=astextplain
-*.DOC diff=astextplain
-*.docx diff=astextplain
-*.DOCX diff=astextplain
-*.dot diff=astextplain
-*.DOT diff=astextplain
-*.pdf diff=astextplain
-*.PDF diff=astextplain
-*.rtf diff=astextplain
-*.RTF diff=astextplain
+###############################################################################
+# Set default behavior to:
+# treat as text and
+# normalize to Unix-style line endings
+###############################################################################
+* text eol=lf
-*.jpg binary
-*.png binary
-*.gif binary
+###############################################################################
+# Set explicit file behavior to:
+# treat as text and
+# normalize to Unix-style line endings
+###############################################################################
+*.asm text eol=lf
+*.c text eol=lf
+*.clj text eol=lf
+*.cmd text eol=lf
+*.cpp text eol=lf
+*.css text eol=lf
+*.cxx text eol=lf
+*.config text eol=lf
+*.DotSettings text eol=lf
+*.erl text eol=lf
+*.fs text eol=lf
+*.fsx text eol=lf
+*.h text eol=lf
+*.htm text eol=lf
+*.html text eol=lf
+*.hs text eol=lf
+*.hxx text eol=lf
+*.java text eol=lf
+*.js text eol=lf
+*.json text eol=lf
+*.less text eol=lf
+*.lisp text eol=lf
+*.lua text eol=lf
+*.m text eol=lf
+*.md text eol=lf
+*.php text eol=lf
+*.props text eol=lf
+*.ps1 text eol=lf
+*.py text eol=lf
+*.rb text eol=lf
+*.resx text eol=lf
+*.runsettings text eol=lf
+*.ruleset text eol=lf
+*.sass text eol=lf
+*.scss text eol=lf
+*.sh text eol=lf
+*.sql text eol=lf
+*.svg text eol=lf
+*.targets text eol=lf
+*.tt text eol=lf
+*.ttinclude text eol=crlf
+*.txt text eol=lf
+*.vb text eol=lf
+*.yml text eol=lf
-*.cs text=auto diff=csharp
-*.vb text=auto
-*.c text=auto
-*.cpp text=auto
-*.cxx text=auto
-*.h text=auto
-*.hxx text=auto
-*.py text=auto
-*.rb text=auto
-*.java text=auto
-*.html text=auto
-*.htm text=auto
-*.css text=auto
-*.scss text=auto
-*.sass text=auto
-*.less text=auto
-*.js text=auto
-*.lisp text=auto
-*.clj text=auto
-*.sql text=auto
-*.php text=auto
-*.lua text=auto
-*.m text=auto
-*.asm text=auto
-*.erl text=auto
-*.fs text=auto
-*.fsx text=auto
-*.hs text=auto
+###############################################################################
+# Set explicit file behavior to:
+# treat as text
+# normalize to Unix-style line endings and
+# diff as csharp
+###############################################################################
+*.cs text eol=lf diff=csharp
-*.csproj text=auto merge=union
-*.vbproj text=auto merge=union
-*.fsproj text=auto merge=union
-*.dbproj text=auto merge=union
-*.sln text=auto eol=crlf merge=union
+###############################################################################
+# Set explicit file behavior to:
+# treat as text
+# normalize to Unix-style line endings and
+# use a union merge when resoling conflicts
+###############################################################################
+*.csproj text eol=lf merge=union
+*.dbproj text eol=lf merge=union
+*.fsproj text eol=lf merge=union
+*.ncrunchproject text eol=lf merge=union
+*.vbproj text eol=lf merge=union
+
+###############################################################################
+# Set explicit file behavior to:
+# treat as text
+# normalize to Windows-style line endings and
+# use a union merge when resoling conflicts
+###############################################################################
+*.sln text eol=crlf merge=union
+
+###############################################################################
+# Set explicit file behavior to:
+# treat as binary
+###############################################################################
+*.bmp binary
+*.dll binary
+*.exe binary
+*.gif binary
+*.jpg binary
+*.png binary
+*.ttf binary
+*.snk binary
+
+###############################################################################
+# Set explicit file behavior to:
+# diff as plain text
+###############################################################################
+*.doc diff=astextplain
+*.docx diff=astextplain
+*.dot diff=astextplain
+*.pdf diff=astextplain
+*.pptx diff=astextplain
+*.rtf diff=astextplain
diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
new file mode 100644
index 000000000..ee7a10862
--- /dev/null
+++ b/.github/FUNDING.yml
@@ -0,0 +1 @@
+open_collective: imagesharp
\ No newline at end of file
diff --git a/.gitmodules b/.gitmodules
index e7972649f..37ef701cd 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -2,3 +2,6 @@
path = tests/Images/External
url = https://github.com/SixLabors/Imagesharp.Tests.Images.git
branch = master
+[submodule "standards"]
+ path = standards
+ url = https://github.com/SixLabors/Standards
diff --git a/.travis.yml b/.travis.yml
index 2515ca82a..6fd38484d 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -3,10 +3,10 @@ solution: ImageSharp.sln
matrix:
include:
- - os: linux # Ubuntu 14.04
- dist: trusty
+ - os: linux # Ubuntu 16.04
+ dist: xenial
sudo: required
- dotnet: 2.1.401
+ dotnet: 2.1.603
mono: latest
# - os: osx # OSX 10.11
# osx_image: xcode7.3.1
diff --git a/Directory.Build.props b/Directory.Build.props
new file mode 100644
index 000000000..bf004921e
--- /dev/null
+++ b/Directory.Build.props
@@ -0,0 +1,81 @@
+
+
+
+
+
+
+
+ $(MSBuildThisFileDirectory)artifacts/
+ $(ImageSharpProjectCategory)/$(MSBuildProjectName)
+ https://github.com/SixLabors/ImageSharp/
+
+
+
+
+ true
+ $(BaseArtifactsPath)obj/$(BaseArtifactsPathSuffix)/
+ portable
+ full
+ disable
+ true
+ false
+ true
+
+
+
+ true
+
+
+
+
+ false
+
+
+
+
+ Six Labors and contributors
+ $(BaseArtifactsPath)bin/$(BaseArtifactsPathSuffix)/
+ Six Labors
+ $(BaseArtifactsPath)pkg/$(BaseArtifactsPathSuffix)/$(Configuration)/
+ SixLabors.ImageSharp
+ 0.0.1
+ $(PackageVersion)
+
+
+
+
+
+ $(MSBuildThisFileDirectory)standards/SixLabors.snk
+ Copyright © Six Labors and Contributors
+ strict;IOperation
+ true
+ 7.3
+ en
+ true
+ https://raw.githubusercontent.com/SixLabors/Branding/master/icons/imagesharp/sixlabors.imagesharp.128.png
+ Apache-2.0
+ $(RepositoryUrl)
+ true
+ git
+
+ https://www.myget.org/F/sixlabors/api/v3/index.json;
+ https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json;
+ https://api.nuget.org/v3/index.json;
+
+ 002400000c8000009400000006020000002400005253413100040000010001000147e6fe6766715eec6cfed61f1e7dcdbf69748a3e355c67e9d8dfd953acab1d5e012ba34b23308166fdc61ee1d0390d5f36d814a6091dd4b5ed9eda5a26afced924c683b4bfb4b3d64b0586a57eff9f02b1f84e3cb0ddd518bd1697f2c84dcbb97eb8bb5c7801be12112ed0ec86db934b0e9a5171e6bb1384b6d2f7d54dfa97
+ true
+
+
+
+
+
+
+
+
diff --git a/Directory.Build.targets b/Directory.Build.targets
new file mode 100644
index 000000000..d1183e5d4
--- /dev/null
+++ b/Directory.Build.targets
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+ $(DefineConstants);$(OS)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ImageSharp.ruleset b/ImageSharp.ruleset
deleted file mode 100644
index d318b75c2..000000000
--- a/ImageSharp.ruleset
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/ImageSharp.sln b/ImageSharp.sln
index 8f3bc6860..1fd5e2d8b 100644
--- a/ImageSharp.sln
+++ b/ImageSharp.sln
@@ -1,46 +1,356 @@
Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 15
-VisualStudioVersion = 15.0.26730.12
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.28902.138
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SolutionItems", "SolutionItems", "{C317F1B1-D75E-4C6D-83EB-80367343E0D7}"
ProjectSection(SolutionItems) = preProject
.editorconfig = .editorconfig
+ .gitattributes = .gitattributes
+ .gitignore = .gitignore
+ .gitmodules = .gitmodules
.travis.yml = .travis.yml
appveyor.yml = appveyor.yml
- .github\ISSUE_TEMPLATE\ask-question.md = .github\ISSUE_TEMPLATE\ask-question.md
- .github\ISSUE_TEMPLATE\bug-report.md = .github\ISSUE_TEMPLATE\bug-report.md
+ build.cmd = build.cmd
+ build.ps1 = build.ps1
codecov.yml = codecov.yml
CodeCoverage.runsettings = CodeCoverage.runsettings
- .github\CONTRIBUTING.md = .github\CONTRIBUTING.md
- .github\ISSUE_TEMPLATE\feature-request.md = .github\ISSUE_TEMPLATE\feature-request.md
- features.md = features.md
- ImageSharp.ruleset = ImageSharp.ruleset
+ Directory.Build.props = Directory.Build.props
+ Directory.Build.targets = Directory.Build.targets
ImageSharp.sln.DotSettings = ImageSharp.sln.DotSettings
- NuGet.config = NuGet.config
- .github\PULL_REQUEST_TEMPLATE.md = .github\PULL_REQUEST_TEMPLATE.md
+ LICENSE = LICENSE
README.md = README.md
run-tests.ps1 = run-tests.ps1
+ stylecop.json = stylecop.json
EndProjectSection
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Source", "Source", "{815C0625-CD3D-440F-9F80-2D83856AB7AE}"
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".github", ".github", "{1799C43E-5C54-4A8F-8D64-B1475241DB0D}"
ProjectSection(SolutionItems) = preProject
- src\README.md = src\README.md
+ .github\CONTRIBUTING.md = .github\CONTRIBUTING.md
+ .github\PULL_REQUEST_TEMPLATE.md = .github\PULL_REQUEST_TEMPLATE.md
EndProjectSection
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{56801022-D71A-4FBE-BC5B-CBA08E2284EC}"
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ISSUE_TEMPLATE", "ISSUE_TEMPLATE", "{FBE8C1AD-5AEC-4514-9B64-091D8E145865}"
+ ProjectSection(SolutionItems) = preProject
+ .github\ISSUE_TEMPLATE\ask-question.md = .github\ISSUE_TEMPLATE\ask-question.md
+ .github\ISSUE_TEMPLATE\bug-report.md = .github\ISSUE_TEMPLATE\bug-report.md
+ .github\ISSUE_TEMPLATE\feature-request.md = .github\ISSUE_TEMPLATE\feature-request.md
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".vscode", ".vscode", "{0274D4CF-9932-47CC-8E89-54DC05B8F06E}"
+ ProjectSection(SolutionItems) = preProject
+ .vscode\launch.json = .vscode\launch.json
+ .vscode\tasks.json = .vscode\tasks.json
+ EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{E919DF0B-2607-4462-8FC0-5C98FE50F8C9}"
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Shared", "Shared", "{9E574A07-F879-4811-9C41-5CBDC6BAFDB7}"
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "icons", "icons", "{2B02E303-7CC6-4E15-97EE-DBE86B287553}"
ProjectSection(SolutionItems) = preProject
- src\Shared\AssemblyInfo.Common.cs = src\Shared\AssemblyInfo.Common.cs
+ build\icons\imagesharp-logo-128.png = build\icons\imagesharp-logo-128.png
+ build\icons\imagesharp-logo-256.png = build\icons\imagesharp-logo-256.png
+ build\icons\imagesharp-logo-32.png = build\icons\imagesharp-logo-32.png
+ build\icons\imagesharp-logo-512.png = build\icons\imagesharp-logo-512.png
+ build\icons\imagesharp-logo-64.png = build\icons\imagesharp-logo-64.png
+ build\icons\imagesharp-logo.png = build\icons\imagesharp-logo.png
+ build\icons\imagesharp-logo.svg = build\icons\imagesharp-logo.svg
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{815C0625-CD3D-440F-9F80-2D83856AB7AE}"
+ ProjectSection(SolutionItems) = preProject
+ src\Directory.Build.props = src\Directory.Build.props
+ src\Directory.Build.targets = src\Directory.Build.targets
+ src\README.md = src\README.md
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("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{56801022-D71A-4FBE-BC5B-CBA08E2284EC}"
+ ProjectSection(SolutionItems) = preProject
+ tests\Directory.Build.props = tests\Directory.Build.props
+ tests\Directory.Build.targets = tests\Directory.Build.targets
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CodeCoverage", "CodeCoverage", "{D4C5EC58-F8E6-4636-B9EE-C99D2578E5C6}"
+ ProjectSection(SolutionItems) = preProject
+ tests\CodeCoverage\CodeCoverage.cmd = tests\CodeCoverage\CodeCoverage.cmd
+ tests\CodeCoverage\packages.config = tests\CodeCoverage\packages.config
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Images", "Images", "{FA55F5DE-11A6-487D-ABA4-BC93A02717DD}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Input", "Input", "{9DA226A1-8656-49A8-A58A-A8B5C081AD66}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Bmp", "Bmp", "{1A82C5F6-90E0-4E97-BE16-A825C046B493}"
+ ProjectSection(SolutionItems) = preProject
+ tests\Images\Input\Bmp\BitmapCoreHeaderQR.bmp = tests\Images\Input\Bmp\BitmapCoreHeaderQR.bmp
+ tests\Images\Input\Bmp\BITMAPV5HEADER.bmp = tests\Images\Input\Bmp\BITMAPV5HEADER.bmp
+ tests\Images\Input\Bmp\Car.bmp = tests\Images\Input\Bmp\Car.bmp
+ tests\Images\Input\Bmp\F.bmp = tests\Images\Input\Bmp\F.bmp
+ tests\Images\Input\Bmp\issue735.bmp = tests\Images\Input\Bmp\issue735.bmp
+ tests\Images\Input\Bmp\neg_height.bmp = tests\Images\Input\Bmp\neg_height.bmp
+ tests\Images\Input\Bmp\pal1.bmp = tests\Images\Input\Bmp\pal1.bmp
+ tests\Images\Input\Bmp\pal1p1.bmp = tests\Images\Input\Bmp\pal1p1.bmp
+ tests\Images\Input\Bmp\pal4.bmp = tests\Images\Input\Bmp\pal4.bmp
+ tests\Images\Input\Bmp\pal4rle.bmp = tests\Images\Input\Bmp\pal4rle.bmp
+ tests\Images\Input\Bmp\pal8-0.bmp = tests\Images\Input\Bmp\pal8-0.bmp
+ tests\Images\Input\Bmp\pal8gs.bmp = tests\Images\Input\Bmp\pal8gs.bmp
+ tests\Images\Input\Bmp\pal8offs.bmp = tests\Images\Input\Bmp\pal8offs.bmp
+ tests\Images\Input\Bmp\pal8os2sp.bmp = tests\Images\Input\Bmp\pal8os2sp.bmp
+ tests\Images\Input\Bmp\pal8os2v1_winv2.bmp = tests\Images\Input\Bmp\pal8os2v1_winv2.bmp
+ tests\Images\Input\Bmp\pal8os2v2-16.bmp = tests\Images\Input\Bmp\pal8os2v2-16.bmp
+ tests\Images\Input\Bmp\pal8os2v2.bmp = tests\Images\Input\Bmp\pal8os2v2.bmp
+ tests\Images\Input\Bmp\pal8v4.bmp = tests\Images\Input\Bmp\pal8v4.bmp
+ tests\Images\Input\Bmp\pal8v5.bmp = tests\Images\Input\Bmp\pal8v5.bmp
+ tests\Images\Input\Bmp\rgb16-565.bmp = tests\Images\Input\Bmp\rgb16-565.bmp
+ tests\Images\Input\Bmp\rgb16-565pal.bmp = tests\Images\Input\Bmp\rgb16-565pal.bmp
+ tests\Images\Input\Bmp\rgb16.bmp = tests\Images\Input\Bmp\rgb16.bmp
+ tests\Images\Input\Bmp\rgb16bfdef.bmp = tests\Images\Input\Bmp\rgb16bfdef.bmp
+ tests\Images\Input\Bmp\rgb24.bmp = tests\Images\Input\Bmp\rgb24.bmp
+ tests\Images\Input\Bmp\rgb32.bmp = tests\Images\Input\Bmp\rgb32.bmp
+ tests\Images\Input\Bmp\rgb32bf.bmp = tests\Images\Input\Bmp\rgb32bf.bmp
+ tests\Images\Input\Bmp\rgb32bfdef.bmp = tests\Images\Input\Bmp\rgb32bfdef.bmp
+ tests\Images\Input\Bmp\rgba32-1010102.bmp = tests\Images\Input\Bmp\rgba32-1010102.bmp
+ tests\Images\Input\Bmp\rgba32.bmp = tests\Images\Input\Bmp\rgba32.bmp
+ tests\Images\Input\Bmp\rgba32abf.bmp = tests\Images\Input\Bmp\rgba32abf.bmp
+ tests\Images\Input\Bmp\rgba32h56.bmp = tests\Images\Input\Bmp\rgba32h56.bmp
+ tests\Images\Input\Bmp\RunLengthEncoded-inverted.bmp = tests\Images\Input\Bmp\RunLengthEncoded-inverted.bmp
+ tests\Images\Input\Bmp\RunLengthEncoded.bmp = tests\Images\Input\Bmp\RunLengthEncoded.bmp
+ tests\Images\Input\Bmp\test16-inverted.bmp = tests\Images\Input\Bmp\test16-inverted.bmp
+ tests\Images\Input\Bmp\test16.bmp = tests\Images\Input\Bmp\test16.bmp
+ tests\Images\Input\Bmp\test8-inverted.bmp = tests\Images\Input\Bmp\test8-inverted.bmp
+ tests\Images\Input\Bmp\test8.bmp = tests\Images\Input\Bmp\test8.bmp
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Gif", "Gif", "{EE3FB0B3-1C31-41E9-93AB-BA800560A868}"
+ ProjectSection(SolutionItems) = preProject
+ tests\Images\Input\Gif\base_1x4.gif = tests\Images\Input\Gif\base_1x4.gif
+ tests\Images\Input\Gif\base_4x1.gif = tests\Images\Input\Gif\base_4x1.gif
+ tests\Images\Input\Gif\cheers.gif = tests\Images\Input\Gif\cheers.gif
+ tests\Images\Input\Gif\giphy.gif = tests\Images\Input\Gif\giphy.gif
+ tests\Images\Input\Gif\kumin.gif = tests\Images\Input\Gif\kumin.gif
+ tests\Images\Input\Gif\leo.gif = tests\Images\Input\Gif\leo.gif
+ tests\Images\Input\Gif\rings.gif = tests\Images\Input\Gif\rings.gif
+ tests\Images\Input\Gif\trans.gif = tests\Images\Input\Gif\trans.gif
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "issues", "issues", "{BF8DFDC1-CEE5-4A37-B216-D3085360C776}"
+ ProjectSection(SolutionItems) = preProject
+ tests\Images\Input\Gif\issues\issue403_baddescriptorwidth.gif = tests\Images\Input\Gif\issues\issue403_baddescriptorwidth.gif
+ tests\Images\Input\Gif\issues\issue405_badappextlength252-2.gif = tests\Images\Input\Gif\issues\issue405_badappextlength252-2.gif
+ tests\Images\Input\Gif\issues\issue405_badappextlength252.gif = tests\Images\Input\Gif\issues\issue405_badappextlength252.gif
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Jpg", "Jpg", "{DB21FED7-E8CB-4B00-9EB2-9144D32A590A}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "baseline", "baseline", "{195BA3D3-3E9F-4BC5-AB40-5F9FEB638146}"
+ ProjectSection(SolutionItems) = preProject
+ tests\Images\Input\Jpg\baseline\AsianCarvingLowContrast.jpg = tests\Images\Input\Jpg\baseline\AsianCarvingLowContrast.jpg
+ tests\Images\Input\Jpg\baseline\badeof.jpg = tests\Images\Input\Jpg\baseline\badeof.jpg
+ tests\Images\Input\Jpg\baseline\badrst.jpg = tests\Images\Input\Jpg\baseline\badrst.jpg
+ tests\Images\Input\Jpg\baseline\Calliphora.jpg = tests\Images\Input\Jpg\baseline\Calliphora.jpg
+ tests\Images\Input\Jpg\baseline\cmyk.jpg = tests\Images\Input\Jpg\baseline\cmyk.jpg
+ tests\Images\Input\Jpg\baseline\exif.jpg = tests\Images\Input\Jpg\baseline\exif.jpg
+ tests\Images\Input\Jpg\baseline\Floorplan.jpg = tests\Images\Input\Jpg\baseline\Floorplan.jpg
+ tests\Images\Input\Jpg\baseline\gamma_dalai_lama_gray.jpg = tests\Images\Input\Jpg\baseline\gamma_dalai_lama_gray.jpg
+ tests\Images\Input\Jpg\baseline\Hiyamugi.jpg = tests\Images\Input\Jpg\baseline\Hiyamugi.jpg
+ tests\Images\Input\Jpg\baseline\jpeg400jfif.jpg = tests\Images\Input\Jpg\baseline\jpeg400jfif.jpg
+ tests\Images\Input\Jpg\baseline\jpeg420exif.jpg = tests\Images\Input\Jpg\baseline\jpeg420exif.jpg
+ tests\Images\Input\Jpg\baseline\jpeg420small.jpg = tests\Images\Input\Jpg\baseline\jpeg420small.jpg
+ tests\Images\Input\Jpg\baseline\jpeg444.jpg = tests\Images\Input\Jpg\baseline\jpeg444.jpg
+ tests\Images\Input\Jpg\baseline\Lake.jpg = tests\Images\Input\Jpg\baseline\Lake.jpg
+ tests\Images\Input\Jpg\baseline\MultiScanBaselineCMYK.jpg = tests\Images\Input\Jpg\baseline\MultiScanBaselineCMYK.jpg
+ tests\Images\Input\Jpg\baseline\ratio-1x1.jpg = tests\Images\Input\Jpg\baseline\ratio-1x1.jpg
+ tests\Images\Input\Jpg\baseline\Snake.jpg = tests\Images\Input\Jpg\baseline\Snake.jpg
+ tests\Images\Input\Jpg\baseline\testimgint.jpg = tests\Images\Input\Jpg\baseline\testimgint.jpg
+ tests\Images\Input\Jpg\baseline\testorig.jpg = tests\Images\Input\Jpg\baseline\testorig.jpg
+ tests\Images\Input\Jpg\baseline\testorig12.jpg = tests\Images\Input\Jpg\baseline\testorig12.jpg
+ tests\Images\Input\Jpg\baseline\turtle.jpg = tests\Images\Input\Jpg\baseline\turtle.jpg
+ tests\Images\Input\Jpg\baseline\ycck-subsample-1222.jpg = tests\Images\Input\Jpg\baseline\ycck-subsample-1222.jpg
+ tests\Images\Input\Jpg\baseline\ycck.jpg = tests\Images\Input\Jpg\baseline\ycck.jpg
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "JpegSnoopReports", "JpegSnoopReports", "{538F0EBD-4084-4EDB-93DD-6D35B733CA48}"
+ ProjectSection(SolutionItems) = preProject
+ tests\Images\Input\Jpg\baseline\JpegSnoopReports\badeof.jpg.txt = tests\Images\Input\Jpg\baseline\JpegSnoopReports\badeof.jpg.txt
+ tests\Images\Input\Jpg\baseline\JpegSnoopReports\badrst.jpg.txt = tests\Images\Input\Jpg\baseline\JpegSnoopReports\badrst.jpg.txt
+ tests\Images\Input\Jpg\baseline\JpegSnoopReports\Calliphora.jpg.txt = tests\Images\Input\Jpg\baseline\JpegSnoopReports\Calliphora.jpg.txt
+ tests\Images\Input\Jpg\baseline\JpegSnoopReports\cmyk.jpg.txt = tests\Images\Input\Jpg\baseline\JpegSnoopReports\cmyk.jpg.txt
+ tests\Images\Input\Jpg\baseline\JpegSnoopReports\exif.jpg.txt = tests\Images\Input\Jpg\baseline\JpegSnoopReports\exif.jpg.txt
+ tests\Images\Input\Jpg\baseline\JpegSnoopReports\Floorplan.jpg.txt = tests\Images\Input\Jpg\baseline\JpegSnoopReports\Floorplan.jpg.txt
+ tests\Images\Input\Jpg\baseline\JpegSnoopReports\gamma_dalai_lama_gray.jpg.txt = tests\Images\Input\Jpg\baseline\JpegSnoopReports\gamma_dalai_lama_gray.jpg.txt
+ tests\Images\Input\Jpg\baseline\JpegSnoopReports\Hiyamugi.jpg.txt = tests\Images\Input\Jpg\baseline\JpegSnoopReports\Hiyamugi.jpg.txt
+ tests\Images\Input\Jpg\baseline\JpegSnoopReports\jpeg400jfif.jpg.txt = tests\Images\Input\Jpg\baseline\JpegSnoopReports\jpeg400jfif.jpg.txt
+ tests\Images\Input\Jpg\baseline\JpegSnoopReports\jpeg420exif.jpg.txt = tests\Images\Input\Jpg\baseline\JpegSnoopReports\jpeg420exif.jpg.txt
+ tests\Images\Input\Jpg\baseline\JpegSnoopReports\jpeg420small.jpg.txt = tests\Images\Input\Jpg\baseline\JpegSnoopReports\jpeg420small.jpg.txt
+ tests\Images\Input\Jpg\baseline\JpegSnoopReports\jpeg444.jpg.txt = tests\Images\Input\Jpg\baseline\JpegSnoopReports\jpeg444.jpg.txt
+ tests\Images\Input\Jpg\baseline\JpegSnoopReports\Lake.jpg.txt = tests\Images\Input\Jpg\baseline\JpegSnoopReports\Lake.jpg.txt
+ tests\Images\Input\Jpg\baseline\JpegSnoopReports\MultiScanBaselineCMYK.jpg.txt = tests\Images\Input\Jpg\baseline\JpegSnoopReports\MultiScanBaselineCMYK.jpg.txt
+ tests\Images\Input\Jpg\baseline\JpegSnoopReports\ratio-1x1.jpg.txt = tests\Images\Input\Jpg\baseline\JpegSnoopReports\ratio-1x1.jpg.txt
+ tests\Images\Input\Jpg\baseline\JpegSnoopReports\Snake.jpg.txt = tests\Images\Input\Jpg\baseline\JpegSnoopReports\Snake.jpg.txt
+ tests\Images\Input\Jpg\baseline\JpegSnoopReports\testimgint.jpg.txt = tests\Images\Input\Jpg\baseline\JpegSnoopReports\testimgint.jpg.txt
+ tests\Images\Input\Jpg\baseline\JpegSnoopReports\testorig.jpg.txt = tests\Images\Input\Jpg\baseline\JpegSnoopReports\testorig.jpg.txt
+ tests\Images\Input\Jpg\baseline\JpegSnoopReports\turtle.jpg.txt = tests\Images\Input\Jpg\baseline\JpegSnoopReports\turtle.jpg.txt
+ tests\Images\Input\Jpg\baseline\JpegSnoopReports\ycck.jpg.txt = tests\Images\Input\Jpg\baseline\JpegSnoopReports\ycck.jpg.txt
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "issues", "issues", "{5C9B689F-B96D-47BE-A208-C23B1B2A8570}"
+ ProjectSection(SolutionItems) = preProject
+ tests\Images\Input\Jpg\issues\Issue159-MissingFF00-Progressive-Bedroom.jpg = tests\Images\Input\Jpg\issues\Issue159-MissingFF00-Progressive-Bedroom.jpg
+ tests\Images\Input\Jpg\issues\Issue159-MissingFF00-Progressive-Girl.jpg = tests\Images\Input\Jpg\issues\Issue159-MissingFF00-Progressive-Girl.jpg
+ tests\Images\Input\Jpg\issues\Issue178-BadCoeffsProgressive-Lemon.jpg = tests\Images\Input\Jpg\issues\Issue178-BadCoeffsProgressive-Lemon.jpg
+ tests\Images\Input\Jpg\issues\Issue214-CriticalEOF.jpg = tests\Images\Input\Jpg\issues\Issue214-CriticalEOF.jpg
+ tests\Images\Input\Jpg\issues\Issue385-BadZigZag-Progressive.jpg = tests\Images\Input\Jpg\issues\Issue385-BadZigZag-Progressive.jpg
+ tests\Images\Input\Jpg\issues\Issue394-MultiHuffmanBaseline-Speakers.jpg = tests\Images\Input\Jpg\issues\Issue394-MultiHuffmanBaseline-Speakers.jpg
+ tests\Images\Input\Jpg\issues\Issue517-No-EOI-Progressive.jpg = tests\Images\Input\Jpg\issues\Issue517-No-EOI-Progressive.jpg
+ tests\Images\Input\Jpg\issues\Issue518-Bad-RST-Progressive.jpg = tests\Images\Input\Jpg\issues\Issue518-Bad-RST-Progressive.jpg
+ tests\Images\Input\Jpg\issues\Issue520-InvalidCast.jpg = tests\Images\Input\Jpg\issues\Issue520-InvalidCast.jpg
+ tests\Images\Input\Jpg\issues\Issue624-DhtHasWrongLength-Progressive-N.jpg = tests\Images\Input\Jpg\issues\Issue624-DhtHasWrongLength-Progressive-N.jpg
+ tests\Images\Input\Jpg\issues\Issue694-Decode-Exif-OutOfRange.jpg = tests\Images\Input\Jpg\issues\Issue694-Decode-Exif-OutOfRange.jpg
+ tests\Images\Input\Jpg\issues\Issue695-Invalid-EOI.jpg = tests\Images\Input\Jpg\issues\Issue695-Invalid-EOI.jpg
+ tests\Images\Input\Jpg\issues\Issue696-Resize-Exif-OutOfRange.jpg = tests\Images\Input\Jpg\issues\Issue696-Resize-Exif-OutOfRange.jpg
+ tests\Images\Input\Jpg\issues\Issue721-InvalidAPP0.jpg = tests\Images\Input\Jpg\issues\Issue721-InvalidAPP0.jpg
+ tests\Images\Input\Jpg\issues\Issue723-Ordered-Interleaved-Progressive-A.jpg = tests\Images\Input\Jpg\issues\Issue723-Ordered-Interleaved-Progressive-A.jpg
+ tests\Images\Input\Jpg\issues\Issue723-Ordered-Interleaved-Progressive-B.jpg = tests\Images\Input\Jpg\issues\Issue723-Ordered-Interleaved-Progressive-B.jpg
+ tests\Images\Input\Jpg\issues\Issue723-Ordered-Interleaved-Progressive-C.jpg = tests\Images\Input\Jpg\issues\Issue723-Ordered-Interleaved-Progressive-C.jpg
+ tests\Images\Input\Jpg\issues\issue750-exif-load.jpg = tests\Images\Input\Jpg\issues\issue750-exif-load.jpg
+ tests\Images\Input\Jpg\issues\issue750-exif-tranform.jpg = tests\Images\Input\Jpg\issues\issue750-exif-tranform.jpg
+ tests\Images\Input\Jpg\issues\Issue845-Incorrect-Quality99.jpg = tests\Images\Input\Jpg\issues\Issue845-Incorrect-Quality99.jpg
+ tests\Images\Input\Jpg\issues\issue855-incorrect-colorspace.jpg = tests\Images\Input\Jpg\issues\issue855-incorrect-colorspace.jpg
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "fuzz", "fuzz", "{516A3532-6AC2-417B-AD79-9BD5D0D378A0}"
+ ProjectSection(SolutionItems) = preProject
+ tests\Images\Input\Jpg\issues\fuzz\Issue797-NullReferenceException.jpg = tests\Images\Input\Jpg\issues\fuzz\Issue797-NullReferenceException.jpg
+ tests\Images\Input\Jpg\issues\fuzz\Issue798-AccessViolationException.jpg = tests\Images\Input\Jpg\issues\fuzz\Issue798-AccessViolationException.jpg
+ tests\Images\Input\Jpg\issues\fuzz\Issue821-DivideByZeroException.jpg = tests\Images\Input\Jpg\issues\fuzz\Issue821-DivideByZeroException.jpg
+ tests\Images\Input\Jpg\issues\fuzz\Issue822-DivideByZeroException.jpg = tests\Images\Input\Jpg\issues\fuzz\Issue822-DivideByZeroException.jpg
+ tests\Images\Input\Jpg\issues\fuzz\Issue823-NullReferenceException.jpg = tests\Images\Input\Jpg\issues\fuzz\Issue823-NullReferenceException.jpg
+ tests\Images\Input\Jpg\issues\fuzz\Issue824-IndexOutOfRangeException-A.jpg = tests\Images\Input\Jpg\issues\fuzz\Issue824-IndexOutOfRangeException-A.jpg
+ tests\Images\Input\Jpg\issues\fuzz\Issue824-IndexOutOfRangeException-B.jpg = tests\Images\Input\Jpg\issues\fuzz\Issue824-IndexOutOfRangeException-B.jpg
+ tests\Images\Input\Jpg\issues\fuzz\Issue824-IndexOutOfRangeException-C.jpg = tests\Images\Input\Jpg\issues\fuzz\Issue824-IndexOutOfRangeException-C.jpg
+ tests\Images\Input\Jpg\issues\fuzz\Issue824-IndexOutOfRangeException-D.jpg = tests\Images\Input\Jpg\issues\fuzz\Issue824-IndexOutOfRangeException-D.jpg
+ tests\Images\Input\Jpg\issues\fuzz\Issue824-IndexOutOfRangeException-E.jpg = tests\Images\Input\Jpg\issues\fuzz\Issue824-IndexOutOfRangeException-E.jpg
+ tests\Images\Input\Jpg\issues\fuzz\Issue824-IndexOutOfRangeException-F.jpg = tests\Images\Input\Jpg\issues\fuzz\Issue824-IndexOutOfRangeException-F.jpg
+ tests\Images\Input\Jpg\issues\fuzz\Issue824-IndexOutOfRangeException-G.jpg = tests\Images\Input\Jpg\issues\fuzz\Issue824-IndexOutOfRangeException-G.jpg
+ tests\Images\Input\Jpg\issues\fuzz\Issue824-IndexOutOfRangeException-H.jpg = tests\Images\Input\Jpg\issues\fuzz\Issue824-IndexOutOfRangeException-H.jpg
+ tests\Images\Input\Jpg\issues\fuzz\Issue825-ArgumentOutOfRangeException-A.jpg = tests\Images\Input\Jpg\issues\fuzz\Issue825-ArgumentOutOfRangeException-A.jpg
+ tests\Images\Input\Jpg\issues\fuzz\Issue825-ArgumentOutOfRangeException-B.jpg = tests\Images\Input\Jpg\issues\fuzz\Issue825-ArgumentOutOfRangeException-B.jpg
+ tests\Images\Input\Jpg\issues\fuzz\Issue825-ArgumentOutOfRangeException-C.jpg = tests\Images\Input\Jpg\issues\fuzz\Issue825-ArgumentOutOfRangeException-C.jpg
+ tests\Images\Input\Jpg\issues\fuzz\Issue825-ArgumentOutOfRangeException-D.jpg = tests\Images\Input\Jpg\issues\fuzz\Issue825-ArgumentOutOfRangeException-D.jpg
+ tests\Images\Input\Jpg\issues\fuzz\Issue826-ArgumentException-A.jpg = tests\Images\Input\Jpg\issues\fuzz\Issue826-ArgumentException-A.jpg
+ tests\Images\Input\Jpg\issues\fuzz\Issue826-ArgumentException-B.jpg = tests\Images\Input\Jpg\issues\fuzz\Issue826-ArgumentException-B.jpg
+ tests\Images\Input\Jpg\issues\fuzz\Issue826-ArgumentException-C.jpg = tests\Images\Input\Jpg\issues\fuzz\Issue826-ArgumentException-C.jpg
+ tests\Images\Input\Jpg\issues\fuzz\Issue827-AccessViolationException.jpg = tests\Images\Input\Jpg\issues\fuzz\Issue827-AccessViolationException.jpg
+ tests\Images\Input\Jpg\issues\fuzz\Issue839-ExecutionEngineException.jpg = tests\Images\Input\Jpg\issues\fuzz\Issue839-ExecutionEngineException.jpg
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "JpegSnoopReports", "JpegSnoopReports", "{714CDEA1-9AE6-4F76-B8B1-A7DB8C1DB82F}"
+ ProjectSection(SolutionItems) = preProject
+ tests\Images\Input\Jpg\issues\JpegSnoopReports\Issue159-MissingFF00-Progressive-Bedroom.jpg.txt = tests\Images\Input\Jpg\issues\JpegSnoopReports\Issue159-MissingFF00-Progressive-Bedroom.jpg.txt
+ tests\Images\Input\Jpg\issues\JpegSnoopReports\Issue159-MissingFF00-Progressive-Girl.jpg.txt = tests\Images\Input\Jpg\issues\JpegSnoopReports\Issue159-MissingFF00-Progressive-Girl.jpg.txt
+ tests\Images\Input\Jpg\issues\JpegSnoopReports\Issue178-BadCoeffsProgressive-Lemon.jpg.txt = tests\Images\Input\Jpg\issues\JpegSnoopReports\Issue178-BadCoeffsProgressive-Lemon.jpg.txt
+ tests\Images\Input\Jpg\issues\JpegSnoopReports\Issue214-CriticalEOF .jpg.txt = tests\Images\Input\Jpg\issues\JpegSnoopReports\Issue214-CriticalEOF .jpg.txt
+ tests\Images\Input\Jpg\issues\JpegSnoopReports\Issue385-BadZigZag-Progressive.jpg.txt = tests\Images\Input\Jpg\issues\JpegSnoopReports\Issue385-BadZigZag-Progressive.jpg.txt
+ tests\Images\Input\Jpg\issues\JpegSnoopReports\Issue394-MultiHuffmanBaseline-Speakers.jpg.txt = tests\Images\Input\Jpg\issues\JpegSnoopReports\Issue394-MultiHuffmanBaseline-Speakers.jpg.txt
+ tests\Images\Input\Jpg\issues\JpegSnoopReports\Issue517-No-EOI-Progressive.jpg.txt = tests\Images\Input\Jpg\issues\JpegSnoopReports\Issue517-No-EOI-Progressive.jpg.txt
+ tests\Images\Input\Jpg\issues\JpegSnoopReports\Issue518-Bad-RST-Progressive.jpg.txt = tests\Images\Input\Jpg\issues\JpegSnoopReports\Issue518-Bad-RST-Progressive.jpg.txt
+ tests\Images\Input\Jpg\issues\JpegSnoopReports\Issue520-InvalidCast.jpg.txt = tests\Images\Input\Jpg\issues\JpegSnoopReports\Issue520-InvalidCast.jpg.txt
+ tests\Images\Input\Jpg\issues\JpegSnoopReports\Issue624-DhtHasWrongLength-Progressive-N.jpg.txt = tests\Images\Input\Jpg\issues\JpegSnoopReports\Issue624-DhtHasWrongLength-Progressive-N.jpg.txt
+ tests\Images\Input\Jpg\issues\JpegSnoopReports\Issue694-Decode-Exif-OutOfRange.jpg.txt = tests\Images\Input\Jpg\issues\JpegSnoopReports\Issue694-Decode-Exif-OutOfRange.jpg.txt
+ tests\Images\Input\Jpg\issues\JpegSnoopReports\Issue695-Invalid-EOI.jpg.txt = tests\Images\Input\Jpg\issues\JpegSnoopReports\Issue695-Invalid-EOI.jpg.txt
+ tests\Images\Input\Jpg\issues\JpegSnoopReports\Issue696-Resize-Exif-OutOfRange.jpg.txt = tests\Images\Input\Jpg\issues\JpegSnoopReports\Issue696-Resize-Exif-OutOfRange.jpg.txt
+ tests\Images\Input\Jpg\issues\JpegSnoopReports\Issue721-InvalidAPP0.jpg.txt = tests\Images\Input\Jpg\issues\JpegSnoopReports\Issue721-InvalidAPP0.jpg.txt
+ tests\Images\Input\Jpg\issues\JpegSnoopReports\Issue723-Ordered-Interleaved-Progressive-A.jpg.txt = tests\Images\Input\Jpg\issues\JpegSnoopReports\Issue723-Ordered-Interleaved-Progressive-A.jpg.txt
+ tests\Images\Input\Jpg\issues\JpegSnoopReports\Issue723-Ordered-Interleaved-Progressive-B.jpg.txt = tests\Images\Input\Jpg\issues\JpegSnoopReports\Issue723-Ordered-Interleaved-Progressive-B.jpg.txt
+ tests\Images\Input\Jpg\issues\JpegSnoopReports\Issue723-Ordered-Interleaved-Progressive-C.jpg.txt = tests\Images\Input\Jpg\issues\JpegSnoopReports\Issue723-Ordered-Interleaved-Progressive-C.jpg.txt
+ tests\Images\Input\Jpg\issues\JpegSnoopReports\issue750-exif-load.jpg.txt = tests\Images\Input\Jpg\issues\JpegSnoopReports\issue750-exif-load.jpg.txt
+ tests\Images\Input\Jpg\issues\JpegSnoopReports\issue750-exif-tranform.jpg.txt = tests\Images\Input\Jpg\issues\JpegSnoopReports\issue750-exif-tranform.jpg.txt
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "progressive", "progressive", "{6458AFCB-A159-47D5-8F2B-50C95C0915E0}"
+ ProjectSection(SolutionItems) = preProject
+ tests\Images\Input\Jpg\progressive\BadEofProgressive.jpg = tests\Images\Input\Jpg\progressive\BadEofProgressive.jpg
+ tests\Images\Input\Jpg\progressive\ExifUndefType.jpg = tests\Images\Input\Jpg\progressive\ExifUndefType.jpg
+ tests\Images\Input\Jpg\progressive\fb.jpg = tests\Images\Input\Jpg\progressive\fb.jpg
+ tests\Images\Input\Jpg\progressive\Festzug.jpg = tests\Images\Input\Jpg\progressive\Festzug.jpg
+ tests\Images\Input\Jpg\progressive\progress.jpg = tests\Images\Input\Jpg\progressive\progress.jpg
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "JpegSnoopReports", "JpegSnoopReports", "{39F5197B-CF6C-41A5-9739-7F97E78BB104}"
+ ProjectSection(SolutionItems) = preProject
+ tests\Images\Input\Jpg\progressive\JpegSnoopReports\BadEofProgressive.jpg.txt = tests\Images\Input\Jpg\progressive\JpegSnoopReports\BadEofProgressive.jpg.txt
+ tests\Images\Input\Jpg\progressive\JpegSnoopReports\ExifUndefType.jpg.txt = tests\Images\Input\Jpg\progressive\JpegSnoopReports\ExifUndefType.jpg.txt
+ tests\Images\Input\Jpg\progressive\JpegSnoopReports\fb.jpg.txt = tests\Images\Input\Jpg\progressive\JpegSnoopReports\fb.jpg.txt
+ tests\Images\Input\Jpg\progressive\JpegSnoopReports\Festzug.jpg.txt = tests\Images\Input\Jpg\progressive\JpegSnoopReports\Festzug.jpg.txt
+ tests\Images\Input\Jpg\progressive\JpegSnoopReports\progress.jpg.txt = tests\Images\Input\Jpg\progressive\JpegSnoopReports\progress.jpg.txt
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Png", "Png", "{E1C42A6F-913B-4A7B-B1A8-2BB62843B254}"
+ ProjectSection(SolutionItems) = preProject
+ tests\Images\Input\Png\banner7-adam.png = tests\Images\Input\Png\banner7-adam.png
+ tests\Images\Input\Png\banner8-index.png = tests\Images\Input\Png\banner8-index.png
+ tests\Images\Input\Png\big-corrupted-chunk.png = tests\Images\Input\Png\big-corrupted-chunk.png
+ tests\Images\Input\Png\Bike.png = tests\Images\Input\Png\Bike.png
+ tests\Images\Input\Png\BikeGrayscale.png = tests\Images\Input\Png\BikeGrayscale.png
+ tests\Images\Input\Png\blur.png = tests\Images\Input\Png\blur.png
+ tests\Images\Input\Png\bpp1.png = tests\Images\Input\Png\bpp1.png
+ tests\Images\Input\Png\CalliphoraPartial.png = tests\Images\Input\Png\CalliphoraPartial.png
+ tests\Images\Input\Png\CalliphoraPartialGrayscale.png = tests\Images\Input\Png\CalliphoraPartialGrayscale.png
+ tests\Images\Input\Png\chunklength1.png = tests\Images\Input\Png\chunklength1.png
+ tests\Images\Input\Png\chunklength2.png = tests\Images\Input\Png\chunklength2.png
+ tests\Images\Input\Png\cross.png = tests\Images\Input\Png\cross.png
+ tests\Images\Input\Png\ducky.png = tests\Images\Input\Png\ducky.png
+ tests\Images\Input\Png\filter0.png = tests\Images\Input\Png\filter0.png
+ tests\Images\Input\Png\filter1.png = tests\Images\Input\Png\filter1.png
+ tests\Images\Input\Png\filter2.png = tests\Images\Input\Png\filter2.png
+ tests\Images\Input\Png\filter3.png = tests\Images\Input\Png\filter3.png
+ tests\Images\Input\Png\filter4.png = tests\Images\Input\Png\filter4.png
+ tests\Images\Input\Png\filterVar.png = tests\Images\Input\Png\filterVar.png
+ tests\Images\Input\Png\gray-1-trns.png = tests\Images\Input\Png\gray-1-trns.png
+ tests\Images\Input\Png\gray-16-tRNS-interlaced.png = tests\Images\Input\Png\gray-16-tRNS-interlaced.png
+ tests\Images\Input\Png\gray-16.png = tests\Images\Input\Png\gray-16.png
+ tests\Images\Input\Png\gray-2-tRNS.png = tests\Images\Input\Png\gray-2-tRNS.png
+ tests\Images\Input\Png\gray-4-tRNS.png = tests\Images\Input\Png\gray-4-tRNS.png
+ tests\Images\Input\Png\gray-8-tRNS.png = tests\Images\Input\Png\gray-8-tRNS.png
+ tests\Images\Input\Png\gray-alpha-16.png = tests\Images\Input\Png\gray-alpha-16.png
+ tests\Images\Input\Png\gray-alpha-8.png = tests\Images\Input\Png\gray-alpha-8.png
+ tests\Images\Input\Png\gray_4bpp.png = tests\Images\Input\Png\gray_4bpp.png
+ tests\Images\Input\Png\icon.png = tests\Images\Input\Png\icon.png
+ tests\Images\Input\Png\iftbbn0g01.png = tests\Images\Input\Png\iftbbn0g01.png
+ tests\Images\Input\Png\iftbbn0g02.png = tests\Images\Input\Png\iftbbn0g02.png
+ tests\Images\Input\Png\iftbbn0g04.png = tests\Images\Input\Png\iftbbn0g04.png
+ tests\Images\Input\Png\indexed.png = tests\Images\Input\Png\indexed.png
+ tests\Images\Input\Png\interlaced.png = tests\Images\Input\Png\interlaced.png
+ tests\Images\Input\Png\kaboom.png = tests\Images\Input\Png\kaboom.png
+ tests\Images\Input\Png\low-variance.png = tests\Images\Input\Png\low-variance.png
+ tests\Images\Input\Png\palette-8bpp.png = tests\Images\Input\Png\palette-8bpp.png
+ tests\Images\Input\Png\pd-dest.png = tests\Images\Input\Png\pd-dest.png
+ tests\Images\Input\Png\pd-source.png = tests\Images\Input\Png\pd-source.png
+ tests\Images\Input\Png\pd.png = tests\Images\Input\Png\pd.png
+ tests\Images\Input\Png\pl.png = tests\Images\Input\Png\pl.png
+ tests\Images\Input\Png\pp.png = tests\Images\Input\Png\pp.png
+ tests\Images\Input\Png\rainbow.png = tests\Images\Input\Png\rainbow.png
+ tests\Images\Input\Png\ratio-1x4.png = tests\Images\Input\Png\ratio-1x4.png
+ tests\Images\Input\Png\ratio-4x1.png = tests\Images\Input\Png\ratio-4x1.png
+ tests\Images\Input\Png\rgb-16-alpha.png = tests\Images\Input\Png\rgb-16-alpha.png
+ tests\Images\Input\Png\rgb-16-tRNS.png = tests\Images\Input\Png\rgb-16-tRNS.png
+ tests\Images\Input\Png\rgb-48bpp-interlaced.png = tests\Images\Input\Png\rgb-48bpp-interlaced.png
+ tests\Images\Input\Png\rgb-48bpp.png = tests\Images\Input\Png\rgb-48bpp.png
+ tests\Images\Input\Png\rgb-8-tRNS.png = tests\Images\Input\Png\rgb-8-tRNS.png
+ tests\Images\Input\Png\rollsroyce.png = tests\Images\Input\Png\rollsroyce.png
+ tests\Images\Input\Png\SnakeGame.png = tests\Images\Input\Png\SnakeGame.png
+ tests\Images\Input\Png\splash-interlaced.png = tests\Images\Input\Png\splash-interlaced.png
+ tests\Images\Input\Png\splash.png = tests\Images\Input\Png\splash.png
+ tests\Images\Input\Png\versioning-1_1.png = tests\Images\Input\Png\versioning-1_1.png
+ tests\Images\Input\Png\versioning-1_2.png = tests\Images\Input\Png\versioning-1_2.png
+ tests\Images\Input\Png\vim16x16_1.png = tests\Images\Input\Png\vim16x16_1.png
+ tests\Images\Input\Png\vim16x16_2.png = tests\Images\Input\Png\vim16x16_2.png
+ tests\Images\Input\Png\zlib-overflow.png = tests\Images\Input\Png\zlib-overflow.png
+ EndProjectSection
+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}"
@@ -122,9 +432,25 @@ Global
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
- {9E574A07-F879-4811-9C41-5CBDC6BAFDB7} = {815C0625-CD3D-440F-9F80-2D83856AB7AE}
+ {FBE8C1AD-5AEC-4514-9B64-091D8E145865} = {1799C43E-5C54-4A8F-8D64-B1475241DB0D}
+ {2B02E303-7CC6-4E15-97EE-DBE86B287553} = {E919DF0B-2607-4462-8FC0-5C98FE50F8C9}
{2AA31A1F-142C-43F4-8687-09ABCA4B3A26} = {815C0625-CD3D-440F-9F80-2D83856AB7AE}
{2E33181E-6E28-4662-A801-E2E7DC206029} = {815C0625-CD3D-440F-9F80-2D83856AB7AE}
+ {D4C5EC58-F8E6-4636-B9EE-C99D2578E5C6} = {56801022-D71A-4FBE-BC5B-CBA08E2284EC}
+ {FA55F5DE-11A6-487D-ABA4-BC93A02717DD} = {56801022-D71A-4FBE-BC5B-CBA08E2284EC}
+ {9DA226A1-8656-49A8-A58A-A8B5C081AD66} = {FA55F5DE-11A6-487D-ABA4-BC93A02717DD}
+ {1A82C5F6-90E0-4E97-BE16-A825C046B493} = {9DA226A1-8656-49A8-A58A-A8B5C081AD66}
+ {EE3FB0B3-1C31-41E9-93AB-BA800560A868} = {9DA226A1-8656-49A8-A58A-A8B5C081AD66}
+ {BF8DFDC1-CEE5-4A37-B216-D3085360C776} = {EE3FB0B3-1C31-41E9-93AB-BA800560A868}
+ {DB21FED7-E8CB-4B00-9EB2-9144D32A590A} = {9DA226A1-8656-49A8-A58A-A8B5C081AD66}
+ {195BA3D3-3E9F-4BC5-AB40-5F9FEB638146} = {DB21FED7-E8CB-4B00-9EB2-9144D32A590A}
+ {538F0EBD-4084-4EDB-93DD-6D35B733CA48} = {195BA3D3-3E9F-4BC5-AB40-5F9FEB638146}
+ {5C9B689F-B96D-47BE-A208-C23B1B2A8570} = {DB21FED7-E8CB-4B00-9EB2-9144D32A590A}
+ {516A3532-6AC2-417B-AD79-9BD5D0D378A0} = {5C9B689F-B96D-47BE-A208-C23B1B2A8570}
+ {714CDEA1-9AE6-4F76-B8B1-A7DB8C1DB82F} = {5C9B689F-B96D-47BE-A208-C23B1B2A8570}
+ {6458AFCB-A159-47D5-8F2B-50C95C0915E0} = {DB21FED7-E8CB-4B00-9EB2-9144D32A590A}
+ {39F5197B-CF6C-41A5-9739-7F97E78BB104} = {6458AFCB-A159-47D5-8F2B-50C95C0915E0}
+ {E1C42A6F-913B-4A7B-B1A8-2BB62843B254} = {9DA226A1-8656-49A8-A58A-A8B5C081AD66}
{EA3000E9-2A91-4EC4-8A68-E566DEBDC4F6} = {56801022-D71A-4FBE-BC5B-CBA08E2284EC}
{2BF743D8-2A06-412D-96D7-F448F00C5EA5} = {56801022-D71A-4FBE-BC5B-CBA08E2284EC}
{561B880A-D9EE-44EF-90F5-817C54A9D9AB} = {56801022-D71A-4FBE-BC5B-CBA08E2284EC}
diff --git a/ImageSharp.sln.DotSettings b/ImageSharp.sln.DotSettings
index 432f4524a..ece3dddb3 100644
--- a/ImageSharp.sln.DotSettings
+++ b/ImageSharp.sln.DotSettings
@@ -382,9 +382,12 @@
True
True
True
+ True
True
True
True
True
True
+ True
+ True
\ No newline at end of file
diff --git a/NuGet.config b/NuGet.config
deleted file mode 100644
index 322105d4d..000000000
--- a/NuGet.config
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/README.md b/README.md
index a72074f8f..a5c3457fa 100644
--- a/README.md
+++ b/README.md
@@ -22,7 +22,7 @@ Designed to democratize image processing, ImageSharp brings you an incredibly po
Compared to `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.3 ImageSharp can be used in device, cloud, and embedded/IoT scenarios.
+Built against .NET Standard 1.3, ImageSharp can be used in device, cloud, and embedded/IoT scenarios.
### Documentation
For all SixLabors projects, including ImageSharp:
@@ -41,15 +41,15 @@ Install stable releases via Nuget; development releases are available via MyGet.
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.
+ - 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
- **SixLabors.ImageSharp.Drawing**
- - Brushes and various drawing algorithms, including drawing images.
+ - Brushes and various drawing algorithms, including drawing images
- Various vector drawing methods for drawing paths, polygons etc.
- - Text drawing.
+ - Text drawing
### Build Status
@@ -72,6 +72,7 @@ On platforms supporting netstandard 1.3+
```csharp
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Processing;
+using SixLabors.ImageSharp.PixelFormats;
// Image.Load(string path) is a shortcut for our default type.
// Other pixel formats use Image.Load(string path))
@@ -117,12 +118,20 @@ Alternatively, you can work from command line and/or with a lightweight editor o
- [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 ImageSharp locally click the "Clone in Windows" button above or run the following git commands.
+To clone ImageSharp locally, click the "Clone in Windows" button above or run the following git commands:
```bash
git clone https://github.com/SixLabors/ImageSharp
```
+### Submodules
+
+This repository contains [git submodules](https://blog.github.com/2016-02-01-working-with-submodules/). To add the submodules to the project, navigate to the repository root and type:
+
+``` bash
+git submodule update --init --recursive
+```
+
### How can you help?
Please... Spread the word, contribute algorithms, submit performance improvements, unit tests, no input is too little. Make sure to read our [Contribution Guide](https://github.com/SixLabors/ImageSharp/blob/master/.github/CONTRIBUTING.md) before opening a PR.
diff --git a/src/Directory.Build.props b/src/Directory.Build.props
new file mode 100644
index 000000000..cd3d5e8cb
--- /dev/null
+++ b/src/Directory.Build.props
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+ $(MSBuildAllProjects);$(MSBuildThisFileDirectory)..\Directory.Build.props
+ src
+
+
+
+
+
+ $(MSBuildThisFileDirectory)..\standards\SixLabors.ruleset
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Directory.Build.targets b/src/Directory.Build.targets
new file mode 100644
index 000000000..c0e01ae58
--- /dev/null
+++ b/src/Directory.Build.targets
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+ $(MSBuildAllProjects);$(MSBuildThisFileDirectory)..\Directory.Build.targets
+
+
+
+
+
+ $(IntermediateOutputPath)$(MSBuildProjectName).InternalsVisibleTo$(DefaultLanguageSourceExtension)
+
+
+
+
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/ImageSharp.Drawing/ImageSharp.Drawing.csproj b/src/ImageSharp.Drawing/ImageSharp.Drawing.csproj
index a6f529ee3..a092e3604 100644
--- a/src/ImageSharp.Drawing/ImageSharp.Drawing.csproj
+++ b/src/ImageSharp.Drawing/ImageSharp.Drawing.csproj
@@ -1,50 +1,23 @@
-
-
- SixLabors.ImageSharp.Drawing
- SixLabors and contributors
- Six Labors
- Copyright (c) Six Labors and contributors.
- SixLabors.ImageSharp
- An extension to ImageSharp that allows the drawing of images, paths, and text.
- en
+
+
- $(packageversion)
- 0.0.1
- netstandard1.3;netstandard2.0
- 7.3
- true
- true
- SixLabors.ImageSharp.Drawing
- SixLabors.ImageSharp.Drawing
- Image Draw Shape Path Font
- https://raw.githubusercontent.com/SixLabors/Branding/master/icons/imagesharp/sixlabors.imagesharp.128.png
- https://github.com/SixLabors/ImageSharp
- http://www.apache.org/licenses/LICENSE-2.0
- git
- https://github.com/SixLabors/ImageSharp
- full
- portable
- True
-
-
-
-
-
-
-
-
-
-
-
-
- All
-
-
-
- ..\..\ImageSharp.ruleset
- SixLabors.ImageSharp
-
-
- true
-
-
\ No newline at end of file
+
+ SixLabors.ImageSharp.Drawing
+ SixLabors.ImageSharp.Drawing
+ An extension to ImageSharp that allows the drawing of images, paths, and text.
+ SixLabors.ImageSharp.Drawing
+ Image Draw Shape Path Font
+ SixLabors.ImageSharp
+ netcoreapp2.1;netstandard1.3;netstandard2.0
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/ImageSharp.Drawing/ImageSharp.Drawing.csproj.DotSettings b/src/ImageSharp.Drawing/ImageSharp.Drawing.csproj.DotSettings
new file mode 100644
index 000000000..a728b5497
--- /dev/null
+++ b/src/ImageSharp.Drawing/ImageSharp.Drawing.csproj.DotSettings
@@ -0,0 +1,2 @@
+
+ True
\ No newline at end of file
diff --git a/src/ImageSharp.Drawing/Processing/BrushApplicator.cs b/src/ImageSharp.Drawing/Processing/BrushApplicator.cs
index 0c6e0d3b4..7e75d7eff 100644
--- a/src/ImageSharp.Drawing/Processing/BrushApplicator.cs
+++ b/src/ImageSharp.Drawing/Processing/BrushApplicator.cs
@@ -44,7 +44,7 @@ namespace SixLabors.ImageSharp.Processing
///
/// Gets the blend percentage
///
- protected GraphicsOptions Options { get; private set; }
+ protected GraphicsOptions Options { get; }
///
/// Gets the color for a single pixel.
diff --git a/src/ImageSharp.Drawing/Processing/Brushes.cs b/src/ImageSharp.Drawing/Processing/Brushes.cs
index c5e7a3e9f..bd73e1f1b 100644
--- a/src/ImageSharp.Drawing/Processing/Brushes.cs
+++ b/src/ImageSharp.Drawing/Processing/Brushes.cs
@@ -8,7 +8,7 @@ namespace SixLabors.ImageSharp.Processing
///
/// A collection of methods for creating generic brushes.
///
- /// A New
+ /// A New
public static class Brushes
{
///
@@ -94,163 +94,131 @@ namespace SixLabors.ImageSharp.Processing
/// Create as brush that will paint a solid color
///
/// The color.
- /// The pixel format.
- /// A New
- public static SolidBrush Solid(TPixel color)
- where TPixel : struct, IPixel
- => new SolidBrush(color);
+ /// A New
+ public static SolidBrush Solid(Color color) => new SolidBrush(color);
///
/// Create as brush that will paint a Percent10 Hatch Pattern with the specified colors
///
/// Color of the foreground.
- /// The pixel format.
- /// A New
- public static PatternBrush Percent10(TPixel foreColor)
- where TPixel : struct, IPixel
- => new PatternBrush(foreColor, NamedColors.Transparent, Percent10Pattern);
+ /// A New
+ public static PatternBrush Percent10(Color foreColor) =>
+ new PatternBrush(foreColor, Color.Transparent, Percent10Pattern);
///
/// Create as brush that will paint a Percent10 Hatch Pattern with the specified colors
///
/// Color of the foreground.
/// Color of the background.
- /// The pixel format.
- /// A New
- public static PatternBrush Percent10(TPixel foreColor, TPixel backColor)
- where TPixel : struct, IPixel
- => new PatternBrush(foreColor, backColor, Percent10Pattern);
+ /// A New
+ public static PatternBrush Percent10(Color foreColor, Color backColor) =>
+ new PatternBrush(foreColor, backColor, Percent10Pattern);
///
/// Create as brush that will paint a Percent20 Hatch Pattern with the specified foreground color and a
/// transparent background.
///
/// Color of the foreground.
- /// The pixel format.
- /// A New
- public static PatternBrush Percent20(TPixel foreColor)
- where TPixel : struct, IPixel
- => new PatternBrush(foreColor, NamedColors.Transparent, Percent20Pattern);
+ /// A New
+ public static PatternBrush Percent20(Color foreColor) =>
+ new PatternBrush(foreColor, Color.Transparent, Percent20Pattern);
///
/// Create as brush that will paint a Percent20 Hatch Pattern with the specified colors
///
/// Color of the foreground.
/// Color of the background.
- /// The pixel format.
- /// A New
- public static PatternBrush Percent20(TPixel foreColor, TPixel backColor)
- where TPixel : struct, IPixel
- => new PatternBrush(foreColor, backColor, Percent20Pattern);
+ /// A New
+ public static PatternBrush Percent20(Color foreColor, Color backColor) =>
+ new PatternBrush(foreColor, backColor, Percent20Pattern);
///
/// Create as brush that will paint a Horizontal Hatch Pattern with the specified foreground color and a
/// transparent background.
///
/// Color of the foreground.
- /// The pixel format.
- /// A New
- public static PatternBrush Horizontal(TPixel foreColor)
- where TPixel : struct, IPixel
- => new PatternBrush(foreColor, NamedColors.Transparent, HorizontalPattern);
+ /// A New
+ public static PatternBrush Horizontal(Color foreColor) =>
+ new PatternBrush(foreColor, Color.Transparent, HorizontalPattern);
///
/// Create as brush that will paint a Horizontal Hatch Pattern with the specified colors
///
/// Color of the foreground.
/// Color of the background.
- /// The pixel format.
- /// A New
- public static PatternBrush Horizontal(TPixel foreColor, TPixel backColor)
- where TPixel : struct, IPixel
- => new PatternBrush(foreColor, backColor, HorizontalPattern);
+ /// A New
+ public static PatternBrush Horizontal(Color foreColor, Color backColor) =>
+ new PatternBrush(foreColor, backColor, HorizontalPattern);
///
/// Create as brush that will paint a Min Hatch Pattern with the specified foreground color and a
/// transparent background.
///
/// Color of the foreground.
- /// The pixel format.
- /// A New
- public static PatternBrush Min(TPixel foreColor)
- where TPixel : struct, IPixel
- => new PatternBrush(foreColor, NamedColors.Transparent, MinPattern);
+ /// A New
+ public static PatternBrush Min(Color foreColor) => new PatternBrush(foreColor, Color.Transparent, MinPattern);
///
/// Create as brush that will paint a Min Hatch Pattern with the specified colors
///
/// Color of the foreground.
/// Color of the background.
- /// The pixel format.
- /// A New
- public static PatternBrush Min(TPixel foreColor, TPixel backColor)
- where TPixel : struct, IPixel
- => new PatternBrush(foreColor, backColor, MinPattern);
+ /// A New
+ public static PatternBrush Min(Color foreColor, Color backColor) =>
+ new PatternBrush(foreColor, backColor, MinPattern);
///
/// Create as brush that will paint a Vertical Hatch Pattern with the specified foreground color and a
/// transparent background.
///
/// Color of the foreground.
- /// The pixel format.
- /// A New
- public static PatternBrush Vertical(TPixel foreColor)
- where TPixel : struct, IPixel
- => new PatternBrush(foreColor, NamedColors.Transparent, VerticalPattern);
+ /// A New
+ public static PatternBrush Vertical(Color foreColor) =>
+ new PatternBrush(foreColor, Color.Transparent, VerticalPattern);
///
/// Create as brush that will paint a Vertical Hatch Pattern with the specified colors
///
/// Color of the foreground.
/// Color of the background.
- /// The pixel format.
- /// A New
- public static PatternBrush Vertical(TPixel foreColor, TPixel backColor)
- where TPixel : struct, IPixel
- => new PatternBrush(foreColor, backColor, VerticalPattern);
+ /// A New
+ public static PatternBrush Vertical(Color foreColor, Color backColor) =>
+ new PatternBrush(foreColor, backColor, VerticalPattern);
///
/// Create as brush that will paint a Forward Diagonal Hatch Pattern with the specified foreground color and a
/// transparent background.
///
/// Color of the foreground.
- /// The pixel format.
- /// A New
- public static PatternBrush ForwardDiagonal(TPixel foreColor)
- where TPixel : struct, IPixel
- => new PatternBrush(foreColor, NamedColors.Transparent, ForwardDiagonalPattern);
+ /// A New
+ public static PatternBrush ForwardDiagonal(Color foreColor) =>
+ new PatternBrush(foreColor, Color.Transparent, ForwardDiagonalPattern);
///
/// Create as brush that will paint a Forward Diagonal Hatch Pattern with the specified colors
///
/// Color of the foreground.
/// Color of the background.
- /// The pixel format.
- /// A New
- public static PatternBrush ForwardDiagonal(TPixel foreColor, TPixel backColor)
- where TPixel : struct, IPixel
- => new PatternBrush(foreColor, backColor, ForwardDiagonalPattern);
+ /// A New
+ public static PatternBrush ForwardDiagonal(Color foreColor, Color backColor) =>
+ new PatternBrush(foreColor, backColor, ForwardDiagonalPattern);
///
/// Create as brush that will paint a Backward Diagonal Hatch Pattern with the specified foreground color and a
/// transparent background.
///
/// Color of the foreground.
- /// The pixel format.
- /// A New
- public static PatternBrush BackwardDiagonal(TPixel foreColor)
- where TPixel : struct, IPixel
- => new PatternBrush(foreColor, NamedColors.Transparent, BackwardDiagonalPattern);
+ /// A New
+ public static PatternBrush BackwardDiagonal(Color foreColor) =>
+ new PatternBrush(foreColor, Color.Transparent, BackwardDiagonalPattern);
///
/// Create as brush that will paint a Backward Diagonal Hatch Pattern with the specified colors
///
/// Color of the foreground.
/// Color of the background.
- /// The pixel format.
- /// A New
- public static PatternBrush BackwardDiagonal(TPixel foreColor, TPixel backColor)
- where TPixel : struct, IPixel
- => new PatternBrush(foreColor, backColor, BackwardDiagonalPattern);
+ /// A New
+ public static PatternBrush BackwardDiagonal(Color foreColor, Color backColor) =>
+ new PatternBrush(foreColor, backColor, BackwardDiagonalPattern);
}
}
\ No newline at end of file
diff --git a/src/ImageSharp.Drawing/Processing/ColorStop{TPixel}.cs b/src/ImageSharp.Drawing/Processing/ColorStop.cs
similarity index 79%
rename from src/ImageSharp.Drawing/Processing/ColorStop{TPixel}.cs
rename to src/ImageSharp.Drawing/Processing/ColorStop.cs
index 7fd0ba7cd..aee559469 100644
--- a/src/ImageSharp.Drawing/Processing/ColorStop{TPixel}.cs
+++ b/src/ImageSharp.Drawing/Processing/ColorStop.cs
@@ -10,17 +10,15 @@ namespace SixLabors.ImageSharp.Processing
///
/// A struct that defines a single color stop.
///
- /// The pixel format.
[DebuggerDisplay("ColorStop({Ratio} -> {Color}")]
- public struct ColorStop
- where TPixel : struct, IPixel
+ public readonly struct ColorStop
{
///
- /// Initializes a new instance of the struct.
+ /// Initializes a new instance of the struct.
///
/// Where should it be? 0 is at the start, 1 at the end of the Gradient.
/// What color should be used at that point?
- public ColorStop(float ratio, TPixel color)
+ public ColorStop(float ratio, in Color color)
{
this.Ratio = ratio;
this.Color = color;
@@ -34,6 +32,6 @@ namespace SixLabors.ImageSharp.Processing
///
/// Gets the color to be used.
///
- public TPixel Color { get; }
+ public Color Color { get; }
}
}
\ No newline at end of file
diff --git a/src/ImageSharp.Drawing/Processing/DrawImageExtensions.cs b/src/ImageSharp.Drawing/Processing/DrawImageExtensions.cs
deleted file mode 100644
index a8ee4d90b..000000000
--- a/src/ImageSharp.Drawing/Processing/DrawImageExtensions.cs
+++ /dev/null
@@ -1,137 +0,0 @@
-// Copyright (c) Six Labors and contributors.
-// Licensed under the Apache License, Version 2.0.
-
-using SixLabors.ImageSharp.PixelFormats;
-using SixLabors.ImageSharp.Processing.Processors.Drawing;
-using SixLabors.Primitives;
-
-namespace SixLabors.ImageSharp.Processing
-{
- ///
- /// Adds extensions that allow the drawing of images to the type.
- ///
- public static class DrawImageExtensions
- {
- ///
- /// Draws the given image together with the current one by blending their pixels.
- ///
- /// The pixel format of the destination image.
- /// The pixel format of the source image.
- /// The image this method extends.
- /// The image to blend with the currently processing image.
- /// The opacity of the image to blend. Must be between 0 and 1.
- /// The .
- public static IImageProcessingContext DrawImage(this IImageProcessingContext source, Image image, float opacity)
- where TPixelDst : struct, IPixel
- where TPixelSrc : struct, IPixel
- => source.ApplyProcessor(new DrawImageProcessor(image, Point.Empty, GraphicsOptions.Default.ColorBlendingMode, GraphicsOptions.Default.AlphaCompositionMode, opacity));
-
- ///
- /// Draws the given image together with the current one by blending their pixels.
- ///
- /// The pixel format of the destination image.
- /// The pixel format of the source image.
- /// The image this method extends.
- /// The image to blend with the currently processing image.
- /// The blending mode.
- /// The opacity of the image to blend. Must be between 0 and 1.
- /// The .
- public static IImageProcessingContext DrawImage(this IImageProcessingContext source, Image image, PixelColorBlendingMode colorBlending, float opacity)
- where TPixelDst : struct, IPixel
- where TPixelSrc : struct, IPixel
- => source.ApplyProcessor(new DrawImageProcessor(image, Point.Empty, colorBlending, GraphicsOptions.Default.AlphaCompositionMode, opacity));
-
- ///
- /// Draws the given image together with the current one by blending their pixels.
- ///
- /// The pixel format of the destination image.
- /// The pixel format of the source image.
- /// The image this method extends.
- /// The image to blend with the currently processing image.
- /// The color blending mode.
- /// The alpha composition mode.
- /// The opacity of the image to blend. Must be between 0 and 1.
- /// The .
- public static IImageProcessingContext DrawImage(this IImageProcessingContext source, Image image, PixelColorBlendingMode colorBlending, PixelAlphaCompositionMode alphaComposition, float opacity)
- where TPixelDst : struct, IPixel
- where TPixelSrc : struct, IPixel
- => source.ApplyProcessor(new DrawImageProcessor(image, Point.Empty, colorBlending, alphaComposition, opacity));
-
- ///
- /// Draws the given image together with the current one by blending their pixels.
- ///
- /// The pixel format of the destination image.
- /// The pixel format of the source image.
- /// The image this method extends.
- /// The image to blend with the currently processing image.
- /// The options, including the blending type and blending amount.
- /// The .
- public static IImageProcessingContext DrawImage(this IImageProcessingContext source, Image image, GraphicsOptions options)
- where TPixelDst : struct, IPixel
- where TPixelSrc : struct, IPixel
- => source.ApplyProcessor(new DrawImageProcessor(image, Point.Empty, options.ColorBlendingMode, options.AlphaCompositionMode, options.BlendPercentage));
-
- ///
- /// Draws the given image together with the current one by blending their pixels.
- ///
- /// The pixel format of the destination image.
- /// The pixel format of the source image.
- /// The image this method extends.
- /// The image to blend with the currently processing image.
- /// The location to draw the blended image.
- /// The opacity of the image to blend. Must be between 0 and 1.
- /// The .
- public static IImageProcessingContext DrawImage(this IImageProcessingContext source, Image image, Point location, float opacity)
- where TPixelDst : struct, IPixel
- where TPixelSrc : struct, IPixel
- => source.ApplyProcessor(new DrawImageProcessor(image, location, GraphicsOptions.Default.ColorBlendingMode, GraphicsOptions.Default.AlphaCompositionMode, opacity));
-
- ///
- /// Draws the given image together with the current one by blending their pixels.
- ///
- /// The pixel format of the destination image.
- /// The pixel format of the source image.
- /// The image this method extends.
- /// The image to blend with the currently processing image.
- /// The location to draw the blended image.
- /// The color blending to apply.
- /// The opacity of the image to blend. Must be between 0 and 1.
- /// The .
- public static IImageProcessingContext DrawImage(this IImageProcessingContext source, Image image, Point location, PixelColorBlendingMode colorBlending, float opacity)
- where TPixelDst : struct, IPixel
- where TPixelSrc : struct, IPixel
- => source.ApplyProcessor(new DrawImageProcessor(image, location, colorBlending, GraphicsOptions.Default.AlphaCompositionMode, opacity));
-
- ///
- /// Draws the given image together with the current one by blending their pixels.
- ///
- /// The pixel format of the destination image.
- /// The pixel format of the source image.
- /// The image this method extends.
- /// The image to blend with the currently processing image.
- /// The location to draw the blended image.
- /// The color blending to apply.
- /// The alpha composition mode.
- /// The opacity of the image to blend. Must be between 0 and 1.
- /// The .
- public static IImageProcessingContext DrawImage(this IImageProcessingContext source, Image image, Point location, PixelColorBlendingMode colorBlending, PixelAlphaCompositionMode alphaComposition, float opacity)
- where TPixelDst : struct, IPixel
- where TPixelSrc : struct, IPixel
- => source.ApplyProcessor(new DrawImageProcessor(image, location, colorBlending, alphaComposition, opacity));
-
- ///
- /// Draws the given image together with the current one by blending their pixels.
- ///
- /// The pixel format of the destination image.
- /// The pixel format of the source image.
- /// The image this method extends.
- /// The image to blend with the currently processing image.
- /// The location to draw the blended image.
- /// The options containing the blend mode and opacity.
- /// The .
- public static IImageProcessingContext DrawImage(this IImageProcessingContext source, Image image, Point location, GraphicsOptions options)
- where TPixelDst : struct, IPixel
- where TPixelSrc : struct, IPixel
- => source.ApplyProcessor(new DrawImageProcessor(image, location, options.ColorBlendingMode, options.AlphaCompositionMode, options.BlendPercentage));
- }
-}
\ No newline at end of file
diff --git a/src/ImageSharp.Drawing/Processing/DrawingHelpers.cs b/src/ImageSharp.Drawing/Processing/DrawingHelpers.cs
new file mode 100644
index 000000000..b4ce0c5cb
--- /dev/null
+++ b/src/ImageSharp.Drawing/Processing/DrawingHelpers.cs
@@ -0,0 +1,22 @@
+// Copyright (c) Six Labors and contributors.
+// Licensed under the Apache License, Version 2.0.
+
+using SixLabors.ImageSharp.PixelFormats;
+using SixLabors.ImageSharp.Primitives;
+
+namespace SixLabors.ImageSharp.Processing
+{
+ internal static class DrawingHelpers
+ {
+ ///
+ /// Convert a to a of the given pixel type.
+ ///
+ public static DenseMatrix ToPixelMatrix(this DenseMatrix colorMatrix, Configuration configuration)
+ where TPixel : struct, IPixel
+ {
+ DenseMatrix result = new DenseMatrix(colorMatrix.Columns, colorMatrix.Rows);
+ Color.ToPixel(configuration, colorMatrix.Span, result.Span);
+ return result;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/ImageSharp.Drawing/Processing/EllipticGradientBrush{TPixel}.cs b/src/ImageSharp.Drawing/Processing/EllipticGradientBrush.cs
similarity index 82%
rename from src/ImageSharp.Drawing/Processing/EllipticGradientBrush{TPixel}.cs
rename to src/ImageSharp.Drawing/Processing/EllipticGradientBrush.cs
index 8af01564c..91da332a1 100644
--- a/src/ImageSharp.Drawing/Processing/EllipticGradientBrush{TPixel}.cs
+++ b/src/ImageSharp.Drawing/Processing/EllipticGradientBrush.cs
@@ -14,17 +14,15 @@ namespace SixLabors.ImageSharp.Processing
/// a point on the longest extension of the ellipse and
/// the ratio between longest and shortest extension.
///
- /// The Pixel format that is used.
- public sealed class EllipticGradientBrush : GradientBrushBase
- where TPixel : struct, IPixel
+ public sealed class EllipticGradientBrush : GradientBrush
{
- private readonly Point center;
+ private readonly PointF center;
- private readonly Point referenceAxisEnd;
+ private readonly PointF referenceAxisEnd;
private readonly float axisRatio;
- ///
+ ///
/// The center of the elliptical gradient and 0 for the color stops.
/// The end point of the reference axis of the ellipse.
///
@@ -35,11 +33,11 @@ namespace SixLabors.ImageSharp.Processing
/// Defines how the colors of the gradients are repeated.
/// the color stops as defined in base class.
public EllipticGradientBrush(
- Point center,
- Point referenceAxisEnd,
+ PointF center,
+ PointF referenceAxisEnd,
float axisRatio,
GradientRepetitionMode repetitionMode,
- params ColorStop[] colorStops)
+ params ColorStop[] colorStops)
: base(repetitionMode, colorStops)
{
this.center = center;
@@ -47,12 +45,12 @@ namespace SixLabors.ImageSharp.Processing
this.axisRatio = axisRatio;
}
- ///
- public override BrushApplicator CreateApplicator(
+ ///
+ public override BrushApplicator CreateApplicator(
ImageFrame source,
RectangleF region,
GraphicsOptions options) =>
- new RadialGradientBrushApplicator(
+ new RadialGradientBrushApplicator(
source,
options,
this.center,
@@ -62,11 +60,12 @@ namespace SixLabors.ImageSharp.Processing
this.RepetitionMode);
///
- private sealed class RadialGradientBrushApplicator : GradientBrushApplicatorBase
+ private sealed class RadialGradientBrushApplicator : GradientBrushApplicator
+ where TPixel : struct, IPixel
{
- private readonly Point center;
+ private readonly PointF center;
- private readonly Point referenceAxisEnd;
+ private readonly PointF referenceAxisEnd;
private readonly float axisRatio;
@@ -85,7 +84,7 @@ namespace SixLabors.ImageSharp.Processing
private readonly float referenceRadiusSquared;
///
- /// Initializes a new instance of the class.
+ /// Initializes a new instance of the class.
///
/// The target image
/// The options
@@ -99,10 +98,10 @@ namespace SixLabors.ImageSharp.Processing
public RadialGradientBrushApplicator(
ImageFrame target,
GraphicsOptions options,
- Point center,
- Point referenceAxisEnd,
+ PointF center,
+ PointF referenceAxisEnd,
float axisRatio,
- ColorStop[] colorStops,
+ ColorStop[] colorStops,
GradientRepetitionMode repetitionMode)
: base(target, options, colorStops, repetitionMode)
{
@@ -129,7 +128,7 @@ namespace SixLabors.ImageSharp.Processing
}
///
- protected override float PositionOnGradient(int xt, int yt)
+ protected override float PositionOnGradient(float xt, float yt)
{
float x0 = xt - this.center.X;
float y0 = yt - this.center.Y;
@@ -150,8 +149,7 @@ namespace SixLabors.ImageSharp.Processing
{
var vA = a - junction;
var vB = b - junction;
- return (float)(Math.Atan2(vB.Y, vB.X)
- - Math.Atan2(vA.Y, vA.X));
+ return MathF.Atan2(vB.Y, vB.X) - MathF.Atan2(vA.Y, vA.X);
}
private float DistanceBetween(
@@ -163,7 +161,7 @@ namespace SixLabors.ImageSharp.Processing
float dY = p1.Y - p2.Y;
float dYsquared = dY * dY;
- return (float)Math.Sqrt(dXsquared + dYsquared);
+ return MathF.Sqrt(dXsquared + dYsquared);
}
}
}
diff --git a/src/ImageSharp.Drawing/Processing/DrawBezierExtensions.cs b/src/ImageSharp.Drawing/Processing/Extensions/DrawBezierExtensions.cs
similarity index 56%
rename from src/ImageSharp.Drawing/Processing/DrawBezierExtensions.cs
rename to src/ImageSharp.Drawing/Processing/Extensions/DrawBezierExtensions.cs
index 782f5d4d7..85addd5f2 100644
--- a/src/ImageSharp.Drawing/Processing/DrawBezierExtensions.cs
+++ b/src/ImageSharp.Drawing/Processing/Extensions/DrawBezierExtensions.cs
@@ -15,80 +15,93 @@ namespace SixLabors.ImageSharp.Processing
///
/// Draws the provided points as an open Bezier path at the provided thickness with the supplied brush
///
- /// The type of the color.
/// The image this method extends.
/// The options.
/// The brush.
/// The thickness.
/// The points.
/// The .
- public static IImageProcessingContext DrawBeziers(this IImageProcessingContext source, GraphicsOptions options, IBrush brush, float thickness, params PointF[] points)
- where TPixel : struct, IPixel
- => source.Draw(options, new Pen(brush, thickness), new Path(new CubicBezierLineSegment(points)));
+ public static IImageProcessingContext DrawBeziers(
+ this IImageProcessingContext source,
+ GraphicsOptions options,
+ IBrush brush,
+ float thickness,
+ params PointF[] points) =>
+ source.Draw(options, new Pen(brush, thickness), new Path(new CubicBezierLineSegment(points)));
///
/// Draws the provided points as an open Bezier path at the provided thickness with the supplied brush
///
- /// The type of the color.
/// The image this method extends.
/// The brush.
/// The thickness.
/// The points.
/// The .
- public static IImageProcessingContext DrawBeziers(this IImageProcessingContext source, IBrush brush, float thickness, params PointF[] points)
- where TPixel : struct, IPixel
- => source.Draw(new Pen(brush, thickness), new Path(new CubicBezierLineSegment(points)));
+ public static IImageProcessingContext DrawBeziers(
+ this IImageProcessingContext source,
+ IBrush brush,
+ float thickness,
+ params PointF[] points) =>
+ source.Draw(new Pen(brush, thickness), new Path(new CubicBezierLineSegment(points)));
///
/// Draws the provided points as an open Bezier path at the provided thickness with the supplied brush
///
- /// The type of the color.
/// The image this method extends.
/// The color.
/// The thickness.
/// The points.
/// The .
- public static IImageProcessingContext DrawBeziers(this IImageProcessingContext source, TPixel color, float thickness, params PointF[] points)
- where TPixel : struct, IPixel
- => source.DrawBeziers(new SolidBrush(color), thickness, points);
+ public static IImageProcessingContext DrawBeziers(
+ this IImageProcessingContext source,
+ Color color,
+ float thickness,
+ params PointF[] points) =>
+ source.DrawBeziers(new SolidBrush(color), thickness, points);
///
/// Draws the provided points as an open Bezier path at the provided thickness with the supplied brush
///
- /// The type of the color.
/// The image this method extends.
/// The options.
/// The color.
/// The thickness.
/// The points.
/// The .
- public static IImageProcessingContext DrawBeziers(this IImageProcessingContext source, GraphicsOptions options, TPixel color, float thickness, params PointF[] points)
- where TPixel : struct, IPixel
- => source.DrawBeziers(options, new SolidBrush(color), thickness, points);
+ public static IImageProcessingContext DrawBeziers(
+ this IImageProcessingContext source,
+ GraphicsOptions options,
+ Color color,
+ float thickness,
+ params PointF[] points) =>
+ source.DrawBeziers(options, new SolidBrush(color), thickness, points);
///
/// Draws the provided points as an open Bezier path with the supplied pen
///
- /// The type of the color.
/// The image this method extends.
/// The options.
/// The pen.
/// The points.
/// The .
- public static IImageProcessingContext DrawBeziers(this IImageProcessingContext source, GraphicsOptions options, IPen pen, params PointF[] points)
- where TPixel : struct, IPixel
- => source.Draw(options, pen, new Path(new CubicBezierLineSegment(points)));
+ public static IImageProcessingContext DrawBeziers(
+ this IImageProcessingContext source,
+ GraphicsOptions options,
+ IPen pen,
+ params PointF[] points) =>
+ source.Draw(options, pen, new Path(new CubicBezierLineSegment(points)));
///
/// Draws the provided points as an open Bezier path with the supplied pen
///
- /// The type of the color.
/// The image this method extends.
/// The pen.
/// The points.
/// The .
- public static IImageProcessingContext DrawBeziers(this IImageProcessingContext source, IPen pen, params PointF[] points)
- where TPixel : struct, IPixel
- => source.Draw(pen, new Path(new CubicBezierLineSegment(points)));
+ public static IImageProcessingContext DrawBeziers(
+ this IImageProcessingContext source,
+ IPen pen,
+ params PointF[] points) =>
+ source.Draw(pen, new Path(new CubicBezierLineSegment(points)));
}
}
diff --git a/src/ImageSharp.Drawing/Processing/Extensions/DrawImageExtensions.cs b/src/ImageSharp.Drawing/Processing/Extensions/DrawImageExtensions.cs
new file mode 100644
index 000000000..981cf1bef
--- /dev/null
+++ b/src/ImageSharp.Drawing/Processing/Extensions/DrawImageExtensions.cs
@@ -0,0 +1,175 @@
+// Copyright (c) Six Labors and contributors.
+// Licensed under the Apache License, Version 2.0.
+
+using SixLabors.ImageSharp.PixelFormats;
+using SixLabors.ImageSharp.Processing.Processors.Drawing;
+using SixLabors.Primitives;
+
+namespace SixLabors.ImageSharp.Processing
+{
+ ///
+ /// Adds extensions that allow the drawing of images to the type.
+ ///
+ public static class DrawImageExtensions
+ {
+ ///
+ /// Draws the given image together with the current one by blending their pixels.
+ ///
+ /// The image this method extends.
+ /// The image to blend with the currently processing image.
+ /// The opacity of the image to blend. Must be between 0 and 1.
+ /// The .
+ public static IImageProcessingContext DrawImage(
+ this IImageProcessingContext source,
+ Image image,
+ float opacity) =>
+ source.ApplyProcessor(
+ new DrawImageProcessor(
+ image,
+ Point.Empty,
+ GraphicsOptions.Default.ColorBlendingMode,
+ GraphicsOptions.Default.AlphaCompositionMode,
+ opacity));
+
+ ///
+ /// Draws the given image together with the current one by blending their pixels.
+ ///
+ /// The image this method extends.
+ /// The image to blend with the currently processing image.
+ /// The blending mode.
+ /// The opacity of the image to blend. Must be between 0 and 1.
+ /// The .
+ public static IImageProcessingContext DrawImage(
+ this IImageProcessingContext source,
+ Image image,
+ PixelColorBlendingMode colorBlending,
+ float opacity) =>
+ source.ApplyProcessor(
+ new DrawImageProcessor(
+ image,
+ Point.Empty,
+ colorBlending,
+ GraphicsOptions.Default.AlphaCompositionMode,
+ opacity));
+
+ ///
+ /// Draws the given image together with the current one by blending their pixels.
+ ///
+ /// The image this method extends.
+ /// The image to blend with the currently processing image.
+ /// The color blending mode.
+ /// The alpha composition mode.
+ /// The opacity of the image to blend. Must be between 0 and 1.
+ /// The .
+ public static IImageProcessingContext DrawImage(
+ this IImageProcessingContext source,
+ Image image,
+ PixelColorBlendingMode colorBlending,
+ PixelAlphaCompositionMode alphaComposition,
+ float opacity) =>
+ source.ApplyProcessor(new DrawImageProcessor(image, Point.Empty, colorBlending, alphaComposition, opacity));
+
+ ///
+ /// Draws the given image together with the current one by blending their pixels.
+ ///
+ /// The image this method extends.
+ /// The image to blend with the currently processing image.
+ /// The options, including the blending type and blending amount.
+ /// The .
+ public static IImageProcessingContext DrawImage(
+ this IImageProcessingContext source,
+ Image image,
+ GraphicsOptions options) =>
+ source.ApplyProcessor(
+ new DrawImageProcessor(
+ image,
+ Point.Empty,
+ options.ColorBlendingMode,
+ options.AlphaCompositionMode,
+ options.BlendPercentage));
+
+ ///
+ /// Draws the given image together with the current one by blending their pixels.
+ ///
+ /// The image this method extends.
+ /// The image to blend with the currently processing image.
+ /// The location to draw the blended image.
+ /// The opacity of the image to blend. Must be between 0 and 1.
+ /// The .
+ public static IImageProcessingContext DrawImage(
+ this IImageProcessingContext source,
+ Image image,
+ Point location,
+ float opacity) =>
+ source.ApplyProcessor(
+ new DrawImageProcessor(
+ image,
+ location,
+ GraphicsOptions.Default.ColorBlendingMode,
+ GraphicsOptions.Default.AlphaCompositionMode,
+ opacity));
+
+ ///
+ /// Draws the given image together with the current one by blending their pixels.
+ ///
+ /// The image this method extends.
+ /// The image to blend with the currently processing image.
+ /// The location to draw the blended image.
+ /// The color blending to apply.
+ /// The opacity of the image to blend. Must be between 0 and 1.
+ /// The .
+ public static IImageProcessingContext DrawImage(
+ this IImageProcessingContext source,
+ Image image,
+ Point location,
+ PixelColorBlendingMode colorBlending,
+ float opacity) =>
+ source.ApplyProcessor(
+ new DrawImageProcessor(
+ image,
+ location,
+ colorBlending,
+ GraphicsOptions.Default.AlphaCompositionMode,
+ opacity));
+
+ ///
+ /// Draws the given image together with the current one by blending their pixels.
+ ///
+ /// The image this method extends.
+ /// The image to blend with the currently processing image.
+ /// The location to draw the blended image.
+ /// The color blending to apply.
+ /// The alpha composition mode.
+ /// The opacity of the image to blend. Must be between 0 and 1.
+ /// The .
+ public static IImageProcessingContext DrawImage(
+ this IImageProcessingContext source,
+ Image image,
+ Point location,
+ PixelColorBlendingMode colorBlending,
+ PixelAlphaCompositionMode alphaComposition,
+ float opacity) =>
+ source.ApplyProcessor(new DrawImageProcessor(image, location, colorBlending, alphaComposition, opacity));
+
+ ///
+ /// Draws the given image together with the current one by blending their pixels.
+ ///
+ /// The image this method extends.
+ /// The image to blend with the currently processing image.
+ /// The location to draw the blended image.
+ /// The options containing the blend mode and opacity.
+ /// The .
+ public static IImageProcessingContext DrawImage(
+ this IImageProcessingContext source,
+ Image image,
+ Point location,
+ GraphicsOptions options) =>
+ source.ApplyProcessor(
+ new DrawImageProcessor(
+ image,
+ location,
+ options.ColorBlendingMode,
+ options.AlphaCompositionMode,
+ options.BlendPercentage));
+ }
+}
\ No newline at end of file
diff --git a/src/ImageSharp.Drawing/Processing/DrawLineExtensions.cs b/src/ImageSharp.Drawing/Processing/Extensions/DrawLineExtensions.cs
similarity index 56%
rename from src/ImageSharp.Drawing/Processing/DrawLineExtensions.cs
rename to src/ImageSharp.Drawing/Processing/Extensions/DrawLineExtensions.cs
index 9084b30ef..b7b419be6 100644
--- a/src/ImageSharp.Drawing/Processing/DrawLineExtensions.cs
+++ b/src/ImageSharp.Drawing/Processing/Extensions/DrawLineExtensions.cs
@@ -15,80 +15,93 @@ namespace SixLabors.ImageSharp.Processing
///
/// Draws the provided Points as an open Linear path at the provided thickness with the supplied brush
///
- /// The type of the color.
/// The image this method extends.
/// The options.
/// The brush.
/// The thickness.
/// The points.
/// The .
- public static IImageProcessingContext DrawLines(this IImageProcessingContext source, GraphicsOptions options, IBrush brush, float thickness, params PointF[] points)
- where TPixel : struct, IPixel
- => source.Draw(options, new Pen(brush, thickness), new Path(new LinearLineSegment(points)));
+ public static IImageProcessingContext DrawLines(
+ this IImageProcessingContext source,
+ GraphicsOptions options,
+ IBrush brush,
+ float thickness,
+ params PointF[] points) =>
+ source.Draw(options, new Pen(brush, thickness), new Path(new LinearLineSegment(points)));
///
/// Draws the provided Points as an open Linear path at the provided thickness with the supplied brush
///
- /// The type of the color.
/// The image this method extends.
/// The brush.
/// The thickness.
/// The points.
/// The .
- public static IImageProcessingContext DrawLines(this IImageProcessingContext source, IBrush brush, float thickness, params PointF[] points)
- where TPixel : struct, IPixel
- => source.Draw(new Pen(brush, thickness), new Path(new LinearLineSegment(points)));
+ public static IImageProcessingContext DrawLines(
+ this IImageProcessingContext source,
+ IBrush brush,
+ float thickness,
+ params PointF[] points) =>
+ source.Draw(new Pen(brush, thickness), new Path(new LinearLineSegment(points)));
///
/// Draws the provided Points as an open Linear path at the provided thickness with the supplied brush
///
- /// The type of the color.
/// The image this method extends.
/// The color.
/// The thickness.
/// The points.
/// The .
- public static IImageProcessingContext DrawLines(this IImageProcessingContext source, TPixel color, float thickness, params PointF[] points)
- where TPixel : struct, IPixel
- => source.DrawLines(new SolidBrush(color), thickness, points);
+ public static IImageProcessingContext DrawLines(
+ this IImageProcessingContext source,
+ Color color,
+ float thickness,
+ params PointF[] points) =>
+ source.DrawLines(new SolidBrush(color), thickness, points);
///
/// Draws the provided Points as an open Linear path at the provided thickness with the supplied brush
///
- /// The type of the color.
/// The image this method extends.
/// The options.
/// The color.
/// The thickness.
/// The points.
/// The .>
- public static IImageProcessingContext DrawLines(this IImageProcessingContext source, GraphicsOptions options, TPixel color, float thickness, params PointF[] points)
- where TPixel : struct, IPixel
- => source.DrawLines(options, new SolidBrush(color), thickness, points);
+ public static IImageProcessingContext DrawLines(
+ this IImageProcessingContext source,
+ GraphicsOptions options,
+ Color color,
+ float thickness,
+ params PointF[] points) =>
+ source.DrawLines(options, new SolidBrush(color), thickness, points);
///
/// Draws the provided Points as an open Linear path with the supplied pen
///
- /// The type of the color.
/// The image this method extends.
/// The options.
/// The pen.
/// The points.
/// The .
- public static IImageProcessingContext DrawLines(this IImageProcessingContext source, GraphicsOptions options, IPen pen, params PointF[] points)
- where TPixel : struct, IPixel
- => source.Draw(options, pen, new Path(new LinearLineSegment(points)));
+ public static IImageProcessingContext DrawLines(
+ this IImageProcessingContext source,
+ GraphicsOptions options,
+ IPen pen,
+ params PointF[] points) =>
+ source.Draw(options, pen, new Path(new LinearLineSegment(points)));
///
/// Draws the provided Points as an open Linear path with the supplied pen
///
- /// The type of the color.
/// The image this method extends.
/// The pen.
/// The points.
/// The .
- public static IImageProcessingContext DrawLines(this IImageProcessingContext source, IPen pen, params PointF[] points)
- where TPixel : struct, IPixel
- => source.Draw(pen, new Path(new LinearLineSegment(points)));
+ public static IImageProcessingContext DrawLines(
+ this IImageProcessingContext source,
+ IPen pen,
+ params PointF[] points) =>
+ source.Draw(pen, new Path(new LinearLineSegment(points)));
}
}
\ No newline at end of file
diff --git a/src/ImageSharp.Drawing/Processing/DrawPathCollectionExtensions.cs b/src/ImageSharp.Drawing/Processing/Extensions/DrawPathCollectionExtensions.cs
similarity index 59%
rename from src/ImageSharp.Drawing/Processing/DrawPathCollectionExtensions.cs
rename to src/ImageSharp.Drawing/Processing/Extensions/DrawPathCollectionExtensions.cs
index 0d3abf297..79b4fd0a8 100644
--- a/src/ImageSharp.Drawing/Processing/DrawPathCollectionExtensions.cs
+++ b/src/ImageSharp.Drawing/Processing/Extensions/DrawPathCollectionExtensions.cs
@@ -14,14 +14,16 @@ namespace SixLabors.ImageSharp.Processing
///
/// Draws the outline of the polygon with the provided pen.
///
- /// The type of the color.
/// The image this method extends.
/// The options.
/// The pen.
/// The paths.
/// The .
- public static IImageProcessingContext Draw(this IImageProcessingContext source, GraphicsOptions options, IPen pen, IPathCollection paths)
- where TPixel : struct, IPixel
+ public static IImageProcessingContext Draw(
+ this IImageProcessingContext source,
+ GraphicsOptions options,
+ IPen pen,
+ IPathCollection paths)
{
foreach (IPath path in paths)
{
@@ -34,67 +36,76 @@ namespace SixLabors.ImageSharp.Processing
///
/// Draws the outline of the polygon with the provided pen.
///
- /// The type of the color.
/// The image this method extends.
/// The pen.
/// The paths.
/// The .
- public static IImageProcessingContext Draw(this IImageProcessingContext source, IPen pen, IPathCollection paths)
- where TPixel : struct, IPixel
- => source.Draw(GraphicsOptions.Default, pen, paths);
+ public static IImageProcessingContext
+ Draw(this IImageProcessingContext source, IPen pen, IPathCollection paths) =>
+ source.Draw(GraphicsOptions.Default, pen, paths);
///
/// Draws the outline of the polygon with the provided brush at the provided thickness.
///
- /// The type of the color.
/// The image this method extends.
/// The options.
/// The brush.
/// The thickness.
/// The shapes.
/// The .
- public static IImageProcessingContext Draw(this IImageProcessingContext source, GraphicsOptions options, IBrush brush, float thickness, IPathCollection paths)
- where TPixel : struct, IPixel
- => source.Draw(options, new Pen(brush, thickness), paths);
+ public static IImageProcessingContext Draw(
+ this IImageProcessingContext source,
+ GraphicsOptions options,
+ IBrush brush,
+ float thickness,
+ IPathCollection paths) =>
+ source.Draw(options, new Pen(brush, thickness), paths);
///
/// Draws the outline of the polygon with the provided brush at the provided thickness.
///
- /// The type of the color.
/// The image this method extends.
/// The brush.
/// The thickness.
/// The paths.
/// The .
- public static IImageProcessingContext Draw(this IImageProcessingContext source, IBrush brush, float thickness, IPathCollection paths)
- where TPixel : struct, IPixel
- => source.Draw(new Pen(brush, thickness), paths);
+ public static IImageProcessingContext Draw(
+ this IImageProcessingContext source,
+ IBrush brush,
+ float thickness,
+ IPathCollection paths) =>
+ source.Draw(new Pen(brush, thickness), paths);
///
/// Draws the outline of the polygon with the provided brush at the provided thickness.
///
- /// The type of the color.
/// The image this method extends.
/// The options.
/// The color.
/// The thickness.
/// The paths.
/// The .
- public static IImageProcessingContext Draw(this IImageProcessingContext source, GraphicsOptions options, TPixel color, float thickness, IPathCollection paths)
- where TPixel : struct, IPixel
- => source.Draw(options, new SolidBrush(color), thickness, paths);
+ public static IImageProcessingContext Draw(
+ this IImageProcessingContext source,
+ GraphicsOptions options,
+ Color color,
+ float thickness,
+ IPathCollection paths) =>
+ source.Draw(options, new SolidBrush(color), thickness, paths);
///
/// Draws the outline of the polygon with the provided brush at the provided thickness.
///
- /// The type of the color.
/// The image this method extends.
/// The color.
/// The thickness.
/// The paths.
/// The .
- public static IImageProcessingContext Draw(this IImageProcessingContext source, TPixel color, float thickness, IPathCollection paths)
- where TPixel : struct, IPixel
- => source.Draw(new SolidBrush(color), thickness, paths);
+ public static IImageProcessingContext Draw(
+ this IImageProcessingContext source,
+ Color color,
+ float thickness,
+ IPathCollection paths) =>
+ source.Draw(new SolidBrush(color), thickness, paths);
}
}
\ No newline at end of file
diff --git a/src/ImageSharp.Drawing/Processing/DrawPathExtensions.cs b/src/ImageSharp.Drawing/Processing/Extensions/DrawPathExtensions.cs
similarity index 58%
rename from src/ImageSharp.Drawing/Processing/DrawPathExtensions.cs
rename to src/ImageSharp.Drawing/Processing/Extensions/DrawPathExtensions.cs
index 4dbe942f2..efafdde5a 100644
--- a/src/ImageSharp.Drawing/Processing/DrawPathExtensions.cs
+++ b/src/ImageSharp.Drawing/Processing/Extensions/DrawPathExtensions.cs
@@ -15,80 +15,90 @@ namespace SixLabors.ImageSharp.Processing
///
/// Draws the outline of the polygon with the provided pen.
///
- /// The type of the color.
/// The image this method extends.
/// The options.
/// The pen.
/// The path.
/// The .
- public static IImageProcessingContext Draw(this IImageProcessingContext source, GraphicsOptions options, IPen pen, IPath path)
- where TPixel : struct, IPixel
- => source.Fill(options, pen.StrokeFill, new ShapePath(path, pen));
+ public static IImageProcessingContext Draw(
+ this IImageProcessingContext source,
+ GraphicsOptions options,
+ IPen pen,
+ IPath path) =>
+ source.Fill(options, pen.StrokeFill, new ShapePath(path, pen));
///
/// Draws the outline of the polygon with the provided pen.
///
- /// The type of the color.
/// The image this method extends.
/// The pen.
/// The path.
/// The .
- public static IImageProcessingContext Draw(this IImageProcessingContext source, IPen pen, IPath path)
- where TPixel : struct, IPixel
- => source.Draw(GraphicsOptions.Default, pen, path);
+ public static IImageProcessingContext Draw(this IImageProcessingContext source, IPen pen, IPath path) =>
+ source.Draw(GraphicsOptions.Default, pen, path);
///
/// Draws the outline of the polygon with the provided brush at the provided thickness.
///
- /// The type of the color.
/// The image this method extends.
/// The options.
/// The brush.
/// The thickness.
/// The shape.
/// The .
- public static IImageProcessingContext Draw(this IImageProcessingContext source, GraphicsOptions options, IBrush brush, float thickness, IPath path)
- where TPixel : struct, IPixel
- => source.Draw(options, new Pen(brush, thickness), path);
+ public static IImageProcessingContext Draw(
+ this IImageProcessingContext source,
+ GraphicsOptions options,
+ IBrush brush,
+ float thickness,
+ IPath path) =>
+ source.Draw(options, new Pen(brush, thickness), path);
///
/// Draws the outline of the polygon with the provided brush at the provided thickness.
///
- /// The type of the color.
/// The image this method extends.
/// The brush.
/// The thickness.
/// The path.
/// The .
- public static IImageProcessingContext Draw(this IImageProcessingContext source, IBrush brush, float thickness, IPath path)
- where TPixel : struct, IPixel
- => source.Draw(new Pen(brush, thickness), path);
+ public static IImageProcessingContext Draw(
+ this IImageProcessingContext source,
+ IBrush brush,
+ float thickness,
+ IPath path) =>
+ source.Draw(new Pen(brush, thickness), path);
///
/// Draws the outline of the polygon with the provided brush at the provided thickness.
///
- /// The type of the color.
/// The image this method extends.
/// The options.
/// The color.
/// The thickness.
/// The path.
/// The .
- public static IImageProcessingContext Draw(this IImageProcessingContext source, GraphicsOptions options, TPixel color, float thickness, IPath path)
- where TPixel : struct, IPixel
- => source.Draw(options, new SolidBrush(color), thickness, path);
+ public static IImageProcessingContext Draw(
+ this IImageProcessingContext source,
+ GraphicsOptions options,
+ Color color,
+ float thickness,
+ IPath path) =>
+ source.Draw(options, new SolidBrush(color), thickness, path);
///
/// Draws the outline of the polygon with the provided brush at the provided thickness.
///
- /// The type of the color.
/// The image this method extends.
/// The color.
/// The thickness.
/// The path.
/// The .
- public static IImageProcessingContext Draw(this IImageProcessingContext source, TPixel color, float thickness, IPath path)
- where TPixel : struct, IPixel
- => source.Draw(new SolidBrush(color), thickness, path);
+ public static IImageProcessingContext Draw(
+ this IImageProcessingContext source,
+ Color color,
+ float thickness,
+ IPath path) =>
+ source.Draw(new SolidBrush(color), thickness, path);
}
}
\ No newline at end of file
diff --git a/src/ImageSharp.Drawing/Processing/DrawPolygonExtensions.cs b/src/ImageSharp.Drawing/Processing/Extensions/DrawPolygonExtensions.cs
similarity index 56%
rename from src/ImageSharp.Drawing/Processing/DrawPolygonExtensions.cs
rename to src/ImageSharp.Drawing/Processing/Extensions/DrawPolygonExtensions.cs
index 4dcfe00aa..324e05e87 100644
--- a/src/ImageSharp.Drawing/Processing/DrawPolygonExtensions.cs
+++ b/src/ImageSharp.Drawing/Processing/Extensions/DrawPolygonExtensions.cs
@@ -15,80 +15,93 @@ namespace SixLabors.ImageSharp.Processing
///
/// Draws the provided Points as a closed Linear Polygon with the provided brush at the provided thickness.
///
- /// The type of the color.
/// The image this method extends.
/// The options.
/// The brush.
/// The thickness.
/// The points.
/// The .
- public static IImageProcessingContext DrawPolygon(this IImageProcessingContext source, GraphicsOptions options, IBrush brush, float thickness, params PointF[] points)
- where TPixel : struct, IPixel
- => source.Draw(options, new Pen(brush, thickness), new Polygon(new LinearLineSegment(points)));
+ public static IImageProcessingContext DrawPolygon(
+ this IImageProcessingContext source,
+ GraphicsOptions options,
+ IBrush brush,
+ float thickness,
+ params PointF[] points) =>
+ source.Draw(options, new Pen(brush, thickness), new Polygon(new LinearLineSegment(points)));
///
/// Draws the provided Points as a closed Linear Polygon with the provided brush at the provided thickness.
///
- /// The type of the color.
/// The image this method extends.
/// The brush.
/// The thickness.
/// The points.
/// The .
- public static IImageProcessingContext DrawPolygon(this IImageProcessingContext source, IBrush brush, float thickness, params PointF[] points)
- where TPixel : struct, IPixel
- => source.Draw(new Pen(brush, thickness), new Polygon(new LinearLineSegment(points)));
+ public static IImageProcessingContext DrawPolygon(
+ this IImageProcessingContext source,
+ IBrush brush,
+ float thickness,
+ params PointF[] points) =>
+ source.Draw(new Pen(brush, thickness), new Polygon(new LinearLineSegment(points)));
///
/// Draws the provided Points as a closed Linear Polygon with the provided brush at the provided thickness.
///
- /// The type of the color.
/// The image this method extends.
/// The color.
/// The thickness.
/// The points.
/// The .
- public static IImageProcessingContext DrawPolygon(this IImageProcessingContext source, TPixel color, float thickness, params PointF[] points)
- where TPixel : struct, IPixel
- => source.DrawPolygon(new SolidBrush(color), thickness, points);
+ public static IImageProcessingContext DrawPolygon(
+ this IImageProcessingContext source,
+ Color color,
+ float thickness,
+ params PointF[] points) =>
+ source.DrawPolygon(new SolidBrush(color), thickness, points);
///
/// Draws the provided Points as a closed Linear Polygon with the provided brush at the provided thickness.
///
- /// The type of the color.
/// The image this method extends.
/// The options.
/// The color.
/// The thickness.
/// The points.
/// The .
- public static IImageProcessingContext DrawPolygon(this IImageProcessingContext source, GraphicsOptions options, TPixel color, float thickness, params PointF[] points)
- where TPixel : struct, IPixel
- => source.DrawPolygon(options, new SolidBrush(color), thickness, points);
+ public static IImageProcessingContext DrawPolygon(
+ this IImageProcessingContext source,
+ GraphicsOptions options,
+ Color color,
+ float thickness,
+ params PointF[] points) =>
+ source.DrawPolygon(options, new SolidBrush(color), thickness, points);
///
/// Draws the provided Points as a closed Linear Polygon with the provided Pen.
///
- /// The type of the color.
/// The image this method extends.
/// The pen.
/// The points.
/// The .
- public static IImageProcessingContext DrawPolygon(this IImageProcessingContext source, IPen pen, params PointF[] points)
- where TPixel : struct, IPixel
- => source.Draw(GraphicsOptions.Default, pen, new Polygon(new LinearLineSegment(points)));
+ public static IImageProcessingContext DrawPolygon(
+ this IImageProcessingContext source,
+ IPen pen,
+ params PointF[] points) =>
+ source.Draw(GraphicsOptions.Default, pen, new Polygon(new LinearLineSegment(points)));
///
/// Draws the provided Points as a closed Linear Polygon with the provided Pen.
///
- /// The type of the color.
/// The image this method extends.
/// The options.
/// The pen.
/// The points.
/// The .
- public static IImageProcessingContext DrawPolygon(this IImageProcessingContext source, GraphicsOptions options, IPen pen, params PointF[] points)
- where TPixel : struct, IPixel
- => source.Draw(options, pen, new Polygon(new LinearLineSegment(points)));
+ public static IImageProcessingContext DrawPolygon(
+ this IImageProcessingContext source,
+ GraphicsOptions options,
+ IPen pen,
+ params PointF[] points) =>
+ source.Draw(options, pen, new Polygon(new LinearLineSegment(points)));
}
}
\ No newline at end of file
diff --git a/src/ImageSharp.Drawing/Processing/DrawRectangleExtensions.cs b/src/ImageSharp.Drawing/Processing/Extensions/DrawRectangleExtensions.cs
similarity index 57%
rename from src/ImageSharp.Drawing/Processing/DrawRectangleExtensions.cs
rename to src/ImageSharp.Drawing/Processing/Extensions/DrawRectangleExtensions.cs
index 918fb1e73..d0a6c8ccd 100644
--- a/src/ImageSharp.Drawing/Processing/DrawRectangleExtensions.cs
+++ b/src/ImageSharp.Drawing/Processing/Extensions/DrawRectangleExtensions.cs
@@ -15,80 +15,90 @@ namespace SixLabors.ImageSharp.Processing
///
/// Draws the outline of the rectangle with the provided pen.
///
- /// The type of the color.
/// The image this method extends.
/// The options.
/// The pen.
/// The shape.
/// The .
- public static IImageProcessingContext Draw(this IImageProcessingContext source, GraphicsOptions options, IPen pen, RectangleF shape)
- where TPixel : struct, IPixel
- => source.Draw(options, pen, new RectangularPolygon(shape.X, shape.Y, shape.Width, shape.Height));
+ public static IImageProcessingContext Draw(
+ this IImageProcessingContext source,
+ GraphicsOptions options,
+ IPen pen,
+ RectangleF shape) =>
+ source.Draw(options, pen, new RectangularPolygon(shape.X, shape.Y, shape.Width, shape.Height));
///
/// Draws the outline of the rectangle with the provided pen.
///
- /// The type of the color.
/// The image this method extends.
/// The pen.
/// The shape.
/// The .
- public static IImageProcessingContext Draw(this IImageProcessingContext source, IPen pen, RectangleF shape)
- where TPixel : struct, IPixel
- => source.Draw(GraphicsOptions.Default, pen, shape);
+ public static IImageProcessingContext Draw(this IImageProcessingContext source, IPen pen, RectangleF shape) =>
+ source.Draw(GraphicsOptions.Default, pen, shape);
///
/// Draws the outline of the rectangle with the provided brush at the provided thickness.
///
- /// The type of the color.
/// The image this method extends.
/// The options.
/// The brush.
/// The thickness.
/// The shape.
/// The .
- public static IImageProcessingContext Draw(this IImageProcessingContext source, GraphicsOptions options, IBrush brush, float thickness, RectangleF shape)
- where TPixel : struct, IPixel
- => source.Draw(options, new Pen(brush, thickness), shape);
+ public static IImageProcessingContext Draw(
+ this IImageProcessingContext source,
+ GraphicsOptions options,
+ IBrush brush,
+ float thickness,
+ RectangleF shape) =>
+ source.Draw(options, new Pen(brush, thickness), shape);
///
/// Draws the outline of the rectangle with the provided brush at the provided thickness.
///
- /// The type of the color.
/// The image this method extends.
/// The brush.
/// The thickness.
/// The shape.
/// The .
- public static IImageProcessingContext Draw(this IImageProcessingContext source, IBrush brush, float thickness, RectangleF shape)
- where TPixel : struct, IPixel
- => source.Draw(new Pen(brush, thickness), shape);
+ public static IImageProcessingContext Draw(
+ this IImageProcessingContext source,
+ IBrush brush,
+ float thickness,
+ RectangleF shape) =>
+ source.Draw(new Pen(brush, thickness), shape);
///
/// Draws the outline of the rectangle with the provided brush at the provided thickness.
///
- /// The type of the color.
/// The image this method extends.
/// The options.
/// The color.
/// The thickness.
/// The shape.
/// The .
- public static IImageProcessingContext Draw(this IImageProcessingContext source, GraphicsOptions options, TPixel color, float thickness, RectangleF shape)
- where TPixel : struct, IPixel
- => source.Draw(options, new SolidBrush(color), thickness, shape);
+ public static IImageProcessingContext Draw(
+ this IImageProcessingContext source,
+ GraphicsOptions options,
+ Color color,
+ float thickness,
+ RectangleF shape) =>
+ source.Draw(options, new SolidBrush(color), thickness, shape);
///
/// Draws the outline of the rectangle with the provided brush at the provided thickness.
///
- /// The type of the color.
/// The image this method extends.
/// The color.
/// The thickness.
/// The shape.
/// The .
- public static IImageProcessingContext Draw(this IImageProcessingContext source, TPixel color, float thickness, RectangleF shape)
- where TPixel : struct, IPixel
- => source.Draw(new SolidBrush(color), thickness, shape);
+ public static IImageProcessingContext Draw(
+ this IImageProcessingContext source,
+ Color color,
+ float thickness,
+ RectangleF shape) =>
+ source.Draw(new SolidBrush(color), thickness, shape);
}
}
\ No newline at end of file
diff --git a/src/ImageSharp.Drawing/Processing/DrawTextExtensions.cs b/src/ImageSharp.Drawing/Processing/Extensions/DrawTextExtensions.cs
similarity index 59%
rename from src/ImageSharp.Drawing/Processing/DrawTextExtensions.cs
rename to src/ImageSharp.Drawing/Processing/Extensions/DrawTextExtensions.cs
index 46061ce9b..163a676bb 100644
--- a/src/ImageSharp.Drawing/Processing/DrawTextExtensions.cs
+++ b/src/ImageSharp.Drawing/Processing/Extensions/DrawTextExtensions.cs
@@ -16,7 +16,6 @@ namespace SixLabors.ImageSharp.Processing
///
/// Draws the text onto the the image filled via the brush.
///
- /// The type of the color.
/// The image this method extends.
/// The text.
/// The font.
@@ -25,14 +24,17 @@ namespace SixLabors.ImageSharp.Processing
///
/// The .
///
- public static IImageProcessingContext DrawText(this IImageProcessingContext source, string text, Font font, TPixel color, PointF location)
- where TPixel : struct, IPixel
- => source.DrawText(TextGraphicsOptions.Default, text, font, color, location);
+ public static IImageProcessingContext DrawText(
+ this IImageProcessingContext source,
+ string text,
+ Font font,
+ Color color,
+ PointF location) =>
+ source.DrawText(TextGraphicsOptions.Default, text, font, color, location);
///
/// Draws the text onto the the image filled via the brush.
///
- /// The type of the color.
/// The image this method extends.
/// The options.
/// The text.
@@ -42,14 +44,18 @@ namespace SixLabors.ImageSharp.Processing
///
/// The .
///
- public static IImageProcessingContext DrawText(this IImageProcessingContext source, TextGraphicsOptions options, string text, Font font, TPixel color, PointF location)
- where TPixel : struct, IPixel
- => source.DrawText(options, text, font, Brushes.Solid(color), null, location);
+ public static IImageProcessingContext DrawText(
+ this IImageProcessingContext source,
+ TextGraphicsOptions options,
+ string text,
+ Font font,
+ Color color,
+ PointF location) =>
+ source.DrawText(options, text, font, Brushes.Solid(color), null, location);
///
/// Draws the text onto the the image filled via the brush.
///
- /// The type of the color.
/// The image this method extends.
/// The text.
/// The font.
@@ -58,14 +64,17 @@ namespace SixLabors.ImageSharp.Processing
///
/// The .
///
- public static IImageProcessingContext DrawText(this IImageProcessingContext source, string text, Font font, IBrush brush, PointF location)
- where TPixel : struct, IPixel
- => source.DrawText(TextGraphicsOptions.Default, text, font, brush, location);
+ public static IImageProcessingContext DrawText(
+ this IImageProcessingContext source,
+ string text,
+ Font font,
+ IBrush brush,
+ PointF location) =>
+ source.DrawText(TextGraphicsOptions.Default, text, font, brush, location);
///
/// Draws the text onto the the image filled via the brush.
///
- /// The type of the color.
/// The image this method extends.
/// The options.
/// The text.
@@ -75,14 +84,18 @@ namespace SixLabors.ImageSharp.Processing
///
/// The .
///
- public static IImageProcessingContext DrawText(this IImageProcessingContext source, TextGraphicsOptions options, string text, Font font, IBrush brush, PointF location)
- where TPixel : struct, IPixel
- => source.DrawText(options, text, font, brush, null, location);
+ public static IImageProcessingContext DrawText(
+ this IImageProcessingContext source,
+ TextGraphicsOptions options,
+ string text,
+ Font font,
+ IBrush brush,
+ PointF location) =>
+ source.DrawText(options, text, font, brush, null, location);
///
/// Draws the text onto the the image outlined via the pen.
///
- /// The type of the color.
/// The image this method extends.
/// The text.
/// The font.
@@ -91,14 +104,17 @@ namespace SixLabors.ImageSharp.Processing
///
/// The .
///
- public static IImageProcessingContext DrawText(this IImageProcessingContext source, string text, Font font, IPen pen, PointF location)
- where TPixel : struct, IPixel
- => source.DrawText(TextGraphicsOptions.Default, text, font, pen, location);
+ public static IImageProcessingContext DrawText(
+ this IImageProcessingContext source,
+ string text,
+ Font font,
+ IPen pen,
+ PointF location) =>
+ source.DrawText(TextGraphicsOptions.Default, text, font, pen, location);
///
/// Draws the text onto the the image outlined via the pen.
///
- /// The type of the color.
/// The image this method extends.
/// The options.
/// The text.
@@ -108,14 +124,18 @@ namespace SixLabors.ImageSharp.Processing
///
/// The .
///
- public static IImageProcessingContext DrawText(this IImageProcessingContext source, TextGraphicsOptions options, string text, Font font, IPen pen, PointF location)
- where TPixel : struct, IPixel
- => source.DrawText(options, text, font, null, pen, location);
+ public static IImageProcessingContext DrawText(
+ this IImageProcessingContext source,
+ TextGraphicsOptions options,
+ string text,
+ Font font,
+ IPen pen,
+ PointF location) =>
+ source.DrawText(options, text, font, null, pen, location);
///
/// Draws the text onto the the image filled via the brush then outlined via the pen.
///
- /// The type of the color.
/// The image this method extends.
/// The text.
/// The font.
@@ -125,14 +145,18 @@ namespace SixLabors.ImageSharp.Processing
///
/// The .
///
- public static IImageProcessingContext DrawText(this IImageProcessingContext source, string text, Font font, IBrush brush, IPen pen, PointF location)
- where TPixel : struct, IPixel
- => source.DrawText(TextGraphicsOptions.Default, text, font, brush, pen, location);
+ public static IImageProcessingContext DrawText(
+ this IImageProcessingContext source,
+ string text,
+ Font font,
+ IBrush brush,
+ IPen pen,
+ PointF location) =>
+ source.DrawText(TextGraphicsOptions.Default, text, font, brush, pen, location);
///
/// Draws the text using the default resolution of 72dpi onto the the image filled via the brush then outlined via the pen.
///
- /// The type of the color.
/// The image this method extends.
/// The options.
/// The text.
@@ -143,8 +167,14 @@ namespace SixLabors.ImageSharp.Processing
///
/// The .
///
- public static IImageProcessingContext DrawText(this IImageProcessingContext source, TextGraphicsOptions options, string text, Font font, IBrush brush, IPen pen, PointF location)
- where TPixel : struct, IPixel
- => source.ApplyProcessor(new DrawTextProcessor(options, text, font, brush, pen, location));
+ public static IImageProcessingContext DrawText(
+ this IImageProcessingContext source,
+ TextGraphicsOptions options,
+ string text,
+ Font font,
+ IBrush brush,
+ IPen pen,
+ PointF location) =>
+ source.ApplyProcessor(new DrawTextProcessor(options, text, font, brush, pen, location));
}
}
\ No newline at end of file
diff --git a/src/ImageSharp.Drawing/Processing/FillPathBuilderExtensions.cs b/src/ImageSharp.Drawing/Processing/Extensions/FillPathBuilderExtensions.cs
similarity index 61%
rename from src/ImageSharp.Drawing/Processing/FillPathBuilderExtensions.cs
rename to src/ImageSharp.Drawing/Processing/Extensions/FillPathBuilderExtensions.cs
index ff4de3ff8..ca7eab93f 100644
--- a/src/ImageSharp.Drawing/Processing/FillPathBuilderExtensions.cs
+++ b/src/ImageSharp.Drawing/Processing/Extensions/FillPathBuilderExtensions.cs
@@ -15,14 +15,16 @@ namespace SixLabors.ImageSharp.Processing
///
/// Flood fills the image in the shape of the provided polygon with the specified brush.
///
- /// The type of the color.
/// The image this method extends.
/// The graphics options.
/// The brush.
/// The shape.
/// The .
- public static IImageProcessingContext Fill(this IImageProcessingContext source, GraphicsOptions options, IBrush brush, Action