Singularity/Library/PackageCache/com.unity.2d.psdimporter@6.0.7/Editor/PSDPlugin/PhotoShopFileType/BlendModeMapping.cs
2024-05-06 11:45:45 -07:00

108 lines
3.8 KiB
C#

/////////////////////////////////////////////////////////////////////////////////
//
// Photoshop PSD FileType Plugin for Paint.NET
// http://psdplugin.codeplex.com/
//
// This software is provided under the MIT License:
// Copyright (c) 2006-2007 Frank Blumenberg
// Copyright (c) 2010-2014 Tao Yue
//
// See LICENSE.txt for complete licensing and attribution information.
//
/////////////////////////////////////////////////////////////////////////////////
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using PaintDotNet;
using PhotoshopFile;
using PDNWrapper;
namespace PaintDotNet.Data.PhotoshopFileType
{
internal static class BlendModeMapping
{
/// <summary>
/// Convert between Paint.NET and Photoshop blend modes.
/// </summary>
public static string ToPsdBlendMode(this LayerBlendMode pdnBlendMode)
{
switch (pdnBlendMode)
{
case LayerBlendMode.Normal:
return PsdBlendMode.Normal;
case LayerBlendMode.Multiply:
return PsdBlendMode.Multiply;
case LayerBlendMode.Additive:
return PsdBlendMode.LinearDodge;
case LayerBlendMode.ColorBurn:
return PsdBlendMode.ColorBurn;
case LayerBlendMode.ColorDodge:
return PsdBlendMode.ColorDodge;
case LayerBlendMode.Overlay:
return PsdBlendMode.Overlay;
case LayerBlendMode.Difference:
return PsdBlendMode.Difference;
case LayerBlendMode.Lighten:
return PsdBlendMode.Lighten;
case LayerBlendMode.Darken:
return PsdBlendMode.Darken;
case LayerBlendMode.Screen:
return PsdBlendMode.Screen;
// Paint.NET blend modes without a Photoshop equivalent are saved
// as Normal.
case LayerBlendMode.Glow:
case LayerBlendMode.Negation:
case LayerBlendMode.Reflect:
case LayerBlendMode.Xor:
return PsdBlendMode.Normal;
default:
Debug.Fail("Unknown Paint.NET blend mode.");
return PsdBlendMode.Normal;
}
}
/// <summary>
/// Convert a Photoshop blend mode to a Paint.NET BlendOp.
/// </summary>
public static LayerBlendMode FromPsdBlendMode(string blendModeKey)
{
switch (blendModeKey)
{
case PsdBlendMode.Normal:
return LayerBlendMode.Normal;
case PsdBlendMode.Multiply:
return LayerBlendMode.Multiply;
case PsdBlendMode.LinearDodge:
return LayerBlendMode.Additive;
case PsdBlendMode.ColorBurn:
return LayerBlendMode.ColorBurn;
case PsdBlendMode.ColorDodge:
return LayerBlendMode.ColorDodge;
case PsdBlendMode.Overlay:
return LayerBlendMode.Overlay;
case PsdBlendMode.Difference:
return LayerBlendMode.Difference;
case PsdBlendMode.Lighten:
return LayerBlendMode.Lighten;
case PsdBlendMode.Darken:
return LayerBlendMode.Darken;
case PsdBlendMode.Screen:
return LayerBlendMode.Screen;
// Photoshop blend modes without a Paint.NET equivalent are loaded
// as Normal.
default:
return LayerBlendMode.Normal;
}
}
}
}